給定以下架構
CREATE TABLE test (
value text,
flag bool
);
這是否可能,創建這樣的約束,允許具有相同value和的重復行flag = true,但最多允許一次具有給定value和的行flag = false
例如
這些應該執行沒有錯誤
INSERT INTO test (value, flag) VALUES ('1', true);
INSERT INTO test (value, flag) VALUES ('1', true);
INSERT INTO test (value, flag) VALUES ('1', true);
INSERT INTO test (value, flag) VALUES ('1', true);
INSERT INTO test (value, flag) VALUES ('1', true);
INSERT INTO test (value, flag) VALUES ('1', true);
INSERT INTO test (value, flag) VALUES ('1', false);
INSERT INTO test (value, flag) VALUES ('1', false);
INSERT INTO test (value, flag) VALUES ('1', true);
這應該會引發錯誤
INSERT INTO test (value, flag) VALUES ('1', false);
INSERT INTO test (value, flag) VALUES ('1', false);
我曾嘗試過EXCLUDE約束,但無法使其發揮作用。
uj5u.com熱心網友回復:
您正在尋找一個唯一的部分索引:
create unique index no_false_duplicates on test (value, flag) where not flag
當然,你必須弄清楚你想對null價值觀做些什么flag。我建議創建該flag列not null,因為null布林值很少是您想要的。
有關詳細資訊,請參閱CREATE INDEX 檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/415512.html
標籤:
