Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mencipta Kekangan Unik dalam Postgres dengan Lajur Boleh Null?
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.
Objektifnya ialah untuk mencipta kekangan unik yang menghalang baris pendua berdasarkan lajur tertentu, walaupun lajur boleh null mengandungi nilai NULL.
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!