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:
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:
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.
Dotaz
mxco 55
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).
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.
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
Link to comment
Share on other sites
1 odpověd na tuto otázku
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now