[SQL] 추가 "ID"열 대 복합 기본 키?
SQL추가 "ID"열 대 복합 기본 키?
우리는이 같은 테이블을 가지고 있다면 :
책은 (척 "ISBN"존재하지 않음)
하나는 후보 / 기본 키가 될 수있는 {저자, 제목, 판}을 주장 할 수 있습니다.
어떤 후보 / 기본 키가 {저자, 제목, 판} 또는 ID 열이 {저자, 제목, 판} 고유 인덱스 / 키 제한 조건으로 사용할지 여부를 수 있는지 여부를 결정한다?
그래서입니다
더 나은, 또는 :
여기서 {저자, 제목, 에디션} 추가 고유 인덱스 / 제약 조건은?
해결법
-
==============================
1.유일하게 그 다음은 보유하고, 책을 식별 {저자, 제목, 판} 말 :
유일하게 그 다음은 보유하고, 책을 식별 {저자, 제목, 판} 말 :
이제이 ID (정수)를 살펴 보자
나는 책 테이블 키는 외래 키와 같은 몇 가지 다른 테이블도 몇 인덱스에 표시됩니다 것을 추론 할 수있다. 그래서, 그것은 공간이 꽤 걸릴 것 - 말을 세 개의 열 X 40 자 (또는 무엇이든 ...) -이 각 테이블에서 플러스 일치하는 인덱스입니다.
이 "기타"테이블과 인덱스 작은을 위해, 나는 책 테이블에 고유 한 정수 열이 외래 키로 참조 할 것 키로 사용되는 추가 할 수 있습니다. 뭔가를 말 :
alter table Book add BookID integer not null identity;
bookID로서의 존재로 너무 독특한 (해야), 도서 테이블은 이제 두 개의 후보 키가 있습니다.
지금은 기본 키와 bookID로서 선택할 수 있습니다.
alter table Book add constraint pk_Book primary key (BookID);
그러나, {저자, 제목, 에디션} 이런 식으로 뭔가를 방지하기 위해 핵심 (독특한)를 유지해야한다 :
BookID Author Title Edition ----------------------------------------------- 1 C.J.Date Database Design 1 2 C.J.Date Database Design 1
그리고 기본으로 선택 - - bookID로서 추가, 그것을 정리해하지 않았다 정지 {저자, 제목, 판} 인 A (후보) 키를 누릅니다. 아직 자신의 고유 제한 조건과 일반적으로 일치하는 인덱스가 있어야합니다.
또한 설계 점에서,이 결정은 "물리적 인 수준"에서 수행 된 있습니다. 일반적으로, 디자인의 논리 레벨에,이 ID는하지 존재 않습니다 - 그것은 열 크기와 인덱스의 고려시 도입되었다. 따라서, 물리적 스키마는 논리적 인 하나에서 파생되었다. DB를 크기에 따라, RDBMS와 하드웨어를 사용, 그 크기 추론 아무도 측정 가능한 효과가 없을 수 있습니다 - 다른 입증 될 때까지 - PK가 완벽하게 좋은 디자인이 될 수 있기 때문에 {저자, 제목, 판}를 사용.
-
==============================
2.일반적으로, 변경 값에 기본 키를 원하지 않는다. 맹인 또는 대리 기본 키를 사용하는 이유입니다.
일반적으로, 변경 값에 기본 키를 원하지 않는다. 맹인 또는 대리 기본 키를 사용하는 이유입니다.
의 당신이 기본 키의 일부로서 저자와 책 테이블을 만들어 가정하자.
당신은 당신이 "레이 브래드 베리를"맞춤법이 틀린 것을 년 정도 후에 발견하자. 또는 더 나쁜, 당신은 "레이첼 블룸"맞춤법이 틀린. 그냥 당신이 오자를 수정하기 수정해야 얼마나 많은 데이터베이스 행을 상상한다. 그냥 많은 인덱스 참조가 변경 될 어떻게 상상.
당신이 대리 키 작성자 테이블이있는 경우 그러나, 당신은 단지 올바른 행에 있습니다. 어떤 인덱스는 변경 될 필요가 없습니다.
마지막으로, 데이터베이스 테이블 이름은 보통이 아니라 복수 (책)보다 (책) 단수.
-
==============================
3.고유성 제약 미래 (예를 들어, ISBN 책이 고유하게 추가해야합니다)에서 변경해야하는 경우 대리 기본 키 시나리오를 사용하는 또 다른 좋은 이유입니다. 데이터를 재생성 훨씬 쉬울 것이다.
고유성 제약 미래 (예를 들어, ISBN 책이 고유하게 추가해야합니다)에서 변경해야하는 경우 대리 기본 키 시나리오를 사용하는 또 다른 좋은 이유입니다. 데이터를 재생성 훨씬 쉬울 것이다.
-
==============================
4.이에 관한 많은 기사가있다. 귀하의 경우 복합 키의 문제점 :
이에 관한 많은 기사가있다. 귀하의 경우 복합 키의 문제점 :
당신의 데이터를 정상화 (dasblinkenlight) 제안과 같은 저자에 그냥 ID를 저장하는 것이 좋은 것입니다. 최악의 시나리오, 그 / 그녀는 (예를 들어, 그녀의 결혼을 얻고, 그녀는 그녀의 새 이름을 좋아한다) 그 / 그녀의 이름을 변경합니다.
from https://stackoverflow.com/questions/14588304/composite-primary-key-vs-additional-id-column by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 서버에 대한 string_agg 2017 사전 (0) | 2020.05.20 |
---|---|
[SQL] MySQL의에서 다음 달의 첫 번째와 마지막 날짜를 가져 오기 (0) | 2020.05.20 |
[SQL] DATETIME에 INT 변환 (SQL) (0) | 2020.05.20 |
[SQL] ERROR 1115 (42000) : 알 수없는 문자 집합 : 'utf8mb4' (0) | 2020.05.20 |
[SQL] SQL 쿼리는 열 값을 얻기 위해 다른 컬럼의 MAX 값과 일치? (0) | 2020.05.20 |