제품 믹스에 따라 다른 가격으로 제품을 판매하는 회사의 새로운 판매 시점을 만들고 있습니다.
모든 제품에는 기본 가격이 있습니다.
내 문제를 설명하기 위해 다음 정보를 사용합니다.
Product Category Price
A 1 45
B 1 70
Q 2 20
R 2 27
S 2 15
X 3 17
Y 3 22
Z 3 16
회사에는 패키지 "예 : 패키지"콤보 ": 제품 A 또는 B의 경우 Q 또는 R 중 하나와 X, Y 또는 Z 중 하나를 선택하면 $ 20 할인이 적용됩니다.
사례 A : 때로는 고객이 주문할 때 기본 제품에 추가하는 경우가 있습니다 (예 : 제품 A 중 하나가 아님). 제품 Q 및 제품 P를 추가하여 가격이 할인 된 패키지를 만듭니다. 그런 다음 그들은 1 R과 1 Z를 가진 제품 B 중 1 개를 원한다고 덧붙일 수 있습니다.
사례 B : 때때로 고객은 1A 및 2B, 2Q, 1S, 2X 및 1Z를 추가해야합니다. "콤보"패키지에 명시된 규칙에 따라 S는 콤보 항목이 아니기 때문에 2 개의 콤보 만 적용됩니다.
다른 프로모션은 수량에 따라 달라 지므로 B 중 2 개를 구매하면 20 % 할인 및 / 또는 시간에 따라 달라집니다. 오후 5시 이후 또는 오전 10시 이전에는 10 % 할인 전에 만 유효합니다. 다른 프로모션은 마지막 구매시기 또는 Y 기간 동안 $ X 이상 구매 한 경우에 따라 달라질 수 있습니다.
내 문제 :
1) 요구 사항이 다른 여러 종류의 프로모션을 추가 할 수있는 유연한 방식으로 다른 패키지 또는 프로모션을 만들도록 테이블을 어떻게 구성합니까?
2) 사례 B (또는 사례 A와 사례 B의 혼합)와 같이 주문할 때 주문에 어떤 제품 믹스가 있는지 테스트하고 그에 따라 가격 / 설명을 업데이트 할 수 있도록 쿼리를 구성하는 방법 ? 궁극적으로이 쿼리에 대한 최상의 결과는 고객에게 가장 큰 혜택을 제공하는 순서로 충족 된 패키지 및 프로모션을 반환합니다 (예 : 주문한 프로모션은 프로모션 1 및 3의 요구 사항을 충족하지만 프로모션 3은 비용이 덜 듭니다). 여러 프로모션과 함께 작동해야합니다).
도움을 주셔서 감사합니다.
업데이트 # 1
당면한 문제를 더 잘 설명하고 해결하기 위해 지금까지 수행 한 작업을 업데이트하기 위해 문제에 영향을 미치는 엔티티 및 속성으로 제한된 제품 모델의 ERD를 포함하고 있습니다 (즉, 재고가없는 상태이므로 재고가 없습니다) 엔티티가 존재 함).
또한이 질문에 영향을 미치는 엔티티 및 속성의 샘플 데이터를 포함합니다 (데이터 읽기를 단순화하기 위해 외래 키 대신 이름 / 설명을 넣습니다).
다음은 테이블 구조를 이해하는 빠르고 시각적 인 방법 인 콤보의 예를 제공하는 순서도 링크입니다.
PRODUCT
---------
ID Name
================================
1 Hamburger
2 Cheeseburger
3 Bacon Hamburger
4 Bacon Cheeseburger
5 Orange Juice
6 Apple Juice
7 Coffee
8 Coke
9 French Fries
10 Onion Rings
11 Soup du Jour
12 Hamburger Combo
13 CheeseBurger Combo
14 Bacon Hamburger Combo
15 Bacon Cheeseburger Combo
16 Combo Side
17 Combo Beverage
18 Small Orange Juice
19 Large Orange Juice
20 Small Apple Juice
21 Large Apple Juice
22 Add Extra Patty
23 Add Avocado
PRODUCT COMPONENT
------------------
productFrom productTo
===================================================
Hamburger Combo Hamburger
Hamburger Combo Combo Side
Hamburger Combo Combo Beverage
CheeseBurger Combo Cheeseburger
CheeseBurger Combo Combo Side
CheeseBurger Combo Combo Beverage
Bacon Hamburger Combo Bacon Hamburger
Bacon Hamburger Combo Combo Side
Bacon Hamburger Combo Combo Beverage
Bacon Cheeseburger Combo Bacon Cheeseburger
Bacon Cheeseburger Combo Combo Side
Bacon Cheeseburger Combo Combo Beverage
PRODUCT FEATURE
----------------
ID Description
=======================
1 Combo Side Option
2 Combo Beverage
3 Juice
4 Orange Juice Size
5 Apple Juice Size
6 Extras
PRODUCT FEATURE APPLICABILITY
------------------------------
product productFeature ProductFeatureApplicabilityType
============================================================================
Hamburger Combo Combo Side Required
Hamburger Combo Juice Flavor Required
Cheeseburger Combo Combo Side Required
Cheeseburger Combo Juice Flavor Required
Bacon Hamburger Combo Combo Side Required
Bacon Hamburger Combo Juice Flavor Required
Bacon Cheeseburger Combo Combo Side Required
Bacon Cheeseburger Combo Juice Flavor Required
PRODUCT FEATURE APPLICABILITY
------------------------------
productFeature product ProductFeatureApplicabilityType
============================================================================
Combo Side Hamburger Combo Required
Combo Beverage Hamburger Combo Required
Extras Hamburger Combo Optional
Combo Side Cheeseburger Combo Required
Combo Beverage Cheeseburger Combo Required
Extras Cheeseburger Combo Optional
Combo Side Bacon Hamburger Combo Required
Combo Beverage Bacon Hamburger Combo Required
Extras Bacon Hamburger Combo Optional
Combo Side Bacon Cheeseburger Combo Required
Combo Beverage Bacon Cheeseburger Combo Required
Extras Bacon Cheeseburger Combo Optional
OPTIONAL FEATURE
------------------
productFeatureFrom Product ProductFeatureTo
=============================================================
Combo Side Option French Fries
Combo Side Option Onion Rings
Combo Side Option Soup du Jour
Combo Beverage Juice
Combo Beverage Coffee
Juice Orange Juice Size
Juice Apple Juice Size
Orange Juice Size Orange Apple Juice
Orange Juice Size Orange Apple Juice
Apple Juice Size Small Apple Juice
Apple Juice Size Large Apple Juice
Extras Add Extra Patty
Extras Add Avocado
알기 전까지는 커뮤니티에서 제공하는 연구와 지원을 통해 문제 # 1을 해결할 수있었습니다. 사실, 나는 시스템의 첫 번째 배포에서 생각했던 것보다 더 많은 유연성으로 그렇게했습니다.
문제 2에 대한 진보가 있었지만 만족스럽게 해결되지는 않았습니다. 이 작업을 수행하는 방법에 대한 아이디어가 있었지만 Neil McGuilgan은 Relational Division (dba.stackexchange.com/questions/45829/what-is-the-name-name-of-this-type- of-query-and-what-is-an-efcient-example) 및이 책 (www.amazon.com/books/dp/0471380237)이 많은 도움이되었습니다. 그러나 현재이 솔루션은 이해하지만 한 번에 "하나의"레코드 (콤보)로만 작동합니다. 고객이 걸어서 치즈 버거 2 개, 햄버거 1 개, 작은 사과 주스 1 개, 콜라 1 개, 감자 튀김 1 개, 양파 링 2 개를 원한다고 말하면 믹스에 콤보가 하나만 있는지 확인하고 다른 하나를 추가하는 방법이 필요합니다 기본 가격에 제품. 콤보 조합이 여러 개인 경우
문제 2를 해결하기 위해 생각해 낸 아이디어 중 하나는 콤보의 주요 제품 (예 : 햄버거)을 표시하는 PRODUCT COMPONENT를 추가하고 속성을 지정하는 것입니다. 그런 다음 가격 책정 프로세스를 실행할 때 PRICE COMPONENT 테이블에서 제공하는 할인과 해당 값으로 주문 (내림차순) 및 패키지 순서대로 "패키지"의 주 제품인 주문의 제품을 조회하십시오. 쿼리를 사용하여 나머지 비 주요 제품으로 "패키지"를 작성하고 더 이상 주 제품이 없거나 나머지에 주 제품이 더 이상 없을 때까지 프로세스를 반복 할 수 있는지 확인하십시오.