제품 가격 책정을위한 데이터베이스 스키마 (패키지, 프로모션, 수량 기반, 제한된 시간 제공…)


11

제품 믹스에 따라 다른 가격으로 제품을 판매하는 회사의 새로운 판매 시점을 만들고 있습니다.

모든 제품에는 기본 가격이 있습니다.

내 문제를 설명하기 위해 다음 정보를 사용합니다.

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 테이블에서 제공하는 할인과 해당 값으로 주문 (내림차순) 및 패키지 순서대로 "패키지"의 주 제품인 주문의 제품을 조회하십시오. 쿼리를 사용하여 나머지 비 주요 제품으로 "패키지"를 작성하고 더 이상 주 제품이 없거나 나머지에 주 제품이 더 이상 없을 때까지 프로세스를 반복 할 수 있는지 확인하십시오.


지금까지 무엇을 했습니까? 응급실 다이어그램을 보여주세요.
Tulains Córdova

@ user61852 대부분의 ERD를 손으로합니다. 공유 할 수 있도록 컴퓨터에서 도구를 추천 할 수 있습니까? (희망적으로 무료 :)
cml

@ user61852 gliffy.com이 다소 유용하다는 것을 알았습니다. 질문을 업데이트하기 위해 작업 한 내용을 정리하려고 노력하고 있습니다.
cml

@ user61852 ERD, 플로 차트, 진행률 및 샘플 테이블 데이터를 표시하기 위해 업데이트 # 1을 추가했습니다.
cml

답변:


2

이것은 복잡해질 수 있습니다 ...

1) 요구 사항이 다른 여러 종류의 프로모션을 추가 할 수있는 유연한 방식으로 다른 패키지 또는 프로모션을 만들도록 테이블을 어떻게 구성합니까?

packaged_with테이블로 시작하여 그룹화 및 패키지 할 수있는 제품을 판별 할 수 있습니다.

꾸러미
-------
  아이디 (PK)
  이름

package_group
-------------
  package_id (FK에서 package.id로)
  이름

packaged_with
-------------
  package_group_id (FK에서 package_group.id로)
  product_id (FK에서 product.id로)
  can_be_packaged_with (FK에서 product.id로)

package_group를 나타냅니다 package. packaged_with을 의미 products하고 package_groups, 그 때문에 행에 packaged_with도시 된 제품은 제품으로 패키징 될 수 있고, 패키지는 다수의 그룹으로 구성 될 수있다.

데이터는 다음과 같습니다.

꾸러미
-------
아이디 | 이름
------------
1 | 콤보

package_group
------------
아이디 | 이름
---------
1 | QR 그룹
2 | XYZ 그룹

packaged_with
-------------
package_group_id | product_id | can_be_packaged_with
----------------------------------------------
1 | A | 큐
1 | A | 아르 자형
2 | A | 엑스
2 | A | 와이
2 | A | 지
1 | B | 큐
1 | B | 아르 자형
2 | B | 엑스
2 | B | 와이
2 | B | 지

제품 패키지 자체에 도움이됩니다. 나머지 질문에 대한 아이디어가 있지만 지금은이 답변을 마칠 시간이 없습니다 ...


프로모션

여러 종류의 프로모션을 나열합니다. 당신은 규칙 엔진의 일종으로 볼 수도 있습니다,하지만 난 그것보다 더 간단하게 유지하려고합니다,하지만 여전히 ...이 됩니다 복잡 ..

가격이 특정 비율로 할인되는 간단한 프로모션으로 시작해 보겠습니다.

percent_discount
----------------
  아이디 (PK)
  이름
  percent_amount

product_promotions
------------------
  아이디 (PK)
  product_id (FK에서 product.id로)
  promotion_id (FK에서 percent_discount.id로)
  시작일
  종료일

여기 우리는 당신이 제품에 대해 몇 퍼센트를 내려 놓았는지 저장하는 표를 가지고 있습니다. 다른 테이블은 실제로 제품을 할인율에 연결하며 시작 날짜와 종료 날짜도 포함하므로 특정 날짜에 할인이 적용되는지 알 수 있습니다.

나중에 다른 프로모션에 대한 아이디어 ...


나는 당신이 그것을 쓸 시간이있을 때 당신의 나머지 답변을 읽기를 기대합니다. 당신의 도움을 주셔서 감사합니다.
cml

나는 확실히 "규칙 엔진"을 살펴볼 것입니다! 좋은 리소스 링크가 있으면 내 방식대로 보내십시오! 내 가장 큰 문제는 정렬되지 않은 그룹화되지 않은 주문 항목 목록 (케이스 B)에 적용 할 프로모션을 결정하는 것입니다.
cml

@ cml : 이미 원하는 기능을 갖춘 상용 제품이 있다는 것을 알고 있습니다. 내가 아는 것 중 하나는 Hybris이며, 매우 정교한 프로모션 시스템이 있다고 들었습니다.
FrustratedWithFormsDesigner

1
cml

1

3 살짜리 실이지만 여전히 누군가에게 도움이 될 것이라고 생각하고 있습니다.

Table Structure
Table_Offer
--------
ID FK
Name   
start time  
end time   

MandatoryGroup
--------
ProductId (FK to product)

MixGroup1
--------
ProductId (FK to product)


MixGroup2
--------
ProductId (FK to product)


Table_offerDetails
------------------
ID PK
offerId (FK to table_offer)
MandatoryProduct(FK to MandatoryProducts.productID
firstProduct ( fk to MixGroup1.productId)
secondProduct (FK to MixGroup2.productId)

Offer
----
 ID    name    startDate  EndDate 
---    ----     --------   ------
1       COMBO   


MandatoryGroup
-------------
 ID    name 
 ---   ---- 
1      A
2      B


MixGroup1
---------
 ID    name 
 ---   ---- 
 3      P      
 4      Q

MixGroup2
---------
 ID    name 
 ---   ---- 
 5      x      
 6      Y
 7      Z



 OfferHeader
-------------
ID  Customer count(B) B_disc time_disc  stat_disc DiscTotal orderPayableTotal
--  --------- -------  ----   --------  ---------  --------  ------------    
1     BOB     2         20      5         2             

제안 세부 사항 ------------

 ID   offerID   MandatoryProduct     1stProduct    2ndProduct
----  -------    ---------------     ----------    ----------
1       1         A                     P              X
2       1         A                     P              Y
3       1         A                     P              Z
4       1         A                     Q              X
5       1         A                     Q              Y
6       1         A                     Q              Z
7       1         B                     P              X
8       1         B                     P              Y
9       1         B                     P              Z
10      1         B                     Q              X
11      1         B                     Q              Y
12      1         B                     Q              Z

offerDetails를 구성하려면 필수, mixgropu1 및 amixGropu2를 제공해야합니다. 따라서 caseB는 다음과 같이 2 개의 오퍼 만 있습니다.

1 A and 2 B, 2 Q, 1 S, 2 X and 1 Z
2B 2Q and 2X =2 offers
1A 1Q and 1X=1st offer
1B 1Q and 1X=2nd Offer ... etc other combinations are vivid.

다른 오퍼는 비즈니스 로직을 기반으로합니다. 수량 오퍼 할인의 경우 : 고객을위한 오퍼에서 B의 수를 찾기위한 조회를 작성하십시오. 그것을 QTYB라고 부릅니다. QTYB % 2를 찾아 수량 Offer 값 ($ 20)으로 곱하십시오.

통계 제공을 위해 고객의 구매를 위해 earnedPoint라는 다른 비트를 추가하십시오. earnedPoint에 만료 날짜를 설정하십시오. 적립 포인트는 구매 금액과 동일 할 수 있습니다. 구매 금액이 == X 이상인지 확인하면 정책에 따라 할인이 적용됩니다.

주문 시간이 오후 5시 이전과 오전 10시 이후 인 경우 5 %를 발행하고 그렇지 않으면 10 % 할인을 발행하는 경우 주문 시간을 비교합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.