2011-04-11 3 views
0

나는 3 개의 열 테이블 중 어느 것도 고유하지 않은 테이블을 가지고 있습니다. 그래서 uniqueidentifier로 테이블에 ID 열을 추가하고 기본 테이블로 만들었습니다. 그냥 하나의 Quesion : 그 열에 동일한 값을 가진 두 개의 행이 테이블에 추가되면, 두 번째 행은 어떻게됩니까? 그것이 추가 될 것인가 아닌가? 어떻게하면 내 시나리오에서 그런 일들을 피할 수 있습니까?내 식별기의 고유 식별자 철학

답변

1

ID가 아닌 세 개의 열에 고유 제한 조건이없고 기본 키의 일부가 아닌 경우 정확히 동일한 값을 가진 여러 행을 추가 할 수 있습니다.

행이 중복되지 않도록하려면 적어도 세 개 이상의 열 중 하나 이상에 대해 고유 제한 조건을 적용하는 것이 가장 좋습니다. 어떤 이유로 든 할 수 없다면 스키마를 게시하고 문제가 더 도움이 될 것이라고 생각하는 위치에 게시해야합니다.

고유 제한 조건을 사용할 수없는 경우 중복을 방지하는 한 가지 방법은 다음과 같습니다. 레코드를 삽입 할 때 먼저 레코드가 이미 있는지 확인하고 이미 존재하는 경우, 당신은 그것을 다루기를 원합니다.

+0

안타깝게도 Andy는 없습니다. 아무도 정말 독특하지 않습니다! – aaaaaaaaaaaa

+0

@aaaaaaa 그 중 3 명은 어떨까요? –

0

두 번째 것이 추가됩니다. 고유 한 제한 조건을 작성하여이를 피할 수 있습니다. 당신의 목표는 세 개의 열에서 고유성을 적용 할 경우

1

는 당신은 기본적으로 두 가지 구조의 선택의 여지가 :

Create Table tbl_1 
(
ColA int 
,ColB varchar(32) 
,ColC varchar(256) 
,Primary Key (ColA, ColB, ColC) 
) 
GO 

또는

Create Table tbl_2 
(
ID int identity(1,1) Primary Key 
,ColA int 
,ColB varchar(32) 
,ColC varchar(256) 
,Unique (ColA, ColB, ColC) 
) 
GO 

더 나은 기술 중 하나 장점이 있습니다 데이터의 성격과 데이터의 상호 작용에 달려 있습니다. 그러나 두 구조에서 주어진 열의 값은 반복 될 수 있지만 세 열의 조합은 각 행마다 고유해야합니다.

반면에 유일하거나 다를 수있는 데이터에 대해 PK를 설정하려는 경우 구조 2를 사용할 수 있지만 고유 제한 조건은 사용할 수 없습니다. 이 경우 각 행은 ID 열에 의해 고유하게 식별되지만 다른 열의 값은 자유롭게 반복 될 수 있습니다.

관련 문제