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.