
Databáze - klíče tabulky a zjištění normální formy
Dobrý den,
prosím Vás, je tady někdo, kdo se vyzná v databázích? A umí rozpoznat z klíčů tabulky normální formu? (1NF, 2NF,3NF?) předem moc děkuji
Jenom z klíčů se to IMHO poznat nedá.
Takový je zadání:
Tabulka POTRAVINY (Čárový_kód, Datum_spotřeby, Název_výrobku, Druh, Výrobce, Země, Měrná_jednotka, Množství) obsahuje data potravin, které se nacházejí na skladě jisté prodejny, F je množina funkcionálních závislostí.
F = {
Čárový_kód {Název_výrobku, Druh, Výrobce, Země, Měrná_jednotka},
Název_výrobku Druh
Výrobce Země,
{Název_výrobku, Výrobce} Čárový_kód
{Čárový_kód, Datum_spotřeby} Množství }
Určete:
- Kliče tabulky
- Zjistěte normální formu
- Pokud tabulka není ve 3NF, proveďte dekompozici do 3NF
Řešení:
Čárový_kód (Č), Datum_spotřeby (D), Název_výrobku (N), Druh (R), Výrobce (V), Země (Z), Měrná Jednotka (M), Množství (O), V
Č + {Č, N, R, V, Z, M}
NV + {N, V, Č, R, Z, R}
ČD + {Č, D, O, N, R, V, Z, M} Klíč je ČD
A otázka zní?
otázka z ní jestli mám správně ten klíč.. a v jaké je to normální formě, jestli je to ve 3NF ? :)
No já bych to teda rozdělil na tabulky:
Zboží(čárový_kód, název_výrobku, výrobce, měrná_jednotka)
Výrobce(výrobce, země)
DruhVýrobku(název_výrobku, druh)
Stav(čárový_kód, datum_spotřeby, množství)
to ale neni 3NF...
Tohle je forma, v jaké by to mělo být, aby to bylo použitelné. Vše ostatní vede k problémům, opakujícím se datům a komplikovaným updatům.
Blbost. Normálně se to dělá takhle.
Zboží(idZbozi (PK), idDruhVyrobku (FK), idVyrobce (FK), idMernaJednotka(FK), idStav (FK), čárový_kód, název_výrobku)
Výrobce(idVyrobce (PK), idZemě (FK), výrobce)
Země(idZeme (PK), zeme)
DruhVýrobku(idDruhVyrobku (PK), druh)
MěrnáJednotka(idMernaJednotka (PK), mernaJednotka)
Stav(idStav (PK), datum_spotřeby, množství)
dovolím si nesouhlasit. Jedna věc je matematicko-logické "školometské" rozčlenění, druhá pak realita, kdy se často do 3NF návrh nikdy nedostane, protože to z nějakého důvodu nejde, nebo to není efektivní.
Tak jasně, že z důvodů optimalizace se může někdy schéma zprasit (případně zavést i nějakou redundanci dat). Tady se to ale dá v pohodě udělat "správně" a bude to nejefektivnější a dotazy do toho budou "hezké"...
PK u zboží nemusí být nutně ID. Čárový kód je jednoznačný pro zboží každého výrobce. Takže i kdybys měl "máslo farmářské" od 2 výrobců, tak každé bude mít svůj čárový kód.
Co se týká redundace, té se v praxi občas nevyhneš, hlavně u hodně velkých dat. Už jen třeba kvůli rozdělení hodně velkých tabulek na partitions, kde se musíš řídit nějakým časovým ůdajem, takže nestačí mít datum v hlavičce dokladu.
Teorie je o tom, jak by se to dělat mělo
Praxe je o tom, jak to udělat, aby to optimálně fungovalo
Podle teorie to navrhneš a podle praxe to pak zoptimalizujes.
No, kdyby to mělo být přesně podle praxe, tak čárový kód se jako primární klíč nemůže použít. Jedno zboží může mít klidně i více čárových kódů, často ke změně kódu stačí jenom to, aby se změnil obal.
Pak už je to "jiné" zboží, musíš to evidovat zvlášť na skladu, protože to vše přes čárové kódy při příjmu a kontrolách zpracováváš.
Ne, vážně není. Je to stále jedno a totéž zboží i u dodavatele se to objednává pod stejným interním kódem.