Andmebaasi asetamine kolmandasse normaalsesse vormi (3NF)

Kolmas normaalne vorm (3NF) on andmebaasi põhimõte, mis toetab andmete terviklikkust, tuginedes esimese normaalse vormi (1NF) ja teise normaalse vormi (2NF) poolt esitatud andmebaasi normaliseerimispõhimõtetele .

Kolmanda normaalse vormi nõuded

Andmebaasis on kaks põhinõuet, mis peavad olema kolmandas normaalses vormis:

Peamise võtme sõltuvuse kohta

Lähemalt uurime, mida me mõtleme sellepärast, et kõik veerud peavad olema primaarvõti sõltuvad.

Kui veeru väärtust saab tuletada nii põhiväärtus kui ka teine ​​veerg tabelis, rikub see 3NF-i. Mõelge veergudega Töötajate tabel:

Kas nii LastName kui FirstName sõltuvad ainult EmployeeID väärtusest? Noh, kas LastName sõltub Esimene Nimi? Ei, sest Lastname'i olemus ei viita esimese nime väärtusele. Kas FirstName sõltub LastName? Ära jällegi, sest sama on tõsi: ükskõik, milline on LastName, ei pruugi olla eesnimi väärtuse eeskujuks. Seetõttu on see tabel 3NF-i ühilduv.

Kuid pidage seda Sõiduki lauda:

Tootja ja mudel võivad tuletada VehicleID - kuid mudel võiks tuleneda ka tootjalt, sest sõiduki mudelit teeb ainult konkreetne tootja. See laudade disain on mitte-3NF-ile ühilduv ja võib seetõttu põhjustada andmete kõrvalekaldeid. Näiteks võite värskendada tootjat ilma mudeli uuendamata, esitades ebatäpsusi.

Selleks, et teha see nõuetele vastav, peaksime lisama täiendava sõltuva veeru teisaldama teisele tabelile ja viitama sellele välisvõti kasutades. Selle tulemuseks on kaks tabelit:

Sõidukid Tabel

Alljärgnev tabel ModelID on mudelite tabeli välisvõti:

Mudelite tabel

See uus tabel koostab tootjate jaoks mudelid. Kui soovite värskendada mudeli spetsiifilist sõidukiteavet, tehke see pigem käesolevas tabelis kui sõiduki tabelis.

Tuletatud väljad 3NF-mudelil

Tabel võib sisaldada tuletatud välja - üks, mis arvutatakse tabeli teistel veergudel. Näiteks kaaluge vidintellimuste tabelit:

Kokku katkestab 3NF-i vastavuse, sest seda saab tuletada, korrutades ühikuhinna koguse asemel täiesti sõltuva primaarvõtmega. Peame eemaldama selle tabelist kolmanda normaalse vormi täitmiseks.

Tõepoolest, kuna see on tuletatud, on parem mitte hoida seda andmebaasis üldse.

Andmebaasi päringute teostamisel saame lihtsalt arvutada seda "lennata". Näiteks võib-olla kasutasime seda päringut järjekorranumbrid ja kogusummad allalaadimiseks:

SELECT OrderNumber, Total FROM WidgetOrders

Nüüd saame kasutada järgmist päringut:

SELECT OrderNumber, UnitPrice * Kogus AS FROM FROM WidgetOrders kokku

et saavutada samad tulemused ilma normaalsuse reeglite rikkumata.