0

別のテーブルを参照して外部キーを設定しようとしています。

テーブルを想像してください:

Active_Card((主キー)Num_id 番号, num_card 番号,is_active varchar2);

TMP_CARD((PK)num_card number, reg_date date);

DEFINITIVE_CARD((PK num_card 番号、name varchar、create_date date)

したがって、num_card は Active_Card の外部キーです。私の問題は、Active_card で両方のテーブル (TMP_CARD と DEFINITIVE_CARD) を参照する方法です。

よろしくお願いします、

4

3 に答える 3

2

なぜこれが良い考えではないのかを説明し、そこから始めましょう:

1 つ目は、RDBMS でこれができるとしましょう。

したがって、Active_Cardと の両方に関連するFK がDefinitive_CardありTmp_Cardます。

ここdefinitive_cardで、123, 456 のtmp_card番号と 123, 789の番号があるとします。

外部キーは参照整合性を強制します。したがって、123 は両方に存在するので問題ありません。456 と 789 は両方のテーブルに存在しないため、そうではありません。

しかし、これは望んでいません。コメントで示されているように、両方ではなくいずれかのテーブルにある必要があることを示しました:* Active_Cardにエントリを含めるには、DEFINITIVE_CARDまたはTMP_CARDにエントリが存在する必要があります*

したがって、両方で同じ card_number を使用したくないため、実際には 2 ~ 3 の選択肢があります。

  1. Card_numbers を別のテーブルに配置し、連想テーブルを介して Active_card に戻します
  2. 2 番目の card_number 列を Active_card に配置すると、入力されたフィールドに応じて、追加情報を得るためにどのテーブルに移動するかがわかります。
  3. Definitive_Card と tmp_card のすべてのフィールドを同じテーブルに配置します

これらのオプションにはそれぞれ長所と短所があります。ただし、ビジネス要件を完全に理解していないと、どちらがお客様の状況に最適かを判断できません。

あなたの試みが RDBMS ではうまくいかないことは言うまでもありません。ただし、上記の 3 つのオプションのいずれも、適切な外部キーを追加できるという要件を満たしています。

于 2013-05-06T11:33:26.697 に答える
0

両方のテーブルを同時に参照したくないと思います。どちらかを参照したい。

これを行うには、個別の排他的 FK を使用します。または、継承を使用します。詳細はこちら

于 2013-05-06T11:20:50.823 に答える