Ulozeni ciselniku rubrika: Databáze: SQL
Zdravim,
Chystam ted model databaze ve ktery bude nekolik ciselniku. Proste tabulka ktera v podstate obsahuje jen id (int) a value (string) a asi jeste neco podle ceho radit: order (int). Rekneme, ze treba pohlavi (muz, zena), vekova kategorie (junior, u23, dospely, veteran), discsplina (omezeny pocet disciplin). Ne ze by to bylo samo o so be nejak problematicky, ale nabizi se 2 mozny reseni.
-
kazdej ciselnik = tabulka (+jim dam mozna nejakej prefix, at jsou ve schematu hezky odlisitelny)
- vytvorit jeden ciselnik (id, id_atributu, value, order) a prasknout to vsechno do neho.
Tak nejak tihnu k reseni 2, ale v podstate jedinej argument proc to tak udelat je, ze mne nebudou "prekazet" ty zbytecny tabulky kdyz se divam na schema.
Jak to resite? Nejaky argumenty proc je neco z toho (a nebo neco uplne jinyho) lepsi?
Edit: Ciselnik z bodu dva obsahuje krome id, value a order take sloupec id_atributu jehoz cilem je identifikovat o ktery konkretni atribut jde (ted toto ma identifikovat jednotlivou tabulku z varianty cislo 1)
Určitě možnost 1
Zkus se zamyslet nad důsledky. Pokud to nacpeš do jedné tabulky, budeš muset (pravděpodobně) vytvářet vazební tabulku, aby jsi vyjádřil, že záznam patří muži, dospělci, box. Což ti automaticky přináší nutnost kontrolovat, aby jsi neměl vazbu: muž, žena, junior, dospělec, box.
Pokud by jsi měl naopak každou kategorii dat v jedné tabulce, spousta validace ti odpadne už ze začátku. muž | žena dáš vazbu 1:1, věkovou kategorii pravděpodobně také, a zbude ti kontrola, zda někdo může boxovat a zároveň dělat trojboj.
Netřeba zdůrazňovat, že tuto validaci budeš muset dělat úplně všude, od vytvoření záznamu, až po filtrování.
Určitě by se těch důvodů a důsledků našlo vícero. Ale myslím, že tento stačí.
Komentáře
- Honza Břešťan : +22. Nemluve o tom, ze musis porad hlidat, jestli ti nekdo treba nedal "box" do "pohlavi" - to muze bolet :) Muze to resit constraint, ale pak je potreba ho menit s kazdou zmenou v ciselniku. — 17.3.2014
- kacerr : Mozna jsem se nevyjadril uplne jasne, ale ty moje ciselniky v podstate maji nahrazovat vyctovy typ. Ovsem jak pisu jinde, tak se mi hodi mit moznost obsah toho vyctu menit za behu aplikace. Ty spojene ciselniky spojene do jedne tabulky by samozrejme mely navic sloupec definujici co to je za atribut ... takze v podstate skutecne sloucenych n tabulek se stejnou strukturou o m sloupcich sloucene do jedne tabulky o m+1 sloupcich. pokud bude nekdo delat vic disciplin, tak na to stejne budu potrebovat vazebnou tabulku (nebo vic sloupcu ktery budou porusovat veskery normalni formy a nebo nejakej kondenzovanej sloupec podle kteryho se nebude dat hledat/tridit) — 17.3.2014
- kacerr : kladny body pro reseni 1 jsou, ze se urcite da lip udrzet referencni integrita databaze, ale tady se na rovinu priznam ze dost casto tohle neresim na urovni databaze a spoleham na to, ze to uhlida aplikace. — 17.3.2014
- Taco : @kacerr: Což je zbytečná práce. Ale na to se asi neptáš :-) — 17.3.2014
- Taco : @kacerr: Je lepší začít dodržením normálních forem, a pak v případě nutnosti denormalizovat. A vyhledávat a třídit se dá i podle více sloupců. Případně se na to dá udělat view, který ti to sloučí do jednoho. Všechny tyhle optimalizace se dají dělat, pokud máš databázi normalizovanou. Naopak se tomu říká hackování. — 17.3.2014
- kacerr : @Taco: Nevim na co jsi reagoval posledni reakci. Pokud na to, ze dam do tabulky vic sloupcu ktery budou idcka z jedny jiny tabulky, tak to asi s tou pravou normalni formou moc spolecnyho nema a pokud by ten sloupec byl kondenzovanej (tim mam na mysl, ze to bude treba string a narvu tam 1,4,6,7 coz budou idcka z toho ciselniku), tak tim, ze ten ciselnik asi suse muzu mit v aplikaci nahranej do nejakyho hashe, tak s tim pujde pracovat docela v pohode, hledani bude "pres ruku" a trideni ... no dobre, trideni podle neceho takovyho je asi nesmysl. Ta zminka o tom ze se da hledat/tridit podle vic sloupcu je vtipna, ale ocekaval bych ze se tu bavime na nejaky urovni a nektery veci ocekavame ze vime vsichni. — 17.3.2014
- Taco : Já už tu neočekávám nic ;-) — 17.3.2014
Pro zobrazení všech 9 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře