Zadejte hledaný výraz...

Návrh DB pro seznam otevírací doby

Ahoj,
připravuji jeden web, kde bude seznam různých provozoven a k těm potřebuji zobrazovat jejich otevírací dobu. Problém není ani tak v tom, že otevírací doba může být různá v jednotlivých dnech týdne, ale že může být různá i v jednotlivých měsících, tak hledám "geniální" :) řešení jak to udělat, ale napadá mne prostě mít jednu tabulku, kde budou otevírací doby s datem platnosti tzn. něco takového:
Nebo vás napadá něco lepšího?
Díky
13. 8. 2020 10:18:11
https://webtrh.cz/diskuse/navrh-db-pro-seznam-oteviraci-doby#reply1460117
petr.hirsal
verified
rating uzivatele
(2 hodnocení)
13. 8. 2020 11:35:46
Ahoj,
pokud hledáš "genitální" řešení, co ke každému záznamu místo identifikátoru měsíce přidat dva sloupce platnosti "datum od" a "datum do"? Což by vyřešilo například sezónní otevírací dobu, uzavření z důvodu dovolené...
13. 8. 2020 11:35:46
https://webtrh.cz/diskuse/navrh-db-pro-seznam-oteviraci-doby#reply1460116
TomasX
verified
rating uzivatele
(4 hodnocení)
13. 8. 2020 11:36:15
A potřebuješ to mít normalizované v tabulce? Nestačí textová informace?
Jinak bych tam ještě doplnil sloupec s platností od/do, pokud budeš potřebovat uvést dočasně nějakou změnu otvírací doby.
13. 8. 2020 11:36:15
https://webtrh.cz/diskuse/navrh-db-pro-seznam-oteviraci-doby#reply1460115
A počkej, až zjistíš, že existují státní svátky a možná upravená provozní doba :D A přestupný rok.
13. 8. 2020 11:39:15
https://webtrh.cz/diskuse/navrh-db-pro-seznam-oteviraci-doby#reply1460114
Petr Hejda
verified
rating uzivatele
(5 hodnocení)
13. 8. 2020 11:40:18
Já osobně preferuju recurrence rules. Hezky vysvětlené použití je třeba u téhle knihovny - https://github.com/simshaun/recurr, nebo tady je generátor - https://jakubroztocil.github.io/rrule/
Pravidlo pro "leden až březen, každý pracovní den v 8 ráno" (začátek otevírací doby) se tak dá zapsat do stringu:
Stejně tak pravidlo pro "leden až březen, každý pracovní den ve 4 odpoledne" (konec otevírací doby) bude:
Do DB si pak uložíš jen tyhle stringy a na výstupu je tranformuješ do nějakého human-readable formátu:
A mimochodem, nepoužívej názvy sloupců v češtině :-)
13. 8. 2020 11:40:18
https://webtrh.cz/diskuse/navrh-db-pro-seznam-oteviraci-doby#reply1460113
Napsal petr.hirsal;1593697
Ahoj,
pokud hledáš "genitální" řešení, co ke každému záznamu místo identifikátoru měsíce přidat dva sloupce platnosti "datum od" a "datum do"? Což by vyřešilo například sezónní otevírací dobu, uzavření z důvodu dovolené...
Pravda vůbec mi nedošlo, že nemusí být otevřeno celý měsíc, takže ten měsíc je hloupost :)
Napsal TomášX;1593698
A potřebuješ to mít normalizované v tabulce? Nestačí textová informace?
Jinak bych tam ještě doplnil sloupec s platností od/do, pokud budeš potřebovat uvést dočasně nějakou změnu otvírací doby.
Ano, protože to bude jeden z filtrů
Napsal Petr Hejda;1593701
Já osobně preferuju recurrence rules. Hezky vysvětlené použití je třeba u téhle knihovny - https://github.com/simshaun/recurr, nebo tady je generátor - https://jakubroztocil.github.io/rrule/
Pravidlo pro "leden až březen, každý pracovní den v 8 ráno" (začátek otevírací doby) se tak dá zapsat do stringu:
Stejně tak pravidlo pro "leden až březen, každý pracovní den ve 4 odpoledne" (konec otevírací doby) bude:
Do DB si pak uložíš jen tyhle stringy a na výstupu je tranformuješ do nějakého human-readable formátu:
A mimochodem, nepoužívej názvy sloupců v češtině :-)
To vypadá zajímavě, koukám, že ta knihovna v tom pak umí i filtrovat, což se hodí, díky
PS. nepoužívám názvy sloupců v češtině, to bylo jen pro tento příklad :)
13. 8. 2020 13:57:41
https://webtrh.cz/diskuse/navrh-db-pro-seznam-oteviraci-doby#reply1460112
Erik
verified
rating uzivatele
(6 hodnocení)
13. 8. 2020 14:21:49
Nejsem žádný expert na RDBM, ale ten datový objekt mi přijde jako fujtajbl a uložil bych si ho celý jako Json a neroztabulkovával bych ho.
Hádám že nepůjde o žádná performance critical data.
13. 8. 2020 14:21:49
https://webtrh.cz/diskuse/navrh-db-pro-seznam-oteviraci-doby#reply1460111
TomasX
verified
rating uzivatele
(4 hodnocení)
13. 8. 2020 14:40:32
jde to vyřešit pěkně relačně, ale pak se to špatně prohledává. Varianta od Petra je zajímavá, ale při vyhledávání musíš naparsovat vše, neumí indexy, celkově to je dobré, když máš pár pravidel v konfiguraci a nikoliv, když máš databázi prodejen.
Jeden operátor to dělá jinak, spousty prodejen a vyjímek: V databázi je číselníková tabulka všech čtvrt hodin dopředu na několik let. K tomu je vázací tabulka, která přes cizí klíče z toho dělá běžné šablony jako po-pá 9-18. Samotná prodejna pak má cizí klíč na šablonu a volitelně samostatné čtvrt hodiny z číselníku a to ve významu navíc nebo méně (lze pak zapsat i obědy). Tohle se dá prohledávat přes range v sql, zvládá to i miliony provozoven na malé databázi.
Píšu na mobilu, snad to je pochopitelné, mohu případně zapsat jako E-R diagram.
Použil jsem stejné řešení i na jeden velký rezervační systém, kdy byla podmínka latence v ms. U velkých systémů lze využít lucene (např. elastic nebo pg), které umí časové intervaly indexovat.
13. 8. 2020 14:40:32
https://webtrh.cz/diskuse/navrh-db-pro-seznam-oteviraci-doby#reply1460110
Napsal TomášX;1593722
jde to vyřešit pěkně relačně, ale pak se to špatně prohledává. Varianta od Petra je zajímavá, ale při vyhledávání musíš naparsovat vše, neumí indexy, celkově to je dobré, když máš pár pravidel v konfiguraci a nikoliv, když máš databázi prodejen.
Jeden operátor to dělá jinak, spousty prodejen a vyjímek: V databázi je číselníková tabulka všech čtvrt hodin dopředu na několik let. K tomu je vázací tabulka, která přes cizí klíče z toho dělá běžné šablony jako po-pá 9-18. Samotná prodejna pak má cizí klíč na šablonu a volitelně samostatné čtvrt hodiny z číselníku a to ve významu navíc nebo méně (lze pak zapsat i obědy). Tohle se dá prohledávat přes range v sql, zvládá to i miliony provozoven na malé databázi.
Píšu na mobilu, snad to je pochopitelné, mohu případně zapsat jako E-R diagram.
Použil jsem stejné řešení i na jeden velký rezervační systém, kdy byla podmínka latence v ms. U velkých systémů lze využít lucene (např. elastic nebo pg), které umí časové intervaly indexovat.
S těmi čtvrthodinami sice nerozumím, ale přijde mi to zbytečně komplikované, proto co potřebuji, už třeba proto, že si ty otvíračky nebudou nastavovat samy provozovny.
13. 8. 2020 15:36:08
https://webtrh.cz/diskuse/navrh-db-pro-seznam-oteviraci-doby#reply1460109
Pro odpověď se přihlašte.
Přihlásit