ORACLE では、主キーを構成するどの列にも NULL 値が許可されません。他のほとんどの「エンタープライズ レベル」のシステムでも同様であると思われます。
同時に、ほとんどのシステムでは個性的NULL 可能列に対する制約。
一意制約には NULL を含めることができるのに、主キーには NULL を含められないのはなぜでしょうか? これには根本的な論理的理由があるのでしょうか、それとも技術的な制限によるものでしょうか?
ベストアンサー1
主キーは行を一意に識別するためのものです。これは、キーのすべての部分を入力と比較することによって行われます。
定義上、NULL は正常な比較の一部にはなりません。それ自体との比較 ( NULL = NULL
) も失敗します。つまり、NULL を含むキーは機能しません。
さらに、オプションの関係をマークするために、外部キーで NULL が許可されます。(*) PK でもこれを許可すると、これが破綻します。
(*)注意: NULL 許容の外部キーを持つことは、きれいなリレーショナル データベース設計ではありません。
2つの実体がありA
、B
がA
に任意に関連付けることができる場合B
、解決テーブル( としましょう)を作成するのがクリーンな解決策です。そのテーブルは にAB
リンクします。A
B
は関係がある場合、レコードが含まれます。ないそうならないでしょう。