Cvičení předmětu KIV/DB1
6. týden výuky, cvičící: Ing. Tomáš Kotouč
Procvičování ERA modelů, Funkční závislost a multizávislost.
Doposud jsme se bavili o vztahu mezi několika tabulkami, jak na sebe tabulky vážou (1:1, 1:N, M:N) a jaké mají atributy. Nyní se budeme bavit o tom, že i mezi atributy je jistý vztah, který v určitých případech vede k rozkladu tabulky na více tabulek.
Základní pojmy potřebné pro pochopení Normálních forem:
- Funkční závislost
- Máme relaci R a v ní dvě množiny atributů A a B, pak existuje funkční závislost B na A, jestliže jedné A-hodnotě se přiřadí nejvýše jedna B-hodnota.
- Máme tabulku, ve které evidujeme rozvrh malé vysoké školy, kde každý předmět je učen právě jedním učitelem a každý učitel je natolik vytížen, že učí jen jeden předmět:
Předmět |
Učitel |
Kroužek |
Místnost |
Čas |
Matematika |
Novák |
A4-01 |
PC406 |
Út3 |
Matematika |
Novák |
A4-01 |
UL411 |
Po9 |
Matematika |
Novák |
E3-15 |
PC406 |
Út3 |
Matematika |
Novák |
E3-15 |
UL411 |
Po9 |
Dějepis |
SUKOVÁ |
S1-07 |
AM701 |
St5 |
Dějepis |
SUKOVÁ |
A4-01 |
AM701 |
St5 |
Dějepis |
SUKOVÁ |
S1-87 |
AM701 |
St5 |
Dějepis |
SUKOVÁ |
K3-05 |
AM701 |
St5 |
|
{Místnost,Čas} » {Učitel}
{Místnost,Čas} » {Předmět}
{Učitel} » {Předmět}
{Předmět} » {Učitel}
|
- Z ukázky dat (relace) nelze dokázat, že platí nějaká funkční závislost (nemusí být zobrazeny některé možnosti, které potom vedou k tomu, že funkční závislost mezi určitými množinami atributů neexistuje), ale naopak negativní fakta mohou být z dané relace zjistitelná, tvoří totiž protiklad. Kladná fakta víceméně určíme z obecných znalostí a podmínek, které se daného případu týkají.
- Atribut Učitel je funkčně závislý na množině atributů {Místnost-Čas}, protože pro každou hodnotu množiny atributů {Místnost-Čas} existuje nejvýše jedna hodnota atributu Učitel. To jinými slovy znamená, že v jedné místnosti ve stejnou dobu nemohou učit dva učitelé.
- Atribut Předmět je funkčně závislý na množině atributů {Místnost-Čas}.
- Atribut Předmět je funkčně závislý na atributu Učitel. To by obecně platit nemuselo protože jeden učitel je schopen učit i více předmětů, ale mi to máme v úvodní podmínce a tak to platí.
- Atribut Učitel je funkčně závislý na atributu Předmět.
- Ale atribut Učitel není funkčně závislý na atributu Místnost, protože v jedné místnosti je možné učit obecně několik předmětů, přestože to z našich dat není na první pohled vidět. Může existovat samozřejmě výjimka, typu např. chemické laboratoře, kde se bude učit jen chemie, ale obecně to neplatí a to je důležité.
- Atribut Učitel není funkčně závislý na atributu Čas.
- Atribut Učitel není funkčně závislý na atributu Kroužek.
- Atribut Předmět není funkčně závislý na atributu Kroužek.
- Atribut Předmět není funkčně závislý na atributu Místnost.
- Atribut Předmět není funkčně závislý na atributu Čas.
- Atribut Kroužek není funkčně závislý na atributu Předmět.
- Atribut Kroužek není funkčně závislý na atributu Učitel.
- Atribut Kroužek není funkčně závislý na atributu Místnost.
- Atribut Kroužek není funkčně závislý na atributu Čas.
- Atribut Místnost není funkčně závislý na atributu Předmět.
- Atribut Místnost není funkčně závislý na atributu Učitel.
- Atribut Místnost není funkčně závislý na atributu Kroužek.
- Atribut Místnost není funkčně závislý na atributu Čas.
- Atribut Čas není funkčně závislý na atributu Předmět.
- Atribut Čas není funkčně závislý na atributu Učitel.
- Atribut Čas není funkčně závislý na atributu Kroužek.
- Atribut Čas není funkčně závislý na atributu Místnost.
- Multizávislost
- Máme relaci R a v ní dvě množiny atributů A a B, pak existuje multizávislost B na A, jestliže jedné A-hodnotě se přiřadí několik B-hodnot.
- Máme tabulku, ve které evidujeme modely aut, v jaké zemi se vyrábějí a kolik mají jejich motory válců.
- Platí zde jedno pravidlo: model se vyrábí ve všech státech ve všech verzích motorů.
Model |
Země |
Počet válců |
Mustang |
USA |
4 |
Mustang |
USA |
6 |
Mustang |
Kanada |
4 |
Mustang |
Kanada |
6 |
- Atribut Počet válců multizávisí na atributu Model.
- Tuto tabulku lze rozdělit na dvě tabulky:
Model |
Země |
Mustang |
USA |
Mustang |
Kanada |
|
1:N |
Model |
Počet válců |
Mustang |
4 |
Mustang |
6 |
|
- Když nyní přidáme např. model Škoda vyráběný v ČR se 4 válci, projeví se to v původní i nových tabulkách takto:
Model |
Země |
Počet válců |
Mustang |
USA |
4 |
Mustang |
USA |
6 |
Mustang |
Kanada |
4 |
Mustang |
Kanada |
6 |
Škoda |
ČR |
4 |
|
|
Model |
Země |
Mustang |
USA |
Mustang |
Kanada |
Škoda |
ČR |
|
1:N |
Model |
Počet válců |
Mustang |
4 |
Mustang |
6 |
Škoda |
4 |
|
- Když nyní začneme v ČR model Škoda vyrábět i s 6 válci, projeví se to v původní i nových tabulkách takto:
Model |
Země |
Počet válců |
Mustang |
USA |
4 |
Mustang |
USA |
6 |
Mustang |
Kanada |
4 |
Mustang |
Kanada |
6 |
Škoda |
ČR |
4 |
Škoda |
ČR |
6 |
|
|
Model |
Země |
Mustang |
USA |
Mustang |
Kanada |
Škoda |
ČR |
|
1:N |
Model |
Počet válců |
Mustang |
4 |
Mustang |
6 |
Škoda |
4 |
Škoda |
6 |
|
- Když nyní začneme v Japonsku vyrábět model Škoda, musíme ho vyrábět se 4 válci i s 6 válci. To se projeví v původní i nových tabulkách takto:
Model |
Země |
Počet válců |
Mustang |
USA |
4 |
Mustang |
USA |
6 |
Mustang |
Kanada |
4 |
Mustang |
Kanada |
6 |
Škoda |
ČR |
4 |
Škoda |
ČR |
6 |
Škoda |
Japonsko |
4 |
Škoda |
Japonsko |
6 |
|
|
Model |
Země |
Mustang |
USA |
Mustang |
Kanada |
Škoda |
ČR |
Škoda |
Japonsko |
|
1:N |
Model |
Počet válců |
Mustang |
4 |
Mustang |
6 |
Škoda |
4 |
Škoda |
6 |
|
- Tento rozklad je velice výhodný, protože zmenšuje využívaný databázový prostor a zrychluje prohledávání v databázi. Tento rozklad je předmětem 4. normální formy, kterou probereme později.
- Pokud by neplatila naše podmínka, tedy že by se v každé zemi nemuseli vyrábět modely se všemi verzemi motorů (např. Mustang se v Kanadě vyrábí jen ve verzi 4 válcové), potom by nešlo o multizávislost a nebyl by možný rozklad na dvě tabulky.
- Při návrhu aplikace je tedy nutné se pořádně zamyslet, jaké omezující podmínky máme a co s nimi dokážeme provádět.
Pokud najdete nějaké nesrovnalosti, zašlete je, prosím, na e-mailovou adresu
kotouc@civ.zcu.cz.