2010-02-22 3 views
0

복합 키를 다른 테이블의 기본 키로 설정할 수 있습니까? Client_ID 복합 키를 다른 테이블의 기본 키로 설정할 수 있습니까?

  • Clients_Books 가진 - 화합물 기본 키 : Product_IdClient_ID
  • 기본 키를 가진 - Product_ID
  • Client : 기본 키를 가진 -

    • Books : 예컨대

      나 테이블을

      이 화합물을 기본 키로 설정하고 싶습니다. m Clients_Books를 Order_Details라는 이름의 다른 테이블에 대한 기본 키로 사용합니다. 그러나 Books, Clients 테이블에서 Product_ID 및 Client_ID를 사용하고 싶지 않습니다.

      의미가 있습니까? 모든 의견을 환영합니다.

  • +0

    'ORDER_DETAIL' 테이블에 대한 추가 정보를 제공하십시오 - 복합 기본 키가 필요한 이유는 무엇입니까? –

    +0

    답장을 보내 주셔서 감사합니다. 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

    답변

    1

    짧은 대답은, 아니오 - 할 수 없습니다. PK (또는 다른 대체 키)의 모든 열은 FK 정의에 나타나야합니다. 또한 테이블에는 후보 키 (때로는 대체 키)라고하는 여러 개의 키가있을 수 있습니다. 기본 키는 단순히 설계/사용에 가장 적합한 키입니다 (보통 가장 좁은 바이트 - 가장 작은 바이트 크기). 이 다른 고유 색인의 이름 앞에 "AK_ {name}"- AK = Alternate Key를 붙입니다. 따라서이 "키"를 가진 -

    1. 는 "아이덴티티"열되는 합성 PK를 정의하고 복합 키에 고유 인덱스를 추가 : 우리는이 상황에서 무엇을

      두 가지 중 하나입니다 책상 위에. 그런 다음 모든 하위 테이블은 FK를 합성 ID PK 열을 가리키는 것으로 정의합니다.

    2. 복합 키는있는 그대로 두십시오. 해당 마스터 테이블에 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가 있어야합니다.

    +0

    +1 글쎄요. 아마도 내가 지금까지 본 질문에 대한 가장 완벽한 답변 중 하나 일 것입니다. – Kenaniah

    1

    어둡고 더러운 길을 걷고 있습니다. 이러지 마. 베스트 프랙티스에 충실하라 - 테이블에 간단한 프라이 머리 키를 사용하고, 필요하다면 다른 테이블에 외래 키를 가져라.