1

リレーションM:Mに対して複数のテーブルテーブルを回避する方法は?

次のモデルを見る

ここに画像の説明を入力してください

それぞれの複数の選択肢からわかるように、私は常にうまく機能してきたいくつかのテーブルを作成しますが、今ではこれが発生する状況がたくさんあります。その数のテーブルを作成せずに解決策はありますか?

:明らかに、このソリューションは将来のクエリを複雑にしないことを覚えておく必要があります。レポート時に混在する複数のテーブルを選択、並べ替え、クエリします。

4

1 に答える 1

1

リンク テーブルの急増を避けることが優先事項である場合は、継承 (別名、カテゴリ、サブクラス化、汎化階層) を使用できます。

ここに画像の説明を入力

子エンティティItemがいくつあっても、必要なリンク テーブルは常に 1 つだけです ( PersonItem)。

残念ながら、継承は通常、今日の DBMS では直接サポートされていないため、これら 3 つの戦略の「1 つのテーブル内のすべてのクラス」または「テーブルごとのクラス」のいずれかを使用して手動で表現する必要があります(「テーブルごとの具体的なクラス」は依然として増殖します linkテーブル)。これにより、場合によっては複雑さが増すため、クエリをシンプルに保つことが優先される場合は、おそらく現在の設計に固執する方がよいでしょう (ただし、これは実行する予定のクエリの種類によって異なりますが、継承により実際にはよりシンプルになる場合もあります)。 .

ところで、上記のモデルは異なるものを許可せず、同じものHobbyThing共有しIdます。これはあなたにとって重要ではないと思いますが、重要な場合は、これは継承のないモデルの引数です (またはItem、型をの PKに含める必要があります)。

于 2012-06-06T10:16:54.820 に答える