私は、他の複数のテーブルに関連するテーブルを持つデータベースの設計について洞察しています。特定の例は、さまざまな種類のものにコメントを付けるサイトです。人々が記事にコメントしたり、写真にコメントしたり、コメントを投稿したりできます。結合テーブルと型フィールドのトレードオフ
この表現するための二つの方法があるようです:お互いのテーブル TABLESのテーブル結合)
1:
- 記事
- articles_comments
- コメント
- comments_peopleを
- comments_photos
- 人
- 写真
または 2)
- 記事
- コメント
- 人
- 写真
であり、コメントテーブルには、「タイプ」フィールドと、もう一方のテーブルにリンクするitem_idがあります。
第1のアプローチはより適切であると思われますが、第2のアプローチでは表が少なく、ある点ではよりシンプルになるかもしれませんが、FK拘束を使用することができます。item_id複数のFKに関連する可能性があります(AFAIK - mysql innodbを使用)。私たちのアプリケーションでは、複数の関係(コメント、写真など)を持つ2-3個の表と、関係を必要とする5〜10個の表が存在する可能性はありません。
私はアドバイスを探していますが、より良いアプローチです。
アプローチ2は、手動で管理するのが非常に厄介です。 "ソース"と関係キーを追跡し、関係を設定する良い方法はありません。差別化されたテーブルを介してサブクラスをサポートするHibernateのようなフレームワークを使用している場合、それは "実行可能"(例えば、決して直接扱うことはできません)かもしれません。しかし、SQL DDLが分散キーをうまくエンコードできない場合でも、実際には「SQLモデルに適合」するので#1が好きです。([厄介な人には、制約と複合参照を使用できます] –
メモ - もう少し暮らして学んだ後、私はYzmir Ramirezの回答に変更しました。異なるコメント表を扱うことは、私の意見でははるかに悪いことです。 (複数のメディアオブジェクトを追加するなど)は複雑になる 私はcomment_peopleなどのビューを使用して簡単なアクティブレコードを作成しますORMSの使い方が簡単です - テーブルには単一のタイプしかありません – Yehosef