Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mencipta Kekangan Unik dalam Postgres dengan Lajur Boleh Null?

Bagaimana untuk Mencipta Kekangan Unik dalam Postgres dengan Lajur Boleh Null?

DDD
DDDasal
2025-01-21 00:12:08258semak imbas

How to Create a Unique Constraint in Postgres with Nullable Columns?

Mengendalikan Kekangan Unik dengan Lajur Boleh Null dalam PostgreSQL

Dokumen ini menangani cabaran untuk menguatkuasakan kekangan unik dalam jadual PostgreSQL yang mengandungi lajur boleh null. Isu ini timbul kerana, secara lalai, nilai NULL dianggap berbeza antara satu sama lain. Ini membenarkan berbilang baris dengan nilai bukan NULL yang sama apabila lajur yang boleh dibatalkan memegang NULL. Penyelesaian ini bertujuan untuk mencipta kekangan unik yang menganggap NULL sebagai setara.

Mengatasi Masalah

Objektifnya ialah untuk mencipta kekangan unik yang menghalang baris pendua berdasarkan lajur tertentu, walaupun lajur boleh null mengandungi nilai NULL.

Penyelesaian

PostgreSQL 15 dan Kemudian:

PostgreSQL 15 memperkenalkan klausa NULLS NOT DISTINCT, menyediakan penyelesaian yang mudah. Klausa ini memastikan bahawa nilai NULL dianggap sama dalam kekangan unik. Perintah berikut menunjukkan penggunaannya:

<code class="language-sql">ALTER TABLE favorites
ADD CONSTRAINT favo_uni UNIQUE NULLS NOT DISTINCT (user_id, menu_id, recipe_id);</code>

PostgreSQL 14 dan Terdahulu:

Untuk versi PostgreSQL yang lebih lama, klausa NULLS NOT DISTINCT tidak tersedia. Penyelesaiannya memerlukan mencipta dua indeks unik separa:

<code class="language-sql">CREATE UNIQUE INDEX favo_3col_uni_idx ON favorites (user_id, menu_id, recipe_id)
WHERE menu_id IS NOT NULL;

CREATE UNIQUE INDEX favo_2col_uni_idx ON favorites (user_id, recipe_id)
WHERE menu_id IS NULL;</code>

Pendekatan ini secara berkesan menguatkuasakan keunikan. Indeks pertama mengendalikan kes di mana menu_id bukan NULL, manakala indeks kedua menangani situasi di mana menu_id adalah NULL. Ini menghalang gabungan pendua (user_id, recipe_id) apabila menu_id adalah NULL.

Atas ialah kandungan terperinci Bagaimana untuk Mencipta Kekangan Unik dalam Postgres dengan Lajur Boleh Null?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn