ホームページ >データベース >mysql チュートリアル >データベース内の外部キー列は NULL 値を受け入れることができますか?

データベース内の外部キー列は NULL 値を受け入れることができますか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-11 06:44:41628ブラウズ

Can Foreign Key Columns Accept NULL Values in a Database?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。