2013-02-06 2 views
2

1 대 다 관계로 두 개의 테이블을 함께 연결하는 데 사용하는 테이블이 있습니다.두 개의 열에 대한 PSQL 고유 제약 조건

TableA 
id 
name 

TableB 
id 
name 

LinkTable 
TableA_id 
TableB_id 

기본적으로 TableA 중 하나는 TableB를 많이 가질 수 있습니다. 아주 간단합니다. 나는 고유 한 값으로 함께 열을 결합 고유 제한 조건을 만들려면

LinkTable 
TableA_id TableB_id 
1   1 
1   2 
1   3 
2   1 
2   2 
2   3 

: 지금이 문제는 다음과 같은이 관계 배의 규칙을 따르는 제약 조건을 만드는 것입니다. 따라서 위의 링크 표에서이 새로운 제약 조건을 사용하면

INSERT INTO LinkTable (TableA_id, TableB_id) VALUES (1, 4); 
INSERT INTO LinkTable (TableA_id, TableB_id) VALUES (1, 5); 
INSERT INTO LinkTable (TableA_id, TableB_id) VALUES (2, 6); 
INSERT INTO LinkTable (TableA_id, TableB_id) VALUES (3, 1); 

With out any problems 

And if I try to insert: 

INSERT INTO LinkTable (TableA_id, TableB_id) VALUES (1, 1); 
INSERT INTO LinkTable (TableA_id, TableB_id) VALUES (1, 3); 

이미 1,1과 1,3이있는 행이 있으므로 제약 조건이 발생합니다. 어떻게 이렇게 postgres 제약 조건을 만들까요? 두 행에 고유 한 제약 조건을 설정하면 하나 이상의 TableA_id와 그 이상의 TableB_id를 동일하게 가질 수 없습니다.

해결책은 무엇입니까?

+0

'제약이 불 것인가? –

+0

@Ozzy - FYI, 이것은 PL/SQL이 아니라 SQL입니다. 모든 DDL lk create, alter etc ...은 SQL의 일부입니다. – Art

+0

나는 그것을 깨달았지만 psql incase에는 고유 한 제약 조건을 작성하는 psql 고유의 방법이 지정되어 있습니다. 더 안전한 다음 죄송합니다 :) – Ozzy

답변

5

두 열을 모두 고유하게 설정해 보았습니까? 이미 1,1 및 1,3.` 당신이 그런 행이 표시되어있는 행이 있기 때문에

ALTER TABLE LinkTable 
ADD CONSTRAINT LinkTable_Unique UNIQUE (TableA_id, TableB_id); 
+0

고마워, 의도대로 근무 :) – Ozzy

+0

당신은 환영합니다':' –

2
create table LinkTable (
    TableA_id integer REFERENCES TableA(id), 
    TableB_Id integer REFERENCES TableB(id), 
    UNIQUE(tableA_id, tableB_id) 
);