2
假設之間唯一的Postgresql> = 10,有一個方法來約束的表爲在(或更多)個列唯一值?也就是說,一個值只能出現在一列中。我想盡可能避免觸發器。對於一個單一的列將是微不足道的。兩列
讓我們有這個表:
CREATE TABLE foo (
col1 INTEGER,
col2 INTEGER
);
所以應該
1 2
4 3
5 7
雖然8 4
是不可能的,因爲有4 3
了。
到目前爲止,我想它可能是可能的限制EXCLUDE ((ARRAY[col1, col2]) WITH &&)
,但似乎不支持(沒有?):
ERROR: operator &&(anyarray,anyarray) is not a member of operator family "array_ops"
這個要求也可以看起來就像一個空的內部連接表(on a.col1 = b.col2
)。我想我可以使用觸發器,但我想盡可能避免它們。
P. S.這裏是a related question。
你能解釋爲什麼你需要它嗎?我認爲它打破了[Nothing but the key](https://en.wikipedia.org/wiki/Third_normal_form#「Nothing_but_the_key」)規則。或者,也許這是[XY問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)? – Adam
你如何使用這兩個數字?爲什麼不能用一個整數列創建一個表,例如一個'varchar'列指示它是用作「col1」還是「col2」(這些名稱並不真正有用)。你可以使用一個簡單的唯一索引 –
@a_horse_with_no_name:'col1'和'cols2'確實意味着這些值同樣重要且可以互換。他們不能在一列中,因爲這些值應該組合成對。 – Igor