2.4.3 Näide andmete normaliseerimiseks

Vältimaks andmete liiasust, võib kasutada protsessi, mis püüab muuta andmebaasi struktuuri, sundides tabelit läbima kolme järjestikust normaalkuju.
Esimene
normaalkuju (1NF): öeldakse, et tabel on esimesel normaalkujul, kui see
kirjeldab ühte olemit ja ei sisalda vektoreid või korduvaid atribuute.
Vaatleme näiteks tabelit, mis sisaldab ühe kursuse tundide andmeid. Iga tunni
rea jaoks on kood, õpetaja ja õpilase andmed. See tabel ei ole esimesel
normaalkujul, kuna õpilase andmed on vektor, mis vastab tunnile.
Ainekood |
Aine |
Õpetaja |
Õpilase kood |
Õpilase perekonnanimi |
Õpilase nimi |
A01 |
Kavandamine |
Lind |
S01 |
Rooväli |
Marek |
|
|
|
S02 |
Peterson |
Maria |
|
|
|
S03 |
Martson |
Ella |
A02 |
Loomine |
Sepp |
S02 |
Peterson |
Maria |
|
|
|
S03 |
Martson |
Ella |
Täpsem olles, on iga tund seotud rohkem kui ühe õpilasega ja see on väljendatud öeldes, et on olemas õpilaste vektor (rühm õpilasi) igas tunnis. Selle tabeli esimesele normaalkujule viimiseks on vaja lahutada õpilaste andmed ja tunnid, luues uue õpilaste tabeli. Tundide tabelis on niipalju ridu, kui on erinevaid tunde, ainete nimekirja kantud õpilaste tabelis on niipalju ridu, kui sellele ainele on õpilasi registreerunud ja iga õpilane peaks seal esindatud olema rohkem kui üks kord. Selles tabelis peaks olema ka täiendav veerg tunni koodiga, millele õpilane on end registreerinud.
Tunnid |
|
Aine |
Õpetaja |
Kavandamine |
Lind |
Loomine |
Sepp |
Registreerunud õpilased |
|||
Ainekood |
Õpilase kood |
Õpilase perenimi |
Õpilase eesnimi |
A01 |
S01 |
Rooväli |
Marek |
A01 |
S02 |
Peterson |
Maria |
A01 |
S03 |
Martson |
Ella |
A02 |
S02 |
Peterson |
Maria |
A02 |
S03 |
Martson |
Ella |
Teine
normaalkuju (2 NF): tabel on teisel normaalkujul, kui ta on esimesel
normaalkujul ja kõik atribuudid sõltuvad ainult primaarvõtmest.
Vaadates eelmist tabelit "Registreerunud õpilased", peaks
primaarvõti, mis on vajalik eristamaks ridu üksteisest, koosnema ainekoodist +
õpilase koodist. Võib märgata, et õpilase eesnimi ja perekonnanimi sõltuvad
ainult õpilase koodist ja mitte kogu primaarvõtmest.
Viimaks tabelit teisele normaalkujule, peame välja võtma andmed, mis ei ole täielikult sõltuvad primaarvõtmest ja lisama need andmed uude tabelisse "õpilased". Tasub tähele panna, et informatsiooni kaotust ei teki, kuna veerg õpilase kood on olemas mõlemas tabelis ja lubab nende tabelite vastastikust suhet.
Registreerunud õpilased |
|
Õpilased |
|||
Ainekood |
Õpilase kood |
|
Õpilase kood |
Õpilase perenimi |
Õpilase eesnimi |
A01 |
S01 |
|
S01 |
Rooväli |
Marek |
A01 |
S02 |
|
S02 |
Peterson |
Maria |
A01 |
S03 |
|
S03 |
Martson |
Ella |
A02 |
S02 |
|
|
|
|
A02 |
S03 |
|
|
|
|
Kolmas normaalkuju (3 NF): tabel on kolmandal normaalkujul, kui ta on teisel normaalkujul ja kõik tema atribuudid, mis pole seotud primaarvõtmega on üksteisest sõltumatud.
Vaadake õpilaste tabelit, mis sisaldavad isikuandmed nagu näiteks järgmine tabel.
Õpilased |
|||||
Kood |
Perenimi |
Eesnimi |
Sünniaeg |
Vanus |
Viimati uuendatud |
S01 |
Rooväli |
Marek |
11.09.1955 |
50 |
12.11.2001 |
S02 |
Peterson |
Maria |
01.02.1990 |
14 |
15.12.2004 |
S03 |
Martson |
Ella |
09.06.1978 |
26 |
26.01.2005 |
Selles tabelis olevat vanust võib arvutada sünnikuupäeva kaudu ja seepärast on see informatsioon liiane, selle puuduse võib aga lihtsalt kõrvaldada viies õpilaste tabeli vastavusse kolmanda normaalkujuga.
Tunnid |
||||
Ainekood |
Aine |
Õpetaja |
Istekohti ruumis |
Vabu kohti |
A01 |
Kavandamine |
Lind |
5 |
2 |
A02 |
Loomine |
Sepp |
6 |
4 |