2010-02-09 2 views
1

는 내가 뭘 원하는이 같은 테이블 구조를 가지고있다계산 열은 하위 집합을 증가하는 방법을

TypeId ItemId Data 
1  1  "some data" 
1  2  "some data" 
2  1  "some data" 
3  1  "some data" 
3  2  "some data" 

키를 열로 계산 한 경우 ID 열과 반대되는 동시성에 문제가 있습니까?

+0

이 계산 된 열에 대한 수식은 무엇입니까? – Ray

답변

2

ItemId 열은 ROW_NUMBER OVER(PARTITION BY TypeID) (the docs 참조)의 결과 인 것 같습니다. 계산 방법은 무엇입니까? 이와 같이 동시성 문제로 인해 키의 일부로는 적합하지 않습니다 (두 개의 트랜잭션이 동일한 TypeID 행을 삽입 함). 그러나 그것이 "어떻게 부분 집합을 늘리는가"와 관련이 있습니까? 무엇의 하위 집합? 그리고 네 질문은 뭐니? 대체로 뭔가 다른 것을 키로 만들지 않는 것이 좋습니다 (일반적으로 인공 자동 증가 열).

+0

위의 예제는 다소 고안되었습니다. 현재 ID 열을 사용하고 있습니다 (위에 계산 된 "ItemId"를 사용하지 않습니다). 그러나 사용자가 "의미있는"키를 표시해야한다는 요구 사항이 있습니다 (ID 열이 적절하지 않습니다.). 필자가 주제에서 읽은 바로는 각 고유 TypeID에 대해 ItemId를 단순히 늘릴 수는 없지만 기본 키의 일부로 사용했습니다.하지만 교활한 방법이 있는지 확인하고 싶었습니다. –

+0

@ Grayson, 왜 "표시하기에 적합합니까?"열 집합은 _key_가되어야합니까? 만약 디스플레이가 트랜잭션 중간에 일어나지 않는다면 (다른 이유들 때문에 엉망이 될 수도 있습니다!), 문제의 컬럼 쌍은 유일 할 것입니다. (당신이 'ItemId'를 내 방식으로 생성하든, 아니면 다른 방법 ;-). –

+0

당신 말이 맞아요, 그렇지 않아요. 나는 네가 제안한대로 할 것이다. 제안 할 때 키를 설정하는 "합리적인"방법이 있다면 (데이터베이스의 컨텍스트에서) 간단하게 (테이블 제거) 할 수 있습니다. 그러나 그것은 큰 문제가 아닙니다 ... 나는 단지 내가 "최고의"옵션을 갖고 있는지 확인하고 싶습니다. –

2

계산 된 열이 아닌 네이티브 분석 기능 (ROW_NUMBER, RANK, DENSE_RANK)으로 계산 된 열을 재현 할 수 있다는 점에 Alex와 동의합니다. CLR을 사용하거나 트리거를 사용하여 채우기가 더 쉬울 것 같습니다. 원하는 방식으로 itemid 열을 입력하십시오.

itemid 열을 ID 열로 사용하는 것이 좋습니다. 원하는 데이터 모델링을 제공하지 않고 사용자에게 & 참조를 표시하는 데 사용할 수있는 가상 키 (자연 키 & 인공 키와 섞이지 않아야 함)와 같은 소리가 원하는 것입니다. 귀하의 상황에 대한 접근 방식에 대해 여전히 마음에 들지 않는 것은 고유 한 행/레코드 (형식 ID 대리 키)를 얻기 위해 두 개의 데이터 조각이 필요하다는 것입니다.

관련 문제