sql >> データベース >  >> RDS >> Oracle

外部キーを null にすることはできますか?

    主キーの列 (または列) は NOT NULL である必要があります。レコードは、NULL によって一意に識別できません。したがって、外部キーの参照先の ID 列は NOT NULL として定義する必要があります。

    ただし、外部キー関係をオプションにすることは正当な設計上の決定であり、それを表す方法は、キーの参照側をオプションにすること、つまり NULL を許可することです。

    データモデリングの用語では、あなたが説明したのは(排他的な)アークです。論理モデリングではアークは完全に受け入れられますが、別のテーブルとして実装することを支持する強い意見があります。あなたのシナリオでは、それは一般的な Sale になります テーブルと 2 つのサブタイプ テーブル VehicleSalePieceSale .

    別のテーブルを実装する利点は次のとおりです。

    • 外部キー制約をより簡単に適用できる;
    • 部品販売には当てはまらない (たとえば) 車両販売に関連する追加の列を簡単に追加できます;
    • サブタイプを追加してモデルを拡張しやすくする;
    • アプリケーション開発を簡素化できる、より明確なデータ モデル

    ただし、利点はすべて一方通行ではありません。 Sale を確実にするのはとても簡単ですが、 VehicleSale のいずれかに適用されます または PieceSale 両方ではなく、Sale というルールを適用します。 しなければならない 子レコードを持つと、実際にはかなり厄介になります。

    したがって、優勢なアドバイスは、排他的なアークは間違っているというものであり、一般的には良いアドバイスです。しかし、一部の人が理解するほど明確ではありません.



    1. インデックスの使用、一時的な使用、ファイルソートの使用-これを修正する方法は?

    2. 多くのレコードをMySQLに速く挿入する方法、Java?

    3. php/javascriptでデータベースからの入力テキストの最大数を設定します

    4. アドホック分散クエリを有効にする方法