Příklad 3 .. Mějme relaci R[Jmeno, Prijmeni, Misto, Narozen]. Předpokládejme, že data v znázorněné tabulce jsou reprezentativní pro určení závislosti (= na základě této ukázky záznamů lze určit, které atributy (sloupce) tvoří klíč tabulky (jednoznačně určují každý záznam)):
Jmeno |
Prijmeni |
Misto |
Narozen |
Anna |
Nováková |
Plzeň |
1970 |
Jan |
Holub |
Plzeň |
1980 |
Martin |
Knedlík |
Olomouc |
1965 |
Martin |
Holub |
Brno |
1975 |
Jan |
Holub |
Olomouc |
1980 |
V relaci R určete klíč:
Jednoduše řečeno, klíčem nějaké tabulky bereme nejmenší množinu jejích atributů, které jednoznačně určují každý záznam.
Začínáme tedy od jednotlivých sloupců a pokud nenajdeme žádný samostatný sloupec, který by mohl být klíčem, pokračujeme kombinací sloupců až po kombinaci všech sloupců:
- Sloupec Jmeno sám o sobě nemůže být klíčem, protože se nám zde opakuje jméno Jan a jméno Martin.
- Sloupec Prijmeni sám o sobě nemůže být klíčem, protože se nám zde opakuje příjmení Holub.
- Sloupec Misto sám o sobě nemůže být klíčem, protože se nám zde opakuje město Plzeň a město Olomouc.
- Sloupec Narozen sám o sobě nemůže být klíčem, protože se nám zde opakuje rok 1980.
- Kombinace dvou sloupců Jmeno-Prijmeni nemůže být klíčem, protože se nám zde opakuje spojení Jan-Holub.
- Kombinace dvou sloupců Jmeno-Rok nemůže být klíčem, protože se nám zde opakuje spojení Jan-1980.
- Kombinace dvou sloupců Prijmeni-Rok nemůže být klíčem, protože se nám zde opakuje spojení Holub-1980. Toto bylo ukazováno u příkladu 2.
- Kombinace dvou sloupců Jmeno-Misto MŮŽE být klíčem.
- Kombinace dvou sloupců Prijmeni-Misto MŮŽE být klíčem.
- Kombinace dvou sloupců Misto-Rok MŮŽE být klíčem.
Protože jsme nalezli kombinaci dvou sloupců, které mohou tvořit klíč, s dalším hledáním už nepokračujeme. V praxi se takto sloupce většinou nehledají. Kombinace atributů, které budou tvořit klíč nám většinou vyplyne ze zadání úlohy (např. {rodné číslo} u osob nebo {číslo faktury, rok} u faktur apod.).
V relaci R rozhodněte, zda se nachází v 1NF, 2NF a 3NF a proč:
Dejme tomu, že si jako klíč vybereme atributy Jmeno-Misto.
- V 1. normální formě se relace nachází, pokud žádný její atribut není zároveň relací (tabulkou). To není, takže naše relace se nachází v 1.NF.
- V 2. normální formě se relace nachází, jestliže je v 1NF a jestliže každý atribut, který nepatří klíči relace R, silně závisí na klíči R. Například, pokud by u každého jména="Jan" bylo příjmení="Holub" a u každého jména="Martin" bylo příjmení="Knedlík" atd., potom by tabulka nebyla ve 2.NF a my bychom ji rozdělili na dvě, kde v první by zmizel sloupec Prijmeni a druhá tabulka by obsahovala jen sloupce Jmeno-Prijmeni a každou dvojici hodnoty jen jednou. V našem případě tomu tak není ani u atributu Prijmeni ani u atributu Narozen a zároveň je relace v 1.NF, takže naše relace se nachází v 2.NF.
- V 3. normální formě se relace nachází, jestliže je v 2NF a jestliže žádný atribut, který není složkou klíče relace R, není tranzitivně závislý na klíči relace R. V našem případě nám atribut Prijmeni závisí na atributu Narozen, protože pro každou hodnotu atributu Narozen najdeme v atributu Prijmeni stejnou hodnotu (hodnota 1980-Holub). Přitom atribut Prijmeni není součástí klíče, ale silně závisí na klíči. Takže naše relace se NEnachází ve 3.NF. A došlo by k rozpadu na dvě tabulky, které by byli spojeny přes atribut Narozen:
Jmeno |
Misto |
Narozen |
Anna |
Plzeň |
1970 |
Jan |
Plzeň |
1980 |
Martin |
Olomouc |
1965 |
Martin |
Brno |
1975 |
Jan |
Olomouc |
1980 |
|
N:1 |
Narozen |
Prijmeni |
1970 |
Nováková |
1980 |
Holub |
1965 |
Knedlík |
1975 |
Holub |
|
Takže toto spojení dvou relací R (Jmeno, Misto, Narozen) a X (Narozen, Prijmeni) nám již splňuje 1.NF i 2.NF i 3.NF.