2012-02-28 5 views
0

5つのテーブルのうちのどれかへの参照を持つことができるテーブルがあります。私のプライマリテーブルに5つのNullable FKカラムがあるべきか、5つの潜在的なセカンダリテーブルのそれぞれに私のプライマリにFKリファレンスを戻すべきですか?データベース設計:私の参照はどこにあるべきですか、親子ですか?

私はどちらかが「うまくいく」ことを理解しています。インスタンスの場合、5 Nullable FKのルートに行くと、カスケード削除を使用できません。

ある時間を惜しみなく覚えておいてください。

EDIT

私の親テーブルは、基本的にはちょうどアンケートでNoticeOfAction、です。それはNOAで選択された "意図された行動"に基づいて質問のちょうど異なるサブセットである5つの潜在的な子テーブルのいずれかを持つことができます。したがって、NOAテーブルのエントリが最初に発生し、一度に5つの子テーブルのうちの1つしか参照できません。 NOAエントリが削除された場合、NOA自体なしでは存在できないため、Child Actionテーブルの対応するエントリを削除します。

私は役立つことを願っています。

+0

一般的な「テーブル」ではなく現実的な例を提供する方が簡単です。たとえば、記事を読むには、「記事はFKを著者にしてもらうべきか、著者は各記事にnullヌルFKの列を付けるべきか」という質問があります。「おそらく間違った解釈ですが、一般的な質問を誤解する方法はたくさんあります。 –

+0

わかりました、私は今試みて、言い直します。フィードバックをお寄せいただきありがとうございます。 –

+2

5つの子テーブルを任意の方法で組み合わせることができれば興味があります。多分、質問のサブセットのタイプを明らかにする追加の列を追加してください。次に、1つの親テーブルを参照する1つの子テーブルへの関係が単純化されます。しかし、もちろん、これはあなたのデータに依存します。 – vasek1

答えて

2

5つの子テーブルを1つにまとめることができれば興味があります。多分、質問のサブセットのタイプを明らかにする余分な列を追加してください。次に、1つの親テーブルを参照する1つの子テーブルへの関係が単純化されます。しかし、もちろん、これはあなたのデータに依存します。

1

これに対する厳しい答えはありません。しかし、あなたは考慮する必要があります:

  • あなたのカスケード削除はあなたに使用していますか?

  • fks間に制約がありますか?同様に 'テーブルAへの参照がある場合はテーブルBを参照してはいけません。もし単一のテーブルにチェック制約を使用して実装することができれば、fkも含まれていればいいです。

  • 最初?他のテーブルではIDが良いかもしれません。

+0

うーん、ありがとう。答えるには:1)はい、5つの子テーブルのうちの1つのレコードは、親テーブルレコードなしでは使用できません。 2)親は一度に5つの子テーブルのうちの1つへの参照のみを持つことができます。 3)親テーブルを最初に作成する必要があります。 カスケード削除自体は、それが容易に克服されるので必要ではありません。 –

1

一つの可能​​な実装:親テーブルが5つのテーブルのかを示す、(少なくとも)主キーと「スイッチ」または「タイプ」列を持っています - 本当に-ます含まれて「サブテーブル」、関連するデータ各サブテーブルは、外部キーとして親テーブルIDを持ちます。

クエリを実行するときに、親のタイプを識別し、適切なテーブルから子エントリを読み込みます。クエリを簡略化するためのビューと、参照整合性を保証するための外部キーを使用して、精巧なトリックを行うことができます。

0

親テーブルのIDを子テーブルに入れます。カスケーディングが正しく機能し、最初に親データを最初に入力してから、子データを正しく入力することができます。

関連する問題