なぜこれが良い考えではないのかを説明し、そこから始めましょう:
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 の選択肢があります。
- Card_numbers を別のテーブルに配置し、連想テーブルを介して Active_card に戻します
- 2 番目の card_number 列を Active_card に配置すると、入力されたフィールドに応じて、追加情報を得るためにどのテーブルに移動するかがわかります。
- Definitive_Card と tmp_card のすべてのフィールドを同じテーブルに配置します
これらのオプションにはそれぞれ長所と短所があります。ただし、ビジネス要件を完全に理解していないと、どちらがお客様の状況に最適かを判断できません。
あなたの試みが RDBMS ではうまくいかないことは言うまでもありません。ただし、上記の 3 つのオプションのいずれも、適切な外部キーを追加できるという要件を満たしています。