1

처음에는 영어로 유감입니다. 이 질문에 대한 답을 찾기 위해 노력했지만 실제로 자신을 표현하는 방법은 아닙니다.SQL 기본 구성 주 키

복제본 인 경우이를 닫고 답변을 알려주십시오.

고객의 장바구니 품목별로 데이터를 저장할 테이블이 있습니다. 구조는 다음

표 - tmpShoppingCartItemID은 씨앗과 정체성이다

tmpShoppingCart_ID int FK from tmpShoppingCart 
ID     int PK, Ident 1,1 
StoreSKU_ID   int FK from StoreSku 
Quantity   int 
Enabled    bit 

= 1.하지만 삽입 데이터를 시작할 때, 그것은 다음과 같습니다

tmpShoppingCart_ID  ID   .... 
1       1 
1       2 
1       3 
1       4 

까지 좋아,하지만 새로운 장바구니가되면 다음과 같이 보입니다.

tmpShoppingCart_ID  ID   .... 
2       5 
2       6 
3       7 
4       8 
여전히 1.

시드 691,363,210

는 ID 열이 나는 씨앗 카운터를 재설정 할 수있는 경우 (방법)을 알고 싶을 때 같은 tmpShoppingCart_ID 변경 : 시간에 대한

tmpShoppingCart_ID  ID   .... 
1       1 
1       2 
1       3 
1       4 
2       1 
2       2 
3       1 
3       2 
3       3 
3       4 
3       5 
4       1 

감사합니다.

답변

3

기본 키로 사용될 때 식별 열은 순차적이어야하며 테이블에서 반복되지 않아야합니다. 먼저, 중복을 방지하기 위해 temShoppingCart_ID와 ID를 고유 한 PK로 만들어야합니다. 둘째, IDENTITY 함수를 사용할 수 없으며 주어진 tempShoppingCart_ID에 삽입 된 각 행에 대해 응용 프로그램의 카운터를 사용할 수 있습니다.

제 생각에는 ID가 현재와 같은 ID 열로 유지하십시오. LineID라는 두 번째 열을 추가하고 레코드 당 증가시킵니다.

+0

ID를 유지하고 두 번째 열을 추가해야하는 이유는 무엇입니까? ID 열의 레코드 당 증가분을 사용하려고 생각했습니다. 좋은 접근 방법이 아닌가? –

+0

필요는 없지만 나중에 데이터베이스에서 사용/무결성을 위해 기본 키로 ID 열을 사용하는 것이 좋습니다. 가장 중요한 것은 tempShoppingCart_ID와 수동으로 기본 키로 증가하는 열을 결합하는 것입니다. –

2

자동 증가 필드로는이를 수행 할 수 없습니다. 그렇게하고 싶다면 작성한 프로세스를 기반으로 필드를 푸는 트리거를 작성해야합니다. 프로세스는 다중 행 삽입을 포함하고 경쟁 조건을 처리 할 수 ​​있는지 확인해야합니다. 왜 이걸하고 싶어? 고객이 장바구니 ID 순서를 바꾸도록 계획하고 있습니까? 첫 번째 ID가 1 또는 7 일 때 문제가되지 않도록 ID를 볼 필요가 없습니다.

DBCC CHECKIDENT ([Table_Name], RESEED, 0)가 기술적으로 작동하는 반면 사용자가 sys_admin 또는 db_owner 또는 db_ddladmin이어야합니다. 이 중 어떤 것도 데이터 입력을 위해 응용 프로그램에서 로그인하는 사용자에게 할당되어야하는 역할은 아닙니다.

+0

트리거가 너무 많습니다. 아마도 Chris H와 같은 기록 당 증가량은 내가 원하는 것에 대한 최선의 해결책이라고 할 수 있습니다. 어쨌든 고마워요 :) –