
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も見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「テーブルに座って……」という...
-
会社の飲み会の幹事になり、座...
-
SQLServer2000とMSDEの共存
-
下記、問題に対しての解答が以...
-
2つのテーブルで一致している...
-
ホームページのデザインを変えたい
-
複雑なSQL文について
-
更新されたテーブルを表示したい
-
コンボボックスにレコードセッ...
-
テーブルの結合?SQL文を教えて...
-
面接のときテーブルが正面に。...
-
SQL serverの1つのデータベー...
-
重複項目の抽出方法を教えてく...
-
SQL2000 ワークテーブルの作成...
-
取数計算
-
テーブル結合の方法でのパフォ...
-
SQLServer2005 外部結合のソース
-
SQLServer DELETE 件数取得
-
JavaScriptでAccessのテーブル...
-
複数のテーブルの レコード件数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
会社の飲み会の幹事になり、座...
-
「テーブルに座って……」という...
-
面接のときテーブルが正面に。...
-
L2SWはARPテーブルを持っている?
-
テーブルリンク リンク元を知...
-
飲み会で、座敷orテーブルどち...
-
外部キーだけのテーブル(主キ...
-
男性と2人で飲食店に行きテーブ...
-
論理名とコメント構文(?)について
-
【エクセル】データテーブルの...
-
オーダーの覚え方について
-
まるいテーブル 円い 丸い 漢字...
-
リレーションシップが出来ません。
-
アクセスのリンクテーブル一覧...
-
UTF8のテーブルをODBCドライバ...
-
1対1のリレーション(主キー同...
-
データベースの接続に失敗して...
-
mysqlのupdate構文についての質...
-
妹が、メルカリで売れた商品を...
-
ACCESS での LEFT JOIN 時の WH...
おすすめ情報