2013-04-16 2 views
1

이 포럼에서 비슷한 질문을 발견했지만 그 중 하나는 솔루션에 대한 내 마음을 불러 일으킬 수 있으므로 누군가가 대답을 알 수 있다고 생각했습니다.3 개의 테이블을 연결하는 외래 키

나는이 데이터베이스 시나리오를 가지고 있습니다 :

상품, 공급자 및 주문. 이것들은 테이블이며 orders_merchandises와 suppliers_merchandises라는 두 개의 테이블이 있습니다.

이 테이블은 다음과 같습니다

merchandises 
-id 
-name 

suppliers 
-id 
-name 

orders 
-id 
-supplier_id 

orders_merchandises 
-order_id 
-merchandise_id 

suppliers_merchandises 
-supplier_id 
-merchandise_id 

규칙은 다음과 같습니다

공급 업체들은 수 만의 merchandises를 제공 할 수 있습니다. 그래서 나는 supplier_merchandises 테이블을 가지고 상점에 공급하는 상품을 위해 각 공급자를 등록합니다.

따라서 주문은 공급 업체에서 "사전 기록 된"상품 만 제공하도록 공급 업체를 제한해야합니다.

내가 충분히 명확하게 설명 할 수 있기를 바랍니다.

ALTER TABLE suppliers_merchandises 
ADD FOREIGN KEY FK_NAME (supplier_id, merchandise_id) 
REFERENCES (orders.supplier_id, orders_merchandises.merchandise_id) 

하지만, unhapply이없는 작품 :

그래서, 나는 외국과 같은 여러 테이블에 대한 키가 필요합니다.

누구든지 내가하고 싶은 일을 할 수있는 방법이 있는지 알고 있습니까?

모든 dbms가 가능합니다. SQLServer에, 파이어 버드, 또는 기타

답변

1

사용 복합 키와 관계 :

  • 는에 orders_merchandises에서 FK 만들기 (order_id, supplier_id)
  • orders_merchandises에서 order에 FK를 확인 orders_merchandises
  • supplier_id 열 추가 supplier_merchandises on (supplier_id, merchandise_id)

이것은 공급자가 supplier_merchandise에서 찾은 상품 만 주문하도록 공급자의 주문을 잠급니다.

대리 키에서 합성 키로 기본 키를 변경하고 기존 경쟁 FK를 삭제할 수 있습니다.

+0

나는 이런 식으로 생각하지 않았다. 좋고 간단한 해결책! 고맙습니다. :) – jairhumberto

관련 문제