2011-08-28 3 views
9

오라클 데이터베이스 디자인을 분석 중이며 같은 필드에서 고유 키와 기본 키를 모두 보면서 당혹 스럽습니다. 이러한 고유 키 쌍은 모든 테이블에서 일관되게 작성됩니다. 나는 이것을 할 이유가 없다.동일한 필드에서 기본 키와 고유 키를 함께 사용해야하는 이유가 있습니까?

어쨌든 기본 키가있는 경우 동일한 필드에 추가 고유 키를 만드는 것이 좋은 이유가 있습니까?

+1

기본 키가 고유하므로 다른 고유 제한/인덱스를 추가 할 이유가 없습니다. – Phil

답변

1

아니요, 고유 한 이유가 없습니다. 열을 PK로 설정하면 다음과 같은 사실을 확신 할 수 있습니다.

  1. INSERT 또는 UPDATE의 해당 열에 대해 NULL이 허용되지 않습니다.
  2. 해당 열의 전체 테이블 값은 항상 UNIQUE입니다.

PK만으로 충분합니다. 정의에 따라 PK 열의 UNIQUE 인덱스가 있으므로 해당 열만 영향을받을 때마다 쿼리에서 PK 인덱스를 사용하기 때문에 해당 열에 다른 인덱스를 추가 할 필요가 없습니다.

1

나는

당신은 기본 키 및 고유 키 양쪽으로 열 동일한 열 또는 조합을 지정할 수 없습니다 ... 불가능 (동일한 열 [S]에 PK와 고유 제한 조건) 믿습니다.

( here에서, 섹션 "기본 키 제약에 제한"). 그렇지 않니?

1

오라클은 같은 필드 집합에 동일한 UNIQUEPRIMARY KEY 제약 조건을 동일한 순서로 생성하도록 허용하지 않으며 ORA-02261으로 실패합니다.

복합 키가있는 경우 한 집합 (PRIMARY KEY (a, b))과 다른 고유 제약 조건 (UNIQUE (b, a))으로 된 열 집합에 PRIMARY KEY을 만들 수 있습니다.

이것은 구문 분석 및 실행되지만 단일 인덱스를 사용하여 두 제약 조건을 모두 경고하므로 의미가 없습니다.

테이블 스크립트를 게시 하시겠습니까?

1

조금 이론적 인 배경이 있습니다. 테이블을 모델링 할 때 집합을 식별합니다. 이 키는 논리적으로는 동일하지만 실용적인 목적으로 하나를 선택하여 "기본"이라고하며 나머지는 "대체"가됩니다.

그 빛에

그래서, ("대체 키가" "UNIQUE 제약 조건".라고하면서, 기본 키는 "PRIMARY KEY"라고 DDL SQL에서 )

, 당신의 질문에 해당 : "두 개의 동일한 키가 있어야하는 좋은 이유가 있습니까?"대답은 "아니오"입니다.

말했다되고 그건

, 당신 수도 겹치는 키 (일부 필드 전부는 아니지만 공유 즉, 키)을 가지고 있지만, 이것은 일반적으로 나쁜 디자인의 표시 ... 그리고 대답은 : "아마".


OTOH는 "고유 키"에 의한 경우, 당신은 실제로 "독특한 인덱스"을 의미하고 그래, 당신은 둘 다 필요합니다.

색인은 논리적 인 제약이 아닙니다. PRIMARY KEY와 같은 논리적 제약 조건을 사용하면 성능이 뛰어나고 (질의를 할 수 있지만 다른 주제입니다) 허용 할 수 있습니다.

4

다 대다를 해결하는 테이블의 경우 두 부분으로 된 키 (Quassnoi로 표시)가있는 것이 일반적입니다. 부모를 통한 액세스를 지원하는 색인이 필요할 가능성이 큽니다.

예를 들어, PERSON, ADDRESS 및 PERSON_ADDRESS 테이블이있는 경우 PERSON_ADDRESS 테이블의 기본 키는 (PERSON_ID, ADDRESS_ID) 및 지원 인덱스가 될 수 있습니다. (ADDRESS_ID, PERSON_ID)에 또 다른 색인을 갖게 될 것이고, 이것은 고유 한 필드 조합이므로 UNIQUE 색인이 될 가능성이 큽니다.

DBA가 기본 키 필드의 UNIQUE 인덱스로 시작하고 PRIMARY KEY 제약 조건을 생성 한 테이블을 생성하는 특별한 방법이있을 수도 있습니다. 그것은 당신이 제안하는 방식으로 일부 GUI 도구에 나타날 수 있습니다.

관련 문제