
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.
dobře a to znamená tedy 1NF, 2NF nebo 3NF? :)
Když pomineme tu blbost, co jsem tam měl, tak by to měla být 3. NF. Ještě možná za předpokladu, že by zboží mělo pouze jeden druh, by ten druh mohl být už v tabulce Zboží.
Pak se to teda dá šperkovat např. tím, že pro měrné jednotky vytvoříš další tabulku, ale pro přijímačky na pajdák je to asi už zbytečně moc.
jenže právě ty tabulky na měrné jednotky apod. jsou znakem 3NF. Typicky se v praxi používá 2NF.
vím, že 1NF nesmí mít vícehodnotové a složené atributy... 2NF je pokud je v 1NF a každý neklíčový atribut je plně funkcionálně závislý na každém klíči? ... to znamená, že každá neklíčová položka musí být součástí klíče? .. a to 3NF nějak nechápu už... relační schéma je ve 3NF, je-li ve 2NF a každý neklíčový atribut v R je plně funkcionálně závislý na každém klíči v R a je netranzitivně závislý na každém klíči R .. neklíčové položky vzájemně nezávislé... prosím jestli byste mi to mohl nějak více vysvětlit jak poznat 3NF a případně jak to převést...
Ak už toto nepochopíš https://cs.wikipedia.org/wiki/T%C5%99et%C3%AD_norm %C3%A1ln%C3%AD_forma , potom neviem...
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í)
Tak s tím Stavem jsi zase trochu ujel ty.
Zboží(idZbozi (PK), idDruhVyrobku (FK), idVyrobce (FK), idMernaJednotka(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), idZbozi (FK), 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.