リレーションM:Mに対して複数のテーブルテーブルを回避する方法は?
次のモデルを見る
それぞれの複数の選択肢からわかるように、私は常にうまく機能してきたいくつかのテーブルを作成しますが、今ではこれが発生する状況がたくさんあります。その数のテーブルを作成せずに解決策はありますか?
注:明らかに、このソリューションは将来のクエリを複雑にしないことを覚えておく必要があります。レポート時に混在する複数のテーブルを選択、並べ替え、クエリします。
リレーションM:Mに対して複数のテーブルテーブルを回避する方法は?
次のモデルを見る
それぞれの複数の選択肢からわかるように、私は常にうまく機能してきたいくつかのテーブルを作成しますが、今ではこれが発生する状況がたくさんあります。その数のテーブルを作成せずに解決策はありますか?
注:明らかに、このソリューションは将来のクエリを複雑にしないことを覚えておく必要があります。レポート時に混在する複数のテーブルを選択、並べ替え、クエリします。
リンク テーブルの急増を避けることが優先事項である場合は、継承 (別名、カテゴリ、サブクラス化、汎化階層) を使用できます。
子エンティティItem
がいくつあっても、必要なリンク テーブルは常に 1 つだけです ( PersonItem
)。
残念ながら、継承は通常、今日の DBMS では直接サポートされていないため、これら 3 つの戦略の「1 つのテーブル内のすべてのクラス」または「テーブルごとのクラス」のいずれかを使用して手動で表現する必要があります(「テーブルごとの具体的なクラス」は依然として増殖します linkテーブル)。これにより、場合によっては複雑さが増すため、クエリをシンプルに保つことが優先される場合は、おそらく現在の設計に固執する方がよいでしょう (ただし、これは実行する予定のクエリの種類によって異なりますが、継承により実際にはよりシンプルになる場合もあります)。 .
ところで、上記のモデルは異なるものを許可せず、同じものHobby
をThing
共有しId
ます。これはあなたにとって重要ではないと思いますが、重要な場合は、これは継承のないモデルの引数です (またはItem
、型をの PKに含める必要があります)。