복붙노트

[SQL] 추가 "ID"열 대 복합 기본 키?

SQL

추가 "ID"열 대 복합 기본 키?

우리는이 같은 테이블을 가지고 있다면 :

책은 (척 "ISBN"존재하지 않음)

하나는 후보 / 기본 키가 될 수있는 {저자, 제목, 판}을 주장 할 수 있습니다.

어떤 후보 / 기본 키가 {저자, 제목, 판} 또는 ID 열이 {저자, 제목, 판} 고유 인덱스 / 키 제한 조건으로 사용할지 여부를 수 있는지 여부를 결정한다?

그래서입니다

더 나은, 또는 :

여기서 {저자, 제목, 에디션} 추가 고유 인덱스 / 제약 조건은?

해결법

  1. ==============================

    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. ==============================

    2.일반적으로, 변경 값에 기본 키를 원하지 않는다. 맹인 또는 대리 기본 키를 사용하는 이유입니다.

    일반적으로, 변경 값에 기본 키를 원하지 않는다. 맹인 또는 대리 기본 키를 사용하는 이유입니다.

    의 당신이 기본 키의 일부로서 저자와 책 테이블을 만들어 가정하자.

    당신은 당신이 "레이 브래드 베리를"맞춤법이 틀린 것을 년 정도 후에 발견하자. 또는 더 나쁜, 당신은 "레이첼 블룸"맞춤법이 틀린. 그냥 당신이 오자를 수정하기 수정해야 얼마나 많은 데이터베이스 행을 상상한다. 그냥 많은 인덱스 참조가 변경 될 어떻게 상상.

    당신이 대리 키 작성자 테이블이있는 경우 그러나, 당신은 단지 올바른 행에 있습니다. 어떤 인덱스는 변경 될 필요가 없습니다.

    마지막으로, 데이터베이스 테이블 이름은 보통이 아니라 복수 (책)보다 (책) 단수.

  3. ==============================

    3.고유성 제약 미래 (예를 들어, ISBN 책이 고유하게 추가해야합니다)에서 변경해야하는 경우 대리 기본 키 시나리오를 사용하는 또 다른 좋은 이유입니다. 데이터를 재생성 훨씬 쉬울 것이다.

    고유성 제약 미래 (예를 들어, ISBN 책이 고유하게 추가해야합니다)에서 변경해야하는 경우 대리 기본 키 시나리오를 사용하는 또 다른 좋은 이유입니다. 데이터를 재생성 훨씬 쉬울 것이다.

  4. ==============================

    4.이에 관한 많은 기사가있다. 귀하의 경우 복합 키의 문제점 :

    이에 관한 많은 기사가있다. 귀하의 경우 복합 키의 문제점 :

    당신의 데이터를 정상화 (dasblinkenlight) 제안과 같은 저자에 그냥 ID를 저장하는 것이 좋은 것입니다. 최악의 시나리오, 그 / 그녀는 (예를 들어, 그녀의 결혼을 얻고, 그녀는 그녀의 새 이름을 좋아한다) 그 / 그녀의 이름을 변경합니다.

  5. from https://stackoverflow.com/questions/14588304/composite-primary-key-vs-additional-id-column by cc-by-sa and MIT license