2009-12-01 7 views
16

친구로부터 들었습니다 :데이터베이스 디자인에서 사용자 이름을 기본 키로 사용하는 것이 좋지 않습니까?

어떤 고유 키를 사용 하시나요? 이 전체 사용자 이름을 저장하지 않기를 바랍니다. --- 너무 많은 테이블 공간을 사용합니다! 고유 한 userID를 각 (고유 한) userNAME에 할당하고이 사용자 ID를 (정수 할당 : auto_increment 또는 BIGINT UNSIGNED : auto_increment)이어야합니다. 에 잊지 마세요하면 사용자 ID를 사용하는 모든 테이블 에 대한 참조를

FOREIGN KEY (userID) usertable (userID) 을 참조를 만들 수 있습니다.

위의 문구는 정확합니까? 그 이유는 무엇?

답변

36

기본 키가 바뀔 수 없기 때문에 그가 맞다고 생각합니다. 그러나 username은 바뀔 수 있습니다. 따라서 변경되지 않으므로 userid을 사용해야합니다.

+2

기본 키는 변경할 수 없습니다. 또는 "기본"이 아닙니다. 키는 절대 바꿀 수 없도록 시스템에서 지정해야합니다. 다른 필드 (예 : 이름)는 고유 인덱스를 가질 수 있지만 정의에 따라 기본 키가 될 수 없습니다. –

+0

응용 프로그램이 일부 필드를 기본 키로 지정하므로 변경되지 않습니다. 응용 프로그램은 나중에 변경 될 수 있으며 원래 고유하고 변경되지 않은 것으로 정의 된 필드를 복제 또는 변경을 허용하도록 지정합니다. 여기에서 요점이됩니다. –

+1

조인 테이블에서도 마찬가지입니다. 즉, 기본 키 조합이 변경 될 수 있으므로 조인 테이블의 모든 항목에 대해 ID를 만들어야합니까? –

13

그는 잘못된 이유로 옳습니다. 테이블 공간은 나중에 앱이 사용자 이름을 변경하거나 심지어 고유 한 것을 중지하도록 요구할 수도 있다는 사실에 부수적입니다 (스택 오버플로와 같이 고유 한 사용자 이름이 필요하지 않은 응용 프로그램을 상상할 수 있으므로 앱에 주요 리팩토링이 필요합니다. 다른 (정수 PK) 경우 가벼운 변경 대신 데이터 마이그레이션이 필요합니다.

관련 문제