我想找到一種方法來爲我的數據庫中的一個主題存儲多個地址,每個主題只有一個默認地址。Postgres在兩列上的唯一約束:整數和布爾值
爲了削減長話短說,假設我們有一個表:
CREATE TABLE test
(
id integer NOT NULL,
active boolean NOT NULL,
CONSTRAINT pk_id PRIMARY KEY (id)
)
對於表中的每個ID,必須有最真實的1活躍值。
我怎麼能做到這一點?
謝謝。
我想找到一種方法來爲我的數據庫中的一個主題存儲多個地址,每個主題只有一個默認地址。Postgres在兩列上的唯一約束:整數和布爾值
爲了削減長話短說,假設我們有一個表:
CREATE TABLE test
(
id integer NOT NULL,
active boolean NOT NULL,
CONSTRAINT pk_id PRIMARY KEY (id)
)
對於表中的每個ID,必須有最真實的1活躍值。
我怎麼能做到這一點?
謝謝。
Partial index是你想要什麼:
create unique index some_index on test (id) where active;
由於@ThiefMaster規定的主要指標應該被刪除。
在這個問題的情況下,不需要如前所述。
但是僅供參考,您可以使用將約束條件設置爲2個或更多(不同類型的非主鍵)列。例如:
ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE (integer_column, boolean_column);
欲瞭解更多信息,請參閱Postgres的文檔爲Constraints,「唯一約束」部分。引述:
如果一個唯一約束是指一組列,列列由逗號分隔...
此規定,在指定的列值的組合在整個表獨特的,儘管任何一列不一定是(並且通常不是)唯一的。
注: 一個partial index將建立在一個表,其中有一個完全不同的目的的一個子集的索引。
我認爲你的解決方案,他不能有多個非活動地址。 – Hossein
其實你不需要做任何*因爲'id'是主鍵使它獨一無二,所以*不能*是具有相同ID的兩行。 – ThiefMaster
如果你不想'id'作爲主要的,那麼你將需要編寫一個觸發器:http://www.postgresql.org/docs/9.1/static/sql-createtrigger.html但這可能不是你想要的。 –