Autor Zpráva
mastodont
Profil *
Měl bych jeden koncepční dotaz, pokud někdo s něčím podobným přišel do styku. Jde v podstatě o to, jestli je lepší mít více dat v databázi nebo při výběrech ta data dopočítávat. Vysvětlím:

Aplikace typu kalendář akcí. V databázi je tabulka akcí, pro každou akci je třeba určit počáteční a koncový datum a typ opakování (žádné, každý den, jeden den v týdnu, několik dní v týdnu, každý týden nebo každý lichý či sudý týden, jednou za měsíc, jednou za rok).

Díval jsem se do modulu Events v Mambu a tam to řeší tak, že mají jednu tabulku, ve které je pro každou akci zapsán typ opakování a další pomocné sloupečky upřesňují, kdy k opakování dochází. Při SELECTu, který vybírá data kalendáře akcí za celý týden či měsíc pak PHP počítá, na které dny má opakované akce rozmístit.

Nebylo by vhodnější mít tabulky dvě a do té druhé prostě rovnou při vkládání nové akce vložit n záznamů s ID akce a vypočítanými dny, na které akce připadá? Sice by db byla větší, ale zase by měl být rychlejší výběr. V hlavní tabulce s údaji o akci by byl typ opakování uložen, takže při případné změně akce by se dny vypočítaly znovu.
tiso
Profil
Základné pravidlo návrhu databázy je vyhnúť sa duplicitným dátam...
nightfish
Profil
Základné pravidlo návrhu databázy je vyhnúť sa duplicitným dátam...
...leč v některých případech může být s ohledem na výkon vhodné si některá data předpočítat (ale přináší to problémy s dostupností aplikace během přepočítávání, udržování konzistence vypočtených údajů apod.) - ale není to tento případ
tiso
Profil
nightfish
...tiež si myslím...
K tomu výkonu - je rozdiel medzi minimálnymi dátami v databáze a dátami slúžiacimi na rýchlejšie spracovanie.
mastodont
Profil *
tiso: Tady by se ale de facto nemělo jednat o duplicitní data ..

Tabulka 1
ID ---- DatumZacatek ---- DatumKonec --- TypOpak ---- DnyOpak (a další sloupce)
---------------------------------------------------------------------- ----------
1 31. 1. 2007 8. 2. 2007 2 135 (2 = několik dnů v týdnu, 135 = po, st, pá)

Tabulka 2
ID --- Datum
1 31. 1. 2007
1 2. 2. 2007
1 5. 2. 2007
1 7. 2. 2007

No a pak lze selectit data akce přímo pro konkrétní Datum ...

Mně by prostě zajímalo, jestli se tento přístup používá. Podle mne je pomalejší zadávání nových dat (které se dělá stejně jen jednou) bohatě vykoupeno rychlým selectem (a těch pak bude hodně) ...
mastodont
Profil *
Sorry, rozhozené formátování :-((
tiso
Profil
mastodont - máš pravdu, malo by to byť v poriadku... Problémovo vyzerá to zadávanie opakovanej akcie - stačilo by vyplniť formulár a hneď vygenerovať druhú tabuľku, čo z prvej tabuľky využiješ aj niekde inde?
mastodont
Profil *
tiso: V první tabulce budou další údaje o akci (pořadatel, místo a tak - čili údaje, které by se v druhé tabulce duplikovaly), a pokud by bylo třeba dodatečně změnit parametry opakování akce, tak otevřu ve formuláři první tabulku, změním ji a při zápisu vymažu všechny související záznamy v druhé tabulce a vygeneruju je znovu podle změněných dat. Proto bude uložen i TypOpak a DnyOpak.
tiso
Profil
..stále mám dojem že to netreba...
Školník
Profil
Mohl bych znovu otevřít toto téma? :-)

mastodont - prosím Tě, mohl bys mi upřesnit, jak jsi vyřešil to opakování? Díky... /hlavně mi jde o to, jestli do té druhé tabulky vypisuješ veškeré datumy, kdy se opakuje. Extrémní příklad je každé pondělí, dvacet let dopředu../
Toto téma je uzamčeno. Odpověď nelze zaslat.