Autor | Zpráva | ||
---|---|---|---|
mastodont Profil * |
#1 · Zasláno: 31. 1. 2007, 07:31:45
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 |
#2 · Zasláno: 31. 1. 2007, 09:24:45
Základné pravidlo návrhu databázy je vyhnúť sa duplicitným dátam...
|
||
nightfish Profil |
#3 · Zasláno: 31. 1. 2007, 09:47:18
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 |
#4 · Zasláno: 31. 1. 2007, 12:02:19
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 * |
#5 · Zasláno: 31. 1. 2007, 16:13:47
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 * |
#6 · Zasláno: 31. 1. 2007, 16:15:05
Sorry, rozhozené formátování :-((
|
||
tiso Profil |
#7 · Zasláno: 31. 1. 2007, 17:20:59
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 * |
#8 · Zasláno: 31. 1. 2007, 18:19:43
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 |
#9 · Zasláno: 31. 1. 2007, 20:46:50
..stále mám dojem že to netreba...
|
||
Časová prodleva: 9 měsíců
|
|||
Školník Profil |
#10 · Zasláno: 9. 11. 2007, 10:26:56 · Upravil/a: Školník
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../ |
||
Časová prodleva: 16 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0