ホームページ >データベース >mysql チュートリアル >データベース内の外部キー列は NULL 値を受け入れることができますか?
NULL 値を許可する外部キー制約
データベース設計では、多くの場合、外部キーを使用してテーブル間の関係を確立し、参照整合性を確保する必要があります。ただし、場合によっては、一部の外部キー列を NULL にできるようにして制約を緩和することが必要になる場合があります。
質問:
データベース内の外部キーを持つテーブル列を空にすることはできますか?
答え:
はい、外部キー列には null 値を含めることができます。これにより、データ モデリングがより柔軟になり、外部キー列に null 以外のデータのみが存在する場合にのみ参照整合性が強制されるシナリオで使用できます。
MySQL の例:
次のテーブルを持つ MySQL データベースを考えてみましょう:
<code class="language-sql">CREATE DATABASE t; USE t; CREATE TABLE parent ( id INT NOT NULL, PRIMARY KEY (id) ) ENGINE=INNODB; CREATE TABLE child ( id INT NULL, parent_id INT NULL, FOREIGN KEY (parent_id) REFERENCES parent(id) ) ENGINE=INNODB;</code>
この例では、子テーブルのparent_id列がnull許容として定義されています。これは、子テーブルのparent_id列にNULL値を持つ行を含めることができることを意味します。
値が空でない場合にのみ制約を適用します:
外部キー値が null でない場合にのみ参照整合性を強制するには、ON DELETE SET NULL 句または ON UPDATE SET NULL 句を使用して外部キー制約を定義します。たとえば、次のステートメントは、外部キー値が null でない場合にのみ外部キー制約を強制します:
<code class="language-sql">ALTER TABLE child ADD FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE SET NULL ON UPDATE SET NULL;</code>
この構成では、parent_id 列に null 値を挿入できますが、親テーブルでの後続の更新または削除は子テーブルにカスケードされ、子テーブルの対応するparent_id 値が NULL に設定されます。
結論:
外部キー列を NULL にすることを許可し、ON DELETE SET NULL または ON UPDATE SET NULL 句を使用することにより、データベース管理者はデータ管理の柔軟性を提供しながらテーブル間の関係を確立できます。これにより、参照整合性が確保され、特定の参照がすぐに利用できない場合や意図的に空白のままになっている場合でも使用できるようになります。
以上がデータベース内の外部キー列は NULL 値を受け入れることができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。