ホームページ >データベース >mysql チュートリアル >データベーステーブル内のNull許容列に一意の制約を適用するにはどうすればよいですか?

データベーステーブル内のNull許容列に一意の制約を適用するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-20 23:56:13243ブラウズ

How to Enforce Unique Constraints with Nullable Columns in a Database Table?

NULL 許容列を含むテーブルに一意の制約を適用する

この記事では、Null 許容列を含むテーブルに一意制約を作成する際の課題について説明します。目的は、Null 許容列が Null であっても、複数の行が同じ値の組み合わせを持たないようにすることです。

質問:

提供されたテーブル スキーマには、null 許容の UserRepository 列があります。ただし、ユーザーは、MenuId 値に関係なく、UserId と RecipeId の各ペアに対して 1 行のみが存在することを確認したいと考えています。

答え:

PostgreSQL 15 以降:

  • UNIQUE 制約定義で NULLS NOT DISTINCT 句を使用します。
<code class="language-sql">ALTER TABLE Favorites
ADD CONSTRAINT Favorites_UniqueFavorite UNIQUE NULLS NOT DISTINCT (UserId, MenuId, RecipeId);</code>

PostgreSQL 14 以前:

  • 2 つの部分インデックスを作成します:
<code class="language-sql">CREATE UNIQUE INDEX favo_3col_uni_idx ON Favorites (UserId, MenuId, RecipeId)
WHERE MenuId IS NOT NULL;

CREATE UNIQUE INDEX favo_2col_uni_idx ON Favorites (UserId, RecipeId)
WHERE MenuId IS NULL;</code>

利点:

  • 必要な制約を効率的に適用します。

欠点 (部分インデックスのみ):

  • 外部キー参照とクラスタリング オプションを制限します。
  • 一部のクエリでは、一致する WHERE 条件がない場合は機能しません。

代替:

  • 複数の NULL 許容列が関係する場合は、この記事の説明「UNIQUE 制約が起動しないのはなぜですか?」を参照してください。

以上がデータベーステーブル内のNull許容列に一意の制約を適用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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