Jump to content
  • 0

pomoc model ceníku, platnost, historie


mxco

Dotaz

Zdravím, dělám na interním systému (php, mysql) a přemýšlím jak navrhnout tabulky, aby systém byl udržitelný do budoucna a nebyl tak úplně overkill. Momentálně mám tabulky:

pricelist - [id | company_id | discount]
pricelist_has_item - [id | pricelist_id | item_id | price]

Tak nějak bych chtěl rozvíjet historii ceníků - kdykoliv se položka v ceníku nebo ceník samotný změní tak změnu zapsat. Což by nebyl problém. Háček je v tom, že potřebuju, aby změna byla ale současně platná až následující den (abych ve stejný den neměl jednu zakázku takovou a druhou makovou).

  • Změnu provedu dnes (12.11.2021) (sleva 0% -> 5%), ale těch 5% se bude počítat až od zítra
  • Za měsíc se chci podívat, za jaký ceník měla bejt zakázka 8.11.2021 (měla by bejt sleva 0%)

Prozatím mě napadlo to udělat jako snapshoty, co se bude vrstvit (jako malba na zdi). Což by pak změna v tabulkách vypadala tak:

pricelist [id | company_id | 3% | valid_from 2021-11-13] (momentálně)
pricelist_snapshot [id | pricelist_id | old_valid_from | 0% sleva] (snapshot před změnou)

Ale přijde mi pak stupidní se pomocí query ptát - select pricelist -> aplikuj a prolni první snapshot pokud datum na který se ptám < 2021-11-13.

A to jsem se ještě nedostal, k tomu, pokud by změna proběhla až v samotných položkách.

  • Změním položku id 1 v ceníku (1 kč -> 5 kč) ale taky potřebuju aby to bylo až následující dny.

To bych pak musel snapshotovat i položky. Nebo hledat položku, která platila pro daný snapshot celého ceníku.

Kdybych místo snapshotu jenom předchozí zrušil a vytvořil nový pod novým primary key, tak by to mělo stejnej efekt a furt bych musel hledat ve vrstvách.

Vítám jakékoliv nápady nebo doplňky :unsure:

Link to comment
Share on other sites

1 odpověd na tuto otázku

Recommended Posts

  • 0
  • Globální moderátor

Řekl bych, že hledáš PLM - product lifecycle management. Spočívá to v tom, že máš list produktů a list nabídek:

  • Produkt ("product") je klasický produkt, třeba tužka
  • nabídka ("offer") je cenová nabídka (zatím bez produktu), jsou na ni navázané pravidla jako například od kdy je nabídka k dispozici, kdo ji může dostat atd.

když tyhle dvě věci zkombinuješ máš produktovou nabídku ("offerproduct"), což je vlastní nabídka, kterou zobrazuješ koncovému zákazníkovi. Výsledek je, že pro konkrétního zákazníka můžeš vytvořit offerproduct, který má třeba jen omezenou platnost (platnost se přenáší z offer). offerproduct můžeš kdykoliv smazat, ale offer a product zůstanou a můžeš je kdykoliv zase zkombinovat. Je to takhle pochopitelné?

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...