2011-01-26 4 views
1

나는 하루 동안 조금 씩 지금, 소유하고있는 친구를 위해 개발중인 앱의 데이터베이스 (MySQL)를 가장 잘 모델링하는 방법을 알아 내려고 노력했습니다. 빵집. 다음과 같이 가정은 다음과 같습니다데이터베이스 디자인 문제 - 순환 참조를 피하려고 시도합니다.

  • 많은 (외부) Bakers 많은 Products
  • BakersProducts을 생산, 스스로 하나가 자신의 제품 가격으로 빵 굽는 전화, 또는 빵 굽는 사람이 자신의 가격표를 통해 팩스 누가 어떤 직원이 격주로 업데이트됩니다되는 직원은 프런트 엔드 UI를 통해 업데이트합니다.
  • 관리자는 제품에 따라 주문을 생성 할 수 있어야합니다. 입니다.

따라서 프런트 엔드 UI는 관리자가 원하는 순서에 따라 제품을 순전히 선택할 수 있어야하며, 순서대로 각 제품을 선택할 수있는 베이커 목록을 제공해야합니다.

즉, Orders_has_Products에는 BakersProducts.bpID에 대한 참조가 포함되어야합니다. 비록 내가 이것을한다면, 나는 순환 참조 (정렬의)를 Products으로 만들 것이라고 확신한다.

enter image description here

임은 확실 나는 이것에 대해 잘못된 길을 갔어요, 정말 내가 선택한 제품 가격 acccommodate 내 디자인을 재구성 할 수있는 방법에 관해서는 누구의 조언을 부탁드립니다 - 즉. BakersProducts.bpID을 포함하십시오.

감사합니다.

+0

여기서 순환 참조가 자주 표시되지 않습니다. – ybakos

답변

2

나는 믹스 업이 비즈니스 프로세스 관점에서 생각 : 당신이 주문와 혼합 요청서을 받고 있습니다.

요청서에는 반드시 각 공급 업체를 지정하지 않고 필요한 제품 목록이 있으며 주문은 특정 가격 조회 코드 (bpID)로 특정 공급 업체를 대상으로합니다. 하나의 요청은 여러 공급 업체로 분할되는 경우 여러 주문을 생성 할 수 있으며 공급 업체 한도 또는 배달 지역으로 인해 하나의 제품 만 여러 공급 업체간에 주문을 분할 할 수 있습니다.

보기 (각 요망 광고 항목에서 생성 된 주문 광고 항목을 보여 주지만 사용자 인터페이스 관심사 임)를 제공 할 수 있습니다.

+0

고맙습니다. Jeffrey, 당신은 스포트 온입니다! 잘못 주문 * 주문 * 병합하려고했습니다. 그래서 이상적으로, 나는 "요구되는"제품을 보여주기 위해 중개자의'Requisition' 테이블을 가지고 있어야하고, 그 다음에 (그걸 기반으로) 나의'Orders' 테이블은'BakersProducts.bpID'를 참조해야합니까? – magz

+0

@magz : 'BakersProducts' 행은 실제로 PLU 또는 SKU보다 아이템 ** 가격 견적 **에 더 가깝습니다. 물론 베이커 즈와 제품 간 단순한 교차 테이블 이상입니다. 'bpID'가 대용 키인 동안 그것의 진정한 기본 키는'(bakerId, productId, bpDate)'이어야합니다.주문 ** 광고 항목 ** (주문 자체가 아님)에서 'bpID'를 참조하면 광고 항목이 기반한 가격 견적을 나타내는 좋은 방법이됩니다. 양자 택일로,'bpID'을 제거하고 당신의 주문을 참조 할 때 전체 3- 필드 합성 키를 사용하여 베이커와 제품에 빠르게 링크 할 수 있습니다. –

+0

@magz : 너는 좋아하니? Can haz Accepted Answer 체크 표시? ;-) –

1

이 문제를 해결하는 한 가지 방법은 단순히 Products 테이블을 제거하고 productName을 BakersProducts 테이블로 이동하는 것입니다.

이것은 제빵기가 고유 한 제품이라면 제빵기가 같은 제품을 나르라고 기대하지 않을 때만 작동합니다.

제빵사가 동일한 제품을 나르고 싶다면 별도의 제품 테이블을 남기고 싶을 수도 있지만 대신 Order_has_Products.Products_productID가 있어야 Order_has_Products.bpID로 변경됩니다. productName (또는 해당 테이블에 포함될 수있는 기타 제품 관련 메타 데이터)에 액세스해야하는 경우 BakersProducts와 제품 간 조인 만하면됩니다.

3

이 순환 참조 아니다 Order_has_products 참조 제품

  • Order_has_products의 참조 BakersProducts
  • BakersProducts 참조 제품
    • 때문에 순환 참조 될 예

      , 만약
      • Order_has_products 참조 제품
      • 제품 참조 BakersProducts
      • BakersProducts 참조 Order_has_products 것을 ​​제외

      가 순환 참조 데이터베이스 비교적 정상 (즉,

      하나의 제품이 Order_has_products 테이블에서 두 번 참조되기 때문에 (예 : 제품에서 직접 한 번 사용했기 때문에) 디자인에 간단한 중복성이 있습니다. 테이블 및 관련 BakersProducts 레코드를 통해 한 번. 싱크대를 없애기위한 확실성이 있지만, 비즈니스 규칙은 제품이 제빵사보다 먼저 선택된다는 것이므로, 괜찮습니다.

      쿼리가 빨라지면 약간의 비정규 화가 오래 걸릴 수 있기 때문에 productID를 포함시킬 것입니다. 그렇지 않으면 simures 질문과 같은 경우에도 BakersProducts 테이블을 스캔해야하기 때문입니다. '우리는 수요일에 베이글을 가지고 있었습니까?'

    +0

    '순환 참조'문제를 명확히하기 위해 고맙습니다. Product가 하나 이상의 경로를 Orders로 가져 가기 때문에이 시나리오가 순환 참조라고 생각했습니다. 나는 위의 제프리의 대답이 실제 주문서에서 주문 요청을 분리하는 데 도움이되지만 생각합니다. – magz

    관련 문제