主キーの列 (または列) は NOT NULL である必要があります。レコードは、NULL によって一意に識別できません。したがって、外部キーの参照先の ID 列は NOT NULL として定義する必要があります。
ただし、外部キー関係をオプションにすることは正当な設計上の決定であり、それを表す方法は、キーの参照側をオプションにすること、つまり NULL を許可することです。
データモデリングの用語では、あなたが説明したのは(排他的な)アークです。論理モデリングではアークは完全に受け入れられますが、別のテーブルとして実装することを支持する強い意見があります。あなたのシナリオでは、それは一般的な Sale
になります テーブルと 2 つのサブタイプ テーブル VehicleSale
と PieceSale
.
別のテーブルを実装する利点は次のとおりです。
- 外部キー制約をより簡単に適用できる;
- 部品販売には当てはまらない (たとえば) 車両販売に関連する追加の列を簡単に追加できます;
- サブタイプを追加してモデルを拡張しやすくする;
- アプリケーション開発を簡素化できる、より明確なデータ モデル
ただし、利点はすべて一方通行ではありません。 Sale
を確実にするのはとても簡単ですが、 VehicleSale
のいずれかに適用されます または PieceSale
両方ではなく、Sale
というルールを適用します。 しなければならない 子レコードを持つと、実際にはかなり厄介になります。
したがって、優勢なアドバイスは、排他的なアークは間違っているというものであり、一般的には良いアドバイスです。しかし、一部の人が理解するほど明確ではありません.