Postgresql> = 10이라고 가정하면 두 개의 고유 한 값을 갖도록 테이블을 제한하는 방법이 있습니까? (이상) 열? 즉, 값은 열 중 하나에서만 나타날 수 있습니다. 가능한 한 트리거를 피하고 싶습니다. 사소한 단일 컬럼의 경우.두 개의 열 중 고유 한 것
은의이 테이블을 보자 : 이미 4 3
이 있기 때문에 8 4
이 불가능하다 동안
CREATE TABLE foo (
col1 INTEGER,
col2 INTEGER
);
은 그래서
1 2
4 3
5 7
을해야합니다.
은 지금까지 나는 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입니다.
이유를 설명해 주시겠습니까? 나는 그것이 [열쇠 만이 아니다] (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
어떻게이 두 숫자를 사용합니까? 단일 정수 열이있는 표를 만들 수없는 이유는 무엇입니까? "col1"또는 "col2"로 사용되는지 나타내는 varchar 열 (이 이름은별로 도움이되지 않습니다). 당신은 간단한 고유 인덱스 –
@ a_horse_with_no_name을 사용할 수 있습니다 :'col1'과'cols2'는 값이 똑같이 중요하고 상호 교환 가능하다는 것을 의미합니다. 이러한 값은 쌍을 구성해야하기 때문에 하나의 열에있을 수 없습니다. – Igor