Схема бази даних щодо цінових продуктів (пакети, акції, кількість, обмежена пропозиція…)


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

У компанії є пакети, наприклад пакет "Combo": на товар A або B, якщо ви вибираєте 1 з Q або R і 1 з X, Y або Z, ви отримуєте знижку в розмірі 20 доларів.

Випадок А: Іноді клієнти додають до базового продукту під час оформлення замовлення, наприклад: Вони не є одним із Продукту А, і додають до нього продукт Q і продукт P, щоб створити пакет, який має знижену ціну. Потім вони можуть додати, що вони хочуть 1 продукт B з 1 R і 1 Z.

Випадок B: Іноді клієнти додають 1 A і 2 B, 2 Q, 1 S, 2 X і 1 Z. Відповідно до правил, викладених пакетом "Combo", застосовуються лише 2 комбо, оскільки S не є комбо-елементом.

Інші акції залежать від кількості, тому якщо ви купуєте 2 B, ви отримуєте 20% знижки та / або залежність від часу, вона дійсна лише після 17:00 або до 10% знижки, якщо до 10:00. Інша акція може залежати від того, коли відбулася остання покупка або якщо ви придбали більше $ X за Y-часовий період.

Мої проблеми:

1) Як я структурую таблиці, щоб я створював різні пакети чи рекламні кампанії дуже гнучким для додавання різних типів акцій з різними вимогами?

2) Коли вони замовляють, як Case B (або суміш справ A і Case 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 були досягнуті успіхи, вона не вирішена на задоволення. Існували деякі ідеї, як це зробити, Ніл МакГілган задав велике запитання, що веде до можливого рішення, використовуючи Реляційний відділ (dba.stackexchange.com/questions/45829/what-is-the-name-of-this-type- наприклад, запит-і-що-це-є ефективним прикладом), і ця книга (www.amazon.com/books/dp/0471380237) дуже допомогла. Однак це рішення на даний момент, і наскільки я його розумію, працює лише з "одним" записом (комбі) за один раз. Якщо клієнт підходить і каже, що хоче 2 чізбургери, 1 гамбургер, 1 маленький яблучний сік, 1 кокс, 1 картопля фрі та 2 кільця цибулі, мені потрібен спосіб виявити, що в суміші є лише одне комбо, і додати інший продукти за базовою ціною. Якщо є кілька комбінованих комбінацій, я '

Однією ідеєю, яку я придумав, щоб вирішити другу проблему, є додати та віднести до прапора PRODUCT COMPONENT основний продукт для комбо (тобто гамбургер). Потім, запускаючи процес ціноутворення, запитайте, які товари в замовленні є основними продуктами в "пакеті", пов'язуючи запит зі знижкою, наданою таблицею ЦІНИ КОМПОНЕНТУ, і замовляйте за цим значенням (у зменшенні), і в цьому порядку пакетів перевіряйте щоб побачити, чи можете ви створити "пакет" для решти основних продуктів із запитом і циклізуйте процес, поки не буде більше основних продуктів чи не залишиться більше основних продуктів у решті.


Що ви робили досі? Покажіть нам деяку діаграму ER.
Tulains Córdova

@ user61852 Більшість своїх ERD я роблю вручну. Чи можете ви порекомендувати інструмент зробити їх на комп’ютері, щоб я міг ним поділитися? (сподіваюся, вільний :)
cml

@ user61852 Я знайшов gliffy.com, що виявляється досить корисним. Я працюю над тим, щоб скласти те, над чим я працював, щоб оновити своє запитання.
cml

@ user61852 Я додав оновлення №1, щоб показати ERD, блок-схему, аванси та дані вибіркової таблиці.
cml

Відповіді:


2

Це може ускладнитися ...

1) Як я структурую таблиці, щоб я створював різні пакети чи рекламні кампанії дуже гнучким для додавання різних типів акцій з різними вимогами?

Ви можете почати з packaged_withтаблиці, щоб визначити, які продукти можна згрупувати та упакувати разом:

пакет
-------
  ідентифікатор (ПК)
  назва

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відноситься до a 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 | А | Q
1 | А | R
2 | А | Х
2 | А | Y
2 | А | Z
1 | Б | Q
1 | Б | R
2 | Б | Х
2 | Б | Y
2 | Б | Z

У цьому вам допоможуть самі пакети товарів. У мене є кілька ідей для решти вашого питання, але я не маю часу закінчити цю відповідь зараз ...


Акції

Ви перераховуєте багато видів акцій. Ви можете подивитися в будь - то правила-движка, але я буду намагатися тримати речі простіше , ніж це, але все - таки ... Це буде ускладнюватися ..

Почнемо з простих акцій, де ціна знижується на певний відсоток:

процентна знижка
----------------
  ідентифікатор (ПК)
  назва
  відсоткова сума

product_promotions
------------------
  ідентифікатор (ПК)
  product_id (від FK до product.id)
  promo_id (від FK до процента_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

Щоб побудувати офертуDetails, ви повинні надати обов'язкові, 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 доларів)

Для пропозиції щодо статистики просто додайте ще один біт під назвою заробляючий пункт для покупки клієнта. і встановіть прибутковому пункту термін придатності. зароблений бал може бути таким же, як і придбана сума. Перевірте, чи придбана сума> = $ X, вони видають знижку відповідно до політики.

Аналогічним є порівняння часу замовлення, якщо його до 5:00 та після 10:00, тоді видають 5%, випускають 10% знижки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.