mysqlを使用してデータベースを作成しているのですが
データベースでテーブルを分けるときって
【アカウントテーブル】
ID
アカウント 名
アカウント パスワード
名前
住所
電話番号
職業
【職業テーブル】
職業ID
職業名
というような1対多というのはよく組むとおもうんですが
下記のような
【アカウント情報テーブル(アカウント情報)】
アカウントID
アカウント 名
アカウント パスワード
【アカウント情報テーブル(プロフィール情報)】
アカウントID
名前
住所
電話番号
職業
1対1の関係でテーブルをジャンル(エンティティ)ごとに複数にわけて
あとでリレーションして一個にまとめるというのはデータベース的にあまりよろしくないのでしょうか?
何故、こんなことしたいかというと、1テーブルあたりのカラム数がかなり多くなってくると
PHPでデータベースを書き込んだり呼び出したりする時に毎度多くのカラムを取り扱わなければならず
SELECTで、カラムを一個一個選んで行かないといけません。
しかし、取り扱いたいカラムは大抵の場合あるジャンルだけなので
リレーションするかしないかで、あるジャンルのデータだけを取り扱えれば
効率がよくなるのでは? というのがあります。
また、視覚的にカラムの把握もしやすくなります。
この1対1テーブルは、DB設計的にどうなでしょうか?
No.3ベストアンサー
- 回答日時:
一般的に(MYSQLに限らず)DB設計的には、分けるのが正しいです。
メリットは、変更に強いということです。
たとえば、画面イメージが変わった、帳票のイメージ(項目が減った、増え
た)など、設計段階および製造段階においてユーザー要望または、設計
バグ等により変更されることが多々あります。
そのような場合、利用単位にテーブルを作成していては、その都度テー
ブルの変更もあるかと思います。
テーブルを変更していては、それまでにその変更したテーブルを利用し
ているアプリケーションも変更する可能性がでてきます。そのことにより
変更のたびにシステムを全て見なおさなければならなくなり膨大にコス
トを消費してします罠に陥る可能性があります。
なので、設計レベルにおいて、業務に特化してエンティティを設計し、そ
れに沿ってテーブルを分けることが本筋かといえます。
また、設計者以外の人がそのテーブル構成を見て、大筋のシステムを
理解できるなどがあります。
設計から製造まで一人の人が行うってことはあまりないですからね!
説明せずに理解してくれることは非常に助かります。
このへんか、メリットではないでしょうか!
但し、あまりDB設計に忠実に行うことによってデメリットもあります。
テーブル数及び項目数が多くなり、テーブルアクセスのレスポンスが低
下することがあります。
なぜならば、DBは項目単位に管理されており、実際利用するときには
、複数の項目を連結して利用するため、多くの項目を一度い表示すると
きなどはそれがネックになりレスポンス低下を招く可能性があります。
この場合、そのへんも考慮してDB設計らしからぬ設計を行う場合があ
ります。たとえば、複数の項目をひとまとめにして、一つの可変項目に
納めてしまい、テーブルアクセス時の項目連結を抑えてることにより性
能を上げるとか。上記例ぐらいなら問題ないと思いますが1テーブルに
数千近くの項目数があるような設計になれば検討する事項といえるか
と思います。(お使いの環境にもよると思いますが)
回答ありがとうございます。
1テーブル300カラムくらいになっており
その300カラムは外部からインポートして取得したレコードが入るようになっています。
それにプラス、独自の追加カラムを足そうと考えています。
とりあえず、足す文は分離させることにしてみます。
No.2
- 回答日時:
>効率がよくなるのでは?
わけることによるメリットはほぼなく、命題の内容をみるかぎり
効率がさがることはあってもあがることはないように見受けられます。
ただ、心情的にわけて管理したいというのであれば、
この程度のオーバーヘッドは個人レベルで管理するDBにおいては
分けてもさほど問題になることはないと思います
わける意義があるものとすればざっと思い付きでこんなのが挙がるかと
・1項目に2つ以上のデータを収集する必要があるもの
・逆に任意で入力するようなNULLが多発するようなもの
・履歴データを保持する必要があるもの
・頻繁に追加・更新がかかるような項目
・検索につかわれないような無駄に大きなバイナリデータ
・項目によってそれを統括管理する人がことなる場合
また極度にアクセスが集中するような想定で
カリカリにチューニングするのであれば
逆に分けた方がよいかもしれませんが、たいていその手のサイトは
もっと別の部分でボトルネックがくるので、そこまでシビアに
テーブルを管理することはないかもしれません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- MySQL 【投稿情報用データベース posts】は必要ないと思います。 1 2022/06/02 21:25
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- Access(アクセス) ACSESS初心者です マンション管理をACCESSで出来ないかとチャレンジしています。 リレーショ 3 2022/10/08 11:45
- MySQL [1000地域 × 10カテゴリー = 1万件のテーブル]!グループ化? 1 2023/06/14 23:56
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- SQL Server ACCESSで複数テーブルを結合して、リストを作る方法を教えてください。 2 2022/08/12 19:32
- Oracle SQL update方法 2 2022/06/22 14:07
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テーブルリンク リンク元を知...
-
会社の飲み会の幹事になり、座...
-
L2SWはARPテーブルを持っている?
-
飲み会で、座敷orテーブルどち...
-
面接のときテーブルが正面に。...
-
下の画像はSQLの4大命令の性質...
-
外部キーだけのテーブル(主キ...
-
アクセスのリンクテーブル一覧...
-
MySQLで複数テーブルを作成する
-
ちょっとぐらいの時間なら里山...
-
テーブルの白く剥がれてるところに
-
2つのテーブルのカウント結果...
-
UTF8のテーブルをODBCドライバ...
-
[DB設計]多対多の問題点とは
-
【PHP】SQL文のSUM関数で出力し...
-
【SQL】グループ化した際の最頻...
-
「テーブルに座って……」という...
-
SQL 現在のレコードより古い番...
-
立体の重心の求め方について
-
複数テーブルにわたるCOUNT
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
会社の飲み会の幹事になり、座...
-
テーブルリンク リンク元を知...
-
L2SWはARPテーブルを持っている?
-
テーブルの白く剥がれてるところに
-
飲み会で、座敷orテーブルどち...
-
まるいテーブル 円い 丸い 漢字...
-
1つのテーブルに同じデータを参...
-
このテーブルで
-
置き配された食べ物を袋からど...
-
外部キーだけのテーブル(主キ...
-
【PHP】SQL文のSUM関数で出力し...
-
「テーブルに座って……」という...
-
男性と2人で飲食店に行きテーブ...
-
アクセスのリンクテーブル一覧...
-
一致するデータのみ削除したい
-
論理名とコメント構文(?)について
-
ACCESSで3ファイルを結合して、...
-
MySQLで複数テーブルを作成する
-
複数テーブルにわたるCOUNT
-
SQL 外部結合
おすすめ情報