2010-03-25 4 views
1

나는 특정 사이트의 웹 스크래핑을 수행하고 그 결과를 데이터베이스에 저장하려고 노력 해왔다. 데이터에 대한 원래의 가정은 상당히 합리적인 복합 기본 키 (대개 2 ~ 3 개 필드 만 포함)를 사용할 수있는 스키마를 허용했지만 시간이 지남에 따라 데이터에 대한 원래의 가정이 잘못되어 기본 키가 잘못되었음을 깨달았습니다. 내가 생각하기에 독특했던만큼, 점점 더 많은 분야를 포함하도록 천천히 확장 해왔다. 사실, 나는 최근에 그들의 데이터베이스에 아무런 제약이 없다고 믿게되었다.거대한 합성 기본 키 또는 고유 ID를 사용해야합니까?

오늘은 마침내 내 테이블 중 하나에 대한 기본 키를 확장하여 해당 테이블의 모든 필드를 포함 시켰습니다. 이제 나는 물어볼 좋은 시간이라고 생각했습니다. 자동 증가 열을 추가하는 것이 더 낫습니다. 유일한 ID이거나 전체 테이블에 복합 기본 키를 남겨 두는 것입니까?

+0

그냥 guid (SQL Server의 uniqueidentifier 형식)를 사용하십시오. –

+1

@David : ** ** ** SQL Server에서 GUID를 사용하지 마십시오. 악마 님의 것입니다. ** 정말 정말 ** 클러스터 된 키 성능에 좋지 않습니다. PK는 기본적으로 CK입니다. Kim Tripp의 글을 읽으십시오 : http://www.sqlskills.com/BLOGS/KIMBERLY/post/GUIDs-as-PRIMARY-KEYs-andor-the-clustering-key.aspx –

+1

@marc_s GUID가 가장 좋은 많은 경우가 있습니다 접근. 우리가 기사를 인용하기 때문에, http://www.sql-server-performance.com/articles/per/guid_performance_p1.aspx NEWID() 대신 NEWSEQUENTIALID()를 사용하면 색인 작성에 도움이됩니다. http://www.fotia.co.uk/fotia/DY.19.NewSequentialId.aspx –

답변

2

복합 키를 사용하는 유일한 경우는 연결 관계가 많은 관계를위한 두 개의 정수 필드로 구성됩니다. 서로 게이트 키를 사용하고 복합 키에 넣었을 필드에 고유 인덱스를 넣습니다. 이렇게하면 자식 테이블에 공간을 절약하고 정수 결합의 속도를 향상시킬 수 있습니다. 실제로 복제를 사용하지 않는 한 GUID를 사용하지 않고 자연 키의 고유성을 보존합니다.

4

모든 필드를 기본 키로 사용하는 것보다 하나의 기본 키를 사용하는 것이 좋습니다.

먼저 도구를 사용하면 도구를 쉽게 인식 할 수 있습니다. 나는 여섯 가지 정도의 다른 이유가있을 것이라고 확신하지만, 이것은 나에게 아무렇지 않은 것처럼 보입니다.

+2

+1 : 복합 키를 사용하지 마십시오. 그들이 일으키는만큼 많은 문제를 해결하지 못하는 것 같습니다. –

+0

아니요, 기본 키는 하나만 가질 수 있지만 기본 키는 단일 열 또는 여러 열일 수 있습니다. – David

3

대리 키는 항상 사용하기 쉽습니다.

다시 한 번, Entity Framework를 많이 사용하여 내 의견이 흐려질 수 있습니다.

1

@Jack - 기본 키를 만들기 위해 너무 많은 합성물을 추가하거나 모든 열이 고유 한 행을 찾는다는 것을 알지 못하거나 모르는 경우 데이터베이스 작성 방법에 대해 충분히 알지 못합니다. 나는 여러분에게 해결책이되기 위해 증가하는 자동 pk를 추가하는 것에 동의 할 것입니다.

0

큰 합성 키의 고유성과 합성 키의 편리 성을 모두 얻는 한 가지 방법은 모든 필드 값의 보안 해시를 사용하는 것입니다. 개인적으로 나는 SHA1 모든 필드의 내용을 누른 다음 BASE64 또는 16 진수로 인코딩하고 그것을 내 열쇠로 사용합니다. 처리 할 단일 열을 가질 수있는 이점과 모든 필드를 해싱하고 기본 키에서 간단한 SELECT를 수행하여 이미 존재하는지 확인하여 데이터가 이미 데이터베이스에 있는지 여부를 알 수있는 기능을 얻을 수 있습니다.

관련 문제