2012-11-17 3 views
1

질문을 올바르게 표현했는지 모르겠으므로 자세한 설명을 시도해 보겠습니다.여러 컬럼간에 집합과 같은 고유성을 적용하려면 어떻게해야합니까?

CREATE TABLE x (a int, b int); 

내가 쌍 (a가, b)과 동일하게하는 (b, a), 중복의 삽입을 허용하기를 고려할 : I 테이블의 종류가있다.

CREATE TABLE x (
    ab set, 
    UNIQUE (ab) 
); 

을하지만, 그래서이 일을 가장 좋은 방법은 무엇되지 않습니다 PostgreSQL을가 set 데이터 유형이 있다면,이 같은 테이블을 선언 할 수 있는가?

답변

4
create unique index idx_unique_ab 
    on x (least(a,b), greatest(a,b)); 
1

나는 쌍을 한 방향으로 만 저장할 수 있고 규칙적 고유 제한을 만들 수 있다고 강요합니다.

CREATE TABLE x 
    (
    a INT, 
    b INT, 
    CHECK (a < b), 
    UNIQUE(a, b) 
); 
+0

불행하게도 이것은 규칙에 위배되지 않는 쌍 (2,1)의 초기 삽입을 방지합니다. – jl6

+0

@ ji6 - 규칙은'(2,1)'이 의미 상으로'(1,2) '와 같음을 나타내며 삽입시 일관성있는 형식이 사용되도록 삽입 시간에 정렬하도록 선택합니다 트리거를 사용할 수 있음) 또는 다른 응답에 따라이 형식으로 데이터의 중복 사본을 저장하십시오. –

관련 문제