Estou trabalhando em um novo ponto de venda para uma empresa que produz produtos por preços diferentes, dependendo do mix de produtos.
Todos os produtos têm um preço base.
Para explicar meu problema, usarei as seguintes informações:
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 empresa possui Pacotes, por exemplo, Pacote "Combo": para o produto A ou B, se você escolher 1 de Q ou R e 1 de X, Y ou Z, obtém um desconto de US $ 20.
Caso A: Às vezes, os clientes adicionam um produto base ao fazer um pedido, por exemplo: eles não são do Produto A e adicionam o Produto Q e o Produto P a ele para criar um pacote com um preço com desconto. Eles podem acrescentar que desejam 1 produto B com 1 R e 1 Z.
Caso B: Às vezes, os clientes adicionam 1 A e 2 B, 2 Q, 1 S, 2 X e 1 Z. De acordo com as regras estabelecidas no pacote "Combo", apenas 2 combos se aplicariam porque S não é um item de combinação.
Outras promoções dependem da quantidade; portanto, se você comprar 2 de B, terá 20% de desconto e / ou depende do tempo, só será válido depois das 17h ou antes dos 10% de desconto antes das 10h. Outra promoção pode depender de quando sua última compra ocorreu ou se você comprou mais de US $ X no prazo de Y.
Meus problemas:
1) Como estruturo as tabelas para criar os diferentes pacotes ou promoções de uma maneira que seja muito flexível para adicionar diferentes tipos de promoções com requisitos diferentes?
2) Quando eles solicitam como o Caso B (ou uma combinação de Caso A e Caso B), como estruturo minha consulta para que eu possa testar para ver quais mix (es) de produto estão no pedido e atualizar os preços / descrições de acordo ? Por fim, o melhor resultado para essa consulta retornaria quais pacotes e promoções têm os requisitos atendidos, na ordem dos quais traz o maior benefício para o cliente (ou seja, talvez o que eles pediram cumpra os requisitos das promoções 1 e 3, mas a promoção 3 é menos dispendiosa. deve trabalhar com várias promoções).
Obrigado antecipadamente pela ajuda!
ATUALIZAÇÃO # 1
Para melhor descrever os problemas em questão e atualizar o trabalho realizado até agora para resolvê-los , incluí um ERD do Modelo de Produto limitado às entidades e atributos que afetam o problema (ou seja, o inventário não está em jogo aqui, portanto, nenhum inventário entidades estão presentes).
Também estou incluindo dados de amostra das entidades e atributos que afetam essa pergunta (para simplificar a leitura dos dados, estou colocando nomes / descrições no lugar de Chaves estrangeiras):
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
Assim, com a pesquisa e o suporte fornecidos pela comunidade até o momento, consegui resolver o Problema 1. Na verdade, eu fiz isso com mais flexibilidade do que eu pensava que poderia fazer na primeira implantação do sistema.
Embora tenha havido avanços no Problema 2, ele não foi resolvido com satisfação. Houve algumas idéias sobre como fazer isso, Neil McGuilgan fez uma ótima pergunta que levava a uma possível solução usando a Divisão Relacional (dba.stackexchange.com/questions/45829/what-is-the-name-of-this-type- exemplo de consulta e o que é um exemplo eficiente) e este livro (www.amazon.com/books/dp/0471380237) ajudaram muito. No entanto, esta solução no momento, e pelo que entendi, funciona apenas com "um" registro (combinação) de cada vez. Se um cliente subir e disser que quer 2 cheeseburgers, 1 hambúrguer, 1 suco de maçã pequeno, 1 coca-cola, 1 batata frita e 2 anéis de cebola, eu preciso de uma maneira de detectar se existe apenas uma combinação na mistura e adicionar a outra produtos a preço base. Se houver várias combinações de combinação, eu
Uma idéia que surgiu para solucionar o problema dois é adicionar e atribuir ao sinalizador COMPONENTE DO PRODUTO o principal produto do combo (por exemplo, hambúrguer). Em seguida, ao executar o processo de precificação, consulte quais produtos do pedido são os principais produtos de um "pacote", relacionando a consulta ao desconto dado pela tabela PRICE COMPONENT e solicitando por esse valor (decrescente) e nessa ordem de pacotes. para ver se você pode criar um "pacote" com os produtos não principais restantes com uma consulta e fazer um loop do processo até que não haja mais produtos principais ou que não haja mais produtos não principais no restante.