PostgreSQL에서 두 열의 조합에서 고유 한 힘


191

PostgreSQL에서 두 열이 고유해야하도록 테이블을 설정하고 싶습니다. 두 값을 공유하는 두 개가없는 한 두 값 중 여러 값이있을 수 있습니다.

예를 들어 :

CREATE TABLE someTable (
    id int PRIMARY KEY AUTOINCREMENT,
    col1 int NOT NULL,
    col2 int NOT NULL
)

그래서, col1그리고 col2하지만 동시에, 반복 할 수 있습니다. 따라서 이것은 허용됩니다 (ID는 포함하지 않음)

1 1
1 2
2 1
2 2

그러나 이것은 아닙니다 :

1 1
1 2
1 1 -- would reject this insert for violating constraints

이것은 구글에서 최고 순위 검색 결과이기 때문에, 아마 존재 테이블을 제공하는 것이 좋습니다
— ϻαϻɾΣɀО-MaMrEzO

답변:


227
CREATE TABLE someTable (
    id serial primary key,
    col1 int NOT NULL,
    col2 int NOT NULL,
    unique (col1, col2)
)

autoincrementpostgresql이 아닙니다. 당신은 원합니다 serial.

col1과 col2가 고유하고 널이 될 수 없으면 좋은 기본 키를 만듭니다.

CREATE TABLE someTable (
    col1 int NOT NULL,
    col2 int NOT NULL,
    primary key (col1, col2)
)

6
이 경우 NULL 값을 허용하지 않기 때문에 여기서 고유 키보다 기본 키를 제안하는 것이 좋습니다. PostgeSQL 문서에서 : "고유 제한 조건 자체는 널 (NULL) 값을 제외하지 않기 때문에 고유 식별자를 제공하지 않습니다.)" postgresql.org/docs/8.1/static/ddl-constraints.html#AEN2038
— ndequeker

스키마 정의에서 이것을 어떻게 구현할 수 있습니까?
— wagng

2
일부 시나리오에서는 대리 키를 열 조합이 아닌 기본 키로 사용하고자 할 수 있습니다. 특히 빅 데이터 볼륨에서 조인을 수행 할 때 성능을 향상시킵니다. 나는 개인적으로 아래의 UNIQUE CONSTRAINT 솔루션에 갔다.
— Alexis.Rolland

1
unique (col1, col2 = '1')과 같은 순열 하나에 만 고유 제약 조건을 적용 할 수 있습니까?
— Vikram Khemlani


160

두 숫자를 함께 반복 할 수 없다는 고유 제한 조건을 작성하십시오.

ALTER TABLE someTable
ADD UNIQUE (col1, col2)

18

일반 UNIQUE CONSTRAINT와 같은 것 같습니다 :)

CREATE TABLE example (
a integer,
b integer,
c integer,
UNIQUE (a, c));

여기 더


1
이것은 독립적 a으로 인덱스와 인덱스를 추가합니까 c? a때로는 기반을 빨리 찾아야하고 때로는 기반을 빨리 찾아야하기 때문 c입니다.
— CMCDragonkai
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.