Kuatkuasakan kekangan unik dalam jadual yang mengandungi lajur boleh batal
Artikel ini membincangkan cabaran mencipta kekangan unik pada jadual yang mengandungi lajur boleh batal. Matlamatnya adalah untuk menghalang berbilang baris daripada mempunyai gabungan nilai yang sama, walaupun lajur yang boleh dibatalkan adalah batal.
Soalan:
Skema jadual yang disediakan mempunyai lajur UserRepository yang boleh dibatalkan. Walau bagaimanapun, pengguna ingin memastikan bahawa untuk setiap pasangan UserId dan RecipeId, hanya satu baris wujud, tanpa mengira nilai MenuId.
Jawapan:
PostgreSQL 15 atau lebih tinggi:
<code class="language-sql">ALTER TABLE Favorites ADD CONSTRAINT Favorites_UniqueFavorite UNIQUE NULLS NOT DISTINCT (UserId, MenuId, RecipeId);</code>
PostgreSQL 14 atau lebih rendah:
<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>
Kelebihan:
Kelemahan (indeks separa sahaja):
Alternatif:
Atas ialah kandungan terperinci Bagaimana untuk Menguatkuasakan Kekangan Unik dengan Lajur Boleh Null dalam Jadual Pangkalan Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!