Taxis adatbázis
Egy taxitársaság az alábbi táblázatban tartja nyilván a fuvarokat. A gépkocsikat mindig ugyanaz a sofőr vezeti, nincs olyan, hogy átadják egymásnak a járműveket, azt is feltesszük, hogy egy soförnek egy telefonszáma van.
Határozzuk meg a kulcsokat az alábbi relációsémában és hozzuk 1NF, 2NF és 3NF normálformákra!
Fuvar ( rendszám, gépkocsiTipus, műszakiLejár, sofőrNév, sofőrLakcím, sofőrTelefon, indulásiIdő, indulásiCím, megtettKm)
{rendszám} → {gépkocsiTípus, műszakiLejár, sofőrNév, sofőrLakcím, sofőrTelefon}
{rendszám, indulásiIdő} → {indulásiCím, megtettKm}
{sofőrTelefon} → {sofőrNév, sofőrLakcím, rendszám}
Kulcsok meghatározása
{rendszám}+ = {gépkocsiTípus, műszakiLejár, sofőrNév, sofőrLakcím, sofőrTelefon}
{rendszám, indulásiIdő}+ = {gépkocsiTípus, műszakiLejár, sofőrNév, sofőrLakcím, sofőrTelefon, indulásiCím, meggtettKm}
{sofőrTelefon}+ = {rendszám, gépkocsiTípus, műszakiLejár, sofőrNév, sofőrLakcím}
{sofőrTelefon, indulásiIdő}+ = {gépkocsiTípus, műszakiLejár, sofőrNév, sofőrLakcím, rendszám, indulásiCím, meggtettKm}
Láthatjuk, hogy a {rendszám, indulásiIdő}, {sofőrTelefon, indulásiIdő} halmazok tranzitív lezártjai visszaadják a teljes attribútumhalmazt, így azok megfelelő kulcsok lesznek. Ezen halmazok közül bármelyiket választhatjuk elsődleges kulcsnak:
Fuvar ( rendszám, gépkocsiTipus, műszakiLejár, sofőrNév, sofőrLakcím, sofőrTelefon, indulásiIdő, indulásiCím, megtettKm)
1NF
Minden attribútum atomi, nincs a sémában sem többértékű, sem pedig összetett attribútum, így a séma 1NF-ben van.
2NF
A kulcs attribútumok a {rendszám,indulásiIdő}, {sofőrTelefon,indulásiIdő}, így ezek az elsődleges attribútumok.
A másodlagos attribútumokat vizsgálva meg kell nézni, hogy egy másodlagos attribútum tényleg ezektől a halmazoktól függ, vagy ezeknek a halmazoknak egy valódi részhalmazától. Az autóra vonatkozó adatok és a sofőr személyes adatai nem függnek például az indulási időponttól.
Mivel {rendszám} → {gépkocsiTípus, műszakiLejár, sofőrTelefon, sofőrNév, sofőrLakcím} függőségben a gépkocsi adatok és a sofőr adatok is függnek a rendszámtól, ezért ezek külön sémába kerülnek át.
Gépkocsi(rendszám, gépkocsiTípus, múszakiLejár, sofőrTelefon, sofőrNév, sofőrLakcím)
Fuvar2( rendszám, indulásiIdő, indulásiCím, megtettKm, sofőrTelefon)
Ne feledjük, hogy a Fuvar2 sémában {rendszám, indulásiIdő} és {sofőrTelefon, indulásiIdő} is kulcs, ezek nem szakadhatnak szét.
3NF
A sémák 3NF-ben vannak.
BCNF
A sémák már BCNF-ben is vanna, de ha egy lépés visszalépünk, akkor a BCNF-re is hozhatjuk a sémákat.
A Sofőr séma BCNF-ben van, mert a {sofőrTelefon} →{sofőrNév, sofőrLakcím} függés nemtriviális és a sofőrTelefon szuperkulcs.
A Gépkocsi séma BCNF-ben van, mert a {rendszám} →{gépkocsiTípus, forgalmiLejár, sofőrTelefon} függés nemtriviális és a rendszám szuperkulcs.
A Fuvar2 séma BCNF-ben van, mert a {rendszám, indulásiIdőpont} →{indulásiCím, megtettKm} függés nemtriviális és a {rendszám, indulásiIdőpont} szuperkulcs.