5

私は個人プロジェクト用の小さなデータベースを設計しています。テーブルの1つ、それをテーブルと呼びC、2つのテーブルの1つへの外部キーを持っている必要があり、それらAを呼び出しB、エントリが異なります。これを実装するための最良の方法は何ですか?

これまでのアイデア:

  • 2つのテーブルに接続する2つのnull許容外部キーフィールドを使用してテーブルを作成します。
    • おそらく、挿入と更新を拒否するトリガーがあり、そのうちの0または2がnullになります。
  • 同一のデータを持つ2つの別々のテーブル
    • これは、データの複製に関する規則に違反します。

この問題を解決するためのよりエレガントな方法は何ですか?

4

2 に答える 2

11

ポリモーフィック アソシエーションと呼ばれる設計について説明しています。これはしばしば人々を困らせます。

私が通常お勧めするもの:

A  -->  D  <--  B
        ^
        |
        C

この設計では、と のD両方AB参照する共通の親テーブルを作成します。これは、OO 設計における一般的なスーパータイプに類似しています。これで、子テーブルCがスーパーテーブルを参照できるようになり、そこからそれぞれのサブテーブルにアクセスできます。

制約と複合キーを使用して、特定の行をD参照できるようにするAB、両方で参照できないようにすることができます。

于 2010-01-20T01:31:08.063 に答える
1

2 つのテーブルのうちの 1 つだけを参照する (N のうちの 1 つを参照しない)ことが確実な場合はC、最初の選択は賢明なアプローチです (私が以前に使用したものです)。ただし、外部キー列の数が増え続けると思われる場合は、組み込むことができる類似性または重複があることを示唆しており、再検討することをお勧めします。

于 2010-01-20T01:27:22.877 に答える