2.4.3 Näide andmete normaliseerimiseks

iDevice ikoon 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

Mõnikord pole sõltuvust lihtne tuvastada. Vaatame "tunnid" tabelit, mis ka registreerib iga tunni võimaliku kohtade arvu. Vabade kohtade arvu võib arvutada, kui lahutada registreerunud õpilaste arv ruumi kohtade arvust. Veerg "Vabu kohti" tuleks tabelist kõrvaldada, et viia tabel vastavusse kolmanda normaalkujuga.