2012-04-14 5 views
1

테이블의 기본 키를 생성 할 때 가장 좋은 방법은 무엇입니까?기본 키 생성을위한 접근 방식

즉, 데이터베이스에서받은 데이터가 주입식이 아니므로 기본 키로 사용할 수 없습니다.

코드에서 테이블 행에 대한 기본 키를 관리하는 가장 좋은 방법은 무엇입니까?

감사합니다. MySQL의에서

+0

실례 합니다만 '주사제'를 이해하지 못합니다. 무슨 소리 야? – Steve

+0

'주사 기능은 뚜렷 함을 보존하는 기능입니다 .' – nothrow

답변

2

첫 번째 추천은 기본 키 멀리 고유 식별자에서있어. 클라이언트 쪽을 생성하는 재미있는 쉬운 방법이 있지만 기본 키에 유용 할 수도있는 모든 idexes를 갖는 것은 거의 불가능합니다. 만약 내가 시간을 거슬러 가서 사용 된 장소의 99 %에서 uniqueidentifiers를 금지한다면 지난 2 년간 dba/개발 시간이 3 년 이상 절약되었을 것입니다.

INT IDENTITY를 기본 키로 사용하는 것이 좋습니다.

create table YourTableName(
    pkID int not null identity primary key, 
    ... the rest of the columns declared next. 
) 

여기서 pkID는 기본 키 열의 이름입니다.

귀하가 찾고자하는 것을해야합니다.

+0

흥미 롭습니다. 추천서를 연장하고 uniqueidentifier가있는 귀하의 exiperiences가 왜 그렇게 나쁜지 설명해 주실 수 있습니까? 유용한 인덱스가없는 이유는 무엇입니까? 유형 크기 및 색인 크기 때문입니까? – huhu78

+0

인덱스에 uniqueidentifier가 있으면 자연 정렬 순서가 없기 때문에 매우 비효율적입니다. 인덱스의 b-tree 구조를 기반으로 uniqueidentifier를 사용할 때 극도로 조각난 인덱스가 생성됩니다. 재건 또는 재편성 후에도 여전히 극단적으로 단편화되어 있습니다. 결국 느린 인덱스로 끝나게되고 결국 조각화로 인해 메모리와 디스크에서 엄청나게 커지게됩니다. 또한 uniqueidentifier의 삽입시 색인에서 페이지 분할로 끝나서 삽입 속도가 느려질 수 있습니다. 일반적으로 고유 식별자는 색인에 나쁜 소식입니다. –

+0

좋은 지적. 나는 기억할 것이다. 나는 compromision이 기본 키로 uniqueidentifier를 가지고 uniqueidentifier 열 앞에 데이터 열을 정렬하지 않고 CLUSTERED 인덱스를 작성하는 것일 수 있다고 생각합니다. 그런 다음 테이블/페이지에서 "물리적"이며 유용한 데이터 순서를가집니다. – huhu78

2

AUTO_INCREMENT, SQL Server의 IDENTITY .. SQL Server의

1

IDENTITY

당신은 얻을 필요가있는 경우 INSERT 데이터를 -ing하면서, 새로운 ID가 무엇인지 INSERT 문의 OUTPUT 절을 사용 - 새로운 행의 복사본은 테이블 형식의 param에 저장됩니다.

SQL에서 고유 ID를 생성하는 것이 적합하지 않은 경우 응용 프로그램에서 GUID를 생성하십시오. GUID는 매우 높은 수준의 단일성을 갖지만 실제로 보장 할 수는 없습니다. 그리고 SQL Server는 열에 GUID 유형을 지정했습니다. 이것은 uniqueidentifier입니다.

http://msdn.microsoft.com/en-us/library/ms187942.aspx