Skip navigation

Példa: Taxis adatbázis

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.

Tehát a {rendszám} → {gépkocsiTípus, forgalmiLejár}, valamint {sofőrTelefon} → { sofőrNév, sofőrLakcím} függés mentén fel lehet bontani a sémát.

Gépkocsi (rendszám, gépkocsiTípus, forgalmiLejár)
Sofőr (sofőrTelefon, sofőrNév, sofőrLakcím)
Fuvar2 ( rendszám, indulásiIdő, indulásiCím, megtettKm, sofőrTelefon)

3NF

A sémák 3NF-ben vannak, mert minden másodlagos attribútum közvetlenül a kulcstól függ, nincs tranzitív függés.

BCNF

A sémák már BCNF-ben is vannak, de ha egy lépést 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.

Végeredmény

A normalizált adatbázis a következő:

Sofőr (sofőrTelefon, sofőrNév, sofőrLakcím)
Gépkocsi2 (rendszám, gépkocsiTípus, forgalmiLejár, )
Fuvar2 (rendszám, indulásiIdőpont, indulásiCím, megtettKm, sofőrTelefon)