1

Product、Individual、Companyというラベルの付いた3つのテーブルがあります。現在、製品は会社または個人の両方ではなく、どちらかが所有しており、常にどちらか一方が所有しています。私が尋ねている質問は、これをどのように行うべきかということです。

companyID、ProductID、IndividualIDを持ち、companyIDまたはIndividualIDのいずれかにnull値を許可するownerというラベルの付いた4番目のテーブルがありますか?しかし、これは多くのnull値を作成するようであり、それでも1人の所有者のみを強制する必要があります。この場合、これら3つの属性はすべて、それぞれのテーブルを指す外部キーになります。これはあまり良い方法ではないようですが、まだ良い方法は考えられません。これを行う別の方法はありますか?

4

1 に答える 1

0

SQL宣言型参照整合性を使用して、探している種類のルールを適用することはできません。

個人と企業が本当に1つの「種類」であるかどうか、または少なくとも1つのテーブルで表すことができるコア属性(列)のセットを持っているかどうかを検討します(特別な列のリンクされたテーブルは、 2種類のエンティティ)。その場合は、それらの共通要素がそのテーブルに含まれるようにデータベースをリファクタリングし、そのテーブルのIDをProductテーブルの所有者IDとして使用します。

個人と会社が非常に異なっているために1つのテーブルにまとめることができないと判断した場合は、4番目のテーブルのアプローチを使用するか、コードで関係を強制することができます。また、ストアドプロシージャとトリガーをサポートし、トリガーで関係を適用するデータベースエンジンに切り替えることもできますが、パフォーマンスが低下します。

于 2012-09-15T01:38:57.933 に答える