2014-03-03 2 views
0

ID, NameCode을 포함하는 Country 테이블이 있습니다. 이 세 열 모두 고유 한 값을 포함해야하며 NULL이 될 수 없습니다.다중 열 기본 키 또는 고유 제한?

내 질문은 내가 (하나 개의 인덱스에, 내 생각)을 ID 열에 기본 키와 NameCode 컬럼들에 대한 유일 컨 스트레인 트를 만드는 더 나은 것, 또는 단지 Name을 포함하는 것이 좋을 것입니다 ID이있는 기본 키의 Code 열? 그리고 왜? 복수 열 기본 키를 사용함으로써 발생할 수있는 잠재적 인 단점이나 복잡성이 있습니까? 모든

답변

4

첫째 - 네, 복합 기본 키는 세 개의 열이 위로가 더 짜증나는이 테이블에 가입 할 수있게 만든 - 다른 테이블이 Country 테이블에 가입하고자하는 모두 세 개의 열을 가지고해야합니다을 사용하여 조인을 설정하십시오.

더 중요한 것은 - 아니요 같은 제한! 별도로 모두 CodeNameID에 PK와 고유 제한 조건이있는 경우

, 다음이 하지 유효합니다

ID Code  Name 
-------------------------- 
41 CH  Switzerland 
341 CH  Liechtenstein 
555 LIE  Liechtenstein 

CHCodeLiechtenstein 모두의 Name 두 번 나타납니다 때문에 .

는하지만 모두 함께 세 개의 열에서 하나의 PK가있는 경우 - 다음이 유효 각 행은 다른 튜플 데이터의 때문에 - (41, CH, Switzerland 것은)와 같은 하지입니다 (341, CH, Liechtenstein) 따라서이 두 행은 허용됩니다. 각 열 별도로 "중복"을 가질 수 -

은 한 번에 모든 세 개의 열에서 PK를 넣어 경우, 고유성전체 튜플 (세 열)로 확장합니다.

그래서 정말 당신이 정말로 필요

  • 아래로 비등 (고유성하는)
  • 당신이
+1

다양한 설명이 테이블에 가입 할 수 있도록하는 방법을 쉽게, 감사합니다. 나는 두 가지 제약 조건의 차이점을 알고 있지만 화합물 PK가 분명히 바람직하지 않은 화합물 ('41, CH, Switzerland ')과 ('555, CH, Switzerland')를 모두 허용한다고 생각합니다. 어쨌든,이 표에 합류하는 데 따른 추가 어려움은 저의 결정을 쉽게 만듭니다. –

+0

정말 좋은 대답입니다, 마크. 하나의 스타일 제안 : ** 굵게 ** 대신 * 강조 *를 사용하는 것이 좋습니다. –