web-dev-qa-db-ja.com

継承-何が良いですか:3つの「等しい」テーブルまたは1つのタイプ列がありますか?

私は実存的な疑問を持っています:私の論理には3つの概念的なエンティティタイプがあります:

- distributors
- business_groups
- clients

3つすべてが"companies"であり、同じ列になります。関係は次のとおりです。

- 1 distributor => N business_group
- 1 business_group => N clients

逆に:

- 1 business_group => 1 distributor
- 1 client => 1 business_group

私の質問

エンティティタイプごとに1つずつ、合計3つの「等しい」テーブルを作成するか、またはdistributor_idおよびbusiness_group_id外部キー(同じテーブルを参照)を使用して3つに1つ作成する方がよいでしょうか?

考慮事項

  • 最初のアプローチ(3つのテーブル):異なる概念の分離、エントリの少ないテーブル、NULLのない外部キー、3つの「等しい」テーブル(すべて同じ列)
  • 秒アプローチ(1つのテーブル):1つのテーブルのみですが、直感的ではありません。外部キー列にいくつかのNULLがあり、typeにはさらに1列あります。
1
sevenlops

これは非常に一般的な質問です。人々は良い結果を得るために何を検索すればいいのかわからないだけです。 テーブル継承の実装に関する提案を確認する必要があります(多態性の関連付け)リレーショナルデータベースの場合。

その問題に対する一般的な答えはありません。あなたが言及したようないくつかの状態があり、それはすべてあなたのニーズと後のクエリ(書き込みと読み取り)の焦点に依存します。各オプションには長所と短所があります。たとえば、一貫性を犠牲にして読み取りパフォーマンスを向上させることができます。しかし、それを解決するためのツールを知るためには、このパターンを特定する必要があります。

あなたは他の人々がそれについて書いたものを読むことができます:

より詳細な分析については、BillKarwinとMartinFowlerによる文献を確認してください。

2
jynus