이 질문은 양측에 많은 감정을 불러 일으키는 매우 논쟁적인 질문입니다.
ISBN처럼 사용 가능한 유용한 자연 키가 있다면 겸허히 생각합니다. 사용합니다. 어쨌든 데이터베이스에 저장하겠습니다. 예, 자연 키는 일반적으로 정수 자동 증가 키보다 큽니다. 그러나이 문제는 과장되었습니다. 디스크 공간은 현재 저렴합니다. 처리하는 데 시간이 오래 걸리는 것에 대해 더 걱정할 것입니다. 80 바이트 텍스트 필드를 기본 키로 말하면 안된다고 말하고 싶습니다. 그러나 8 바이트 정수 대신 10 바이트 ISBN을 사용하려는 경우 성능이 저하 될 수 있다고 생각하지 않습니다.
때때로 자연 키에는 성능 이점이 있습니다. 예를 들어, 주어진 책의 사본 몇 개가 팔리고 있는지를 알고 싶다고 가정 해 봅시다. 도서 마스터 레코드의 데이터는 신경 쓰지 않습니다. 기본 키가 ISBN 인 경우, "isbn = '143573338X'"와 같이 "select count (*) from sale"이라고 쓸 수 있습니다. 자동 증가 키를 사용하면 isbn을 조회하기 위해 조인을해야하며 쿼리는 "bookcount를 사용하여 책 조인 판매에서 셀 수 (*)를 isbn = '143573338X'와 같이 더 복잡하고 느리게됩니다. ". (그리고 나는이 특별한 ISBN이 나의 책을 위해 판매 기록의 수가 아주 적기 때문에 참여하고 1 개의 여분의 레코드를 읽는 것이 큰 퍼센트 차이입니다!)
자연의 또 다른 이점 키를 사용하면 데이터베이스에서 작업해야하고이 테이블을 키로 다시 참조하는 레코드를 볼 때 참조하는 레코드를 쉽게 볼 수 있습니다.
한편, 선명하고 자연스러운 키가 없다면 미친 듯이 자갈을 넣지 마십시오. 나는 사람들이 처음으로 고객 이름, 출생 연도 및 우편 번호의 처음 6 글자를 연결하여 고유 한 키를 만들려고 노력한 것을 보았습니다. 그런 다음 고유 한 것으로기도합니다. 그 종류의 어리 석음은 너 자신을 위해 다만 말썽을 만들고있다. 사람들은 종종 고유 번호를 보장하기 위해 일련 번호를 사용하기 시작합니다. 그 시점에서 왜 귀찮은가요? 왜 그 자체로 시퀀스 번호를 키로 사용하지 않는가?
출처
2010-02-02 18:04:19
Jay
+1 나는 사람들이 이것에 대해 무엇을 말하는지에 관심이있다. –
이 질문은, 다양한 형태로, 다소 다년생하다 ... http://stackoverflow.com/questions/532363/native-primary-key-or - 자동 생성 - 예를 들어. – mjv
이것은 실제로 대답 할만한 가치가 없지만 여기에 제 의견이 있습니다. 같은 ISBN을 가진 두 권의 책이나 같은 SSN을 사용하는 두 명의 책을 절대 갖고 싶지 않다면, 그 값들을 기본 키로 사용하는 것을 망설이지는 않을 것입니다. . 그러나 그것은 내가 생각하는 습관 일뿐입니다. Django의 모델과 같은 일부 ORM 시스템에서는이 작업을 수행하기가 매우 어려우며 항상 숫자 증분 ID가 있어야한다고 주장합니다. 한편, PostgreSQL을 사용하는 경우 * 이중 기본 키 *와 같은 작업을 수행 할 수도 있습니다. 내가 할 수있을 때마다 나는 그것을 사용하고 싶다. –