0

:다음과 같은 시나리오가

테이블 주문
PK -

표 OrderPosition
PK를 ORDERID -
PK ORDERID - OrderPosition

OrderID는 테이블 주문의 기본 키입니다. OrderID 및 OrderPosition은 OrderPosition 테이블의 구성된 기본 키입니다.

항목이 OrderPosition 인 경우 사용 된 OrderID는 테이블 Orders에 있어야하며 OrderPosition 테이블의 OrderID와 OrderPosition의 조합은 고유해야합니다.

SQL Server 2012를 사용하고 외래 키 제약 조건을 추가하려고했지만 열 수가 다르므로이 방법은 작동하지 않습니다. 그렇다면이 시나리오를 모델링하는 올바른 방법은 무엇입니까?

답변

0

오더

PK - OrderID를 IDENTITY (1,1)

표 OrderPosition

PK - OrderPos_ID IDENTITY (1,1)
OrderID를
OrderPosition

+ UNIQUE CONSTRAINT (OrderID, OrderPosition)

를 필요한 경우 + FOREIGN KEY CONSTRAINT (OrderID) REFERENCES Orders(OrderID)

CREATE TABLE #o (o_id INT IDENTITY(1,1) PRIMARY KEY) 

CREATE TABLE #op (o_id INT, pos_no INT, PRIMARY KEY(o_id, pos_no)) 

ALTER TABLE #op ADD CONSTRAINT FK_1 FOREIGN KEY (o_id) REFERENCES #o(o_id) 
GO 
SELECT * FROM #o o INNER JOIN #op op ON op.o_id = o.o_id 
GO 
+0

난 정말 그냥이 제약 조건을 모델링하는 새로운 콜 럼을 추가해야합니까 UPD? 다른 방법이 없습니까? – DumpKid

+0

데이터 모델을 표준화하면 이러한 문제가 발생하지 않습니다. 또한 구글 "클러스터 인덱스 키의 여러 열". –

+0

왜이 모델이 위반하는 이유와 형식이 정상인지 이해해 주시겠습니까? 나에게 구성된 기본 키가있는 3NF처럼 보입니다. 내 이해에서 기본 키는 식별 열일 필요는 없습니다. 이 문제를 방지하기 위해 모델을 어떻게 설계해야합니까? – DumpKid