짧은 대답은, 아니오 - 할 수 없습니다. PK (또는 다른 대체 키)의 모든 열은 FK 정의에 나타나야합니다. 또한 테이블에는 후보 키 (때로는 대체 키)라고하는 여러 개의 키가있을 수 있습니다. 기본 키는 단순히 설계/사용에 가장 적합한 키입니다 (보통 가장 좁은 바이트 - 가장 작은 바이트 크기). 이 다른 고유 색인의 이름 앞에 "AK_ {name}"- AK = Alternate Key를 붙입니다. 따라서이 "키"를 가진 -
- 는 "아이덴티티"열되는 합성 PK를 정의하고 복합 키에 고유 인덱스를 추가 : 우리는이 상황에서 무엇을
두 가지 중 하나입니다 책상 위에. 그런 다음 모든 하위 테이블은 FK를 합성 ID PK 열을 가리키는 것으로 정의합니다.
- 복합 키는있는 그대로 두십시오. 해당 마스터 테이블에 PK로 정의하고 모든 FK가 동일한 정의를 갖도록하십시오.
일반적으로 동일한 PK 정의 (즉, 다른 테이블의 FK 인 PK)가있는 여러 테이블을 갖는 것은 좋지 않습니다. 나는 "일반적으로"말합니다 - 당신의 실체의 정의를 이해하는 것이 중요합니다.
# 1을 사용하는 이유는 무엇입니까? 제가 질문하는 질문은 복합 키가 실제로 행을 정의하는 데이터인지 여부입니다. 이 복합 키는 실제로 행의 정의입니까 아니면 일부 다른 데이터에 대한 FK입니까? 그것이 FK 이상인 경우 합성 된 PK (Identity)를 만듭니다. 주문은 실제로 클라이언트가 소유하고있는 책입니까? 주문하면 클라이언트가 새 책을 소유하게 될 수도 있지만 같은 내용이 아닐 수도 있습니다.
합성 된 PK를 사용하면 향후 몇 년 동안 더 많은 선택을 할 수 있습니다. Client_Books 테이블에서 관계를 변경해야하는 경우 다른 테이블의 변경 사항을 차단할 수 있습니다.
예를 들어 고객이 둘 이상의 책을 소유 할 수 있다면 어떻게 구현할 수 있습니까? 합성 키로 복합 키의 고유 색인을 제거하고 간단한 FK로 남겨두면 Order_Details 테이블은 고객이 두 번째 사본을 구매했을 때를 간단히 나타냅니다.그러나 주문 경로에서 복합 키를 가져온 경우 Order_Detail 및 Client_Books (및 Order_Detail을 가리키는 다른 FK)를 재정의하는 방법을 알아 내야합니다.
Order_Detail이 실제로 Client_Book인지 여부를 평가 해 줄 것을 요청합니다. 일반적으로 주문은 클라이언트가 새로운 책을 소유하게합니다. Orders를 인벤토리와 독립적으로 생각합니다. 따라서 Order_Detail의 PK는 Client_Books의 PK가 아니어야합니다. Order_Detail은 자체 PK가 있어야합니다.
'ORDER_DETAIL' 테이블에 대한 추가 정보를 제공하십시오 - 복합 기본 키가 필요한 이유는 무엇입니까? –
답장을 보내 주셔서 감사합니다. Order_Details 테이블에 Clients_Books 테이블의 항목이 있어야하므로 복합 기본 키가 필요합니다. 예 : clients_Books 항목 : Product_ID : 1 Clint_ID : 1 은 Order_Details 테이블 항목 일 수 있습니다. Order_ID : 1, Product_ID : 1, Client_ID : 5 유효한 Product_ID 및 Books를 고려한 유효한 Client_ID와 같은항목이 있지만 Clietns 테이블은 Clients_Books 테이블의 실제 항목이 아닐 수 있습니다. 희망이 있습니다 .. – Nikos