Punerea unei baze de date în a treia formă normală (3NF)

Forma 3 normală (3NF) este un principiu de bază de date care susține integritatea datelor bazându-se pe principiile normalizării bazei de date furnizate de First Normal Form (1NF) și Second Normal Form (2NF).

A treia cerință privind forma normală

Există două cerințe de bază pentru ca o bază de date să se afle în a treia formă normală:

Despre dependența de cheia primară

Să explorăm în continuare ceea ce înțelegem prin faptul că toate coloanele trebuie să depindă de cheia primară.

Dacă valoarea unei coloane poate fi derivată atât din cheia primară, cât și din altă coloană din tabel, aceasta încalcă 3NF. Luați în considerare un tabel Employees cu aceste coloane:

Atât numele LastName cât și FirstName depind numai de valoarea angajatuluiID? Poate numele LastName depinde de FirstName? Nu, pentru că nimic inerent în LastName nu ar sugera valoarea FirstName. Ar putea Prima Nume să depindă de LastName? Nu din nou, pentru că același lucru este adevărat: oricare ar fi un nume de nod, nu ar putea oferi un indiciu cu privire la valoarea FirstName. Prin urmare, acest tabel este compatibil cu 3NF.

Dar luați în considerare acest tabel Vehicule:

Producătorul și Modelul ar putea să provină din VehicleID - dar modelul ar putea proveni și de la producător, deoarece un model de vehicul este fabricat numai de un anumit producător. Acest model de tabelă nu respectă standardul 3NF și, prin urmare, poate duce la anomalii de date. De exemplu, este posibil să actualizați producătorul fără actualizarea modelului, introducând inexactități.

Pentru a face acest lucru compatibil, ar trebui să mutăm coloana suplimentară dependentă într-o altă tabelă și să o referim folosind o cheie străină. Acest lucru ar duce la două tabele:

Tabelul vehiculelor

În tabelul de mai jos, ModelID este o cheie străină a tabelului Modele :

Modele tabel

Acest nou tabel hartă modele pentru producători. Dacă doriți să actualizați orice informații despre vehicul specifice unui model, veți face acest lucru în acest tabel, și nu în tabelul Vehicule.

Câmpuri derivate din modelul 3NF

Un tabel poate conține un câmp derivat - unul care este calculat pe baza altor coloane din tabel. De exemplu, luați în considerare acest tabel de comenzi widget:

Totalul încalcă conformitatea cu 3NF, deoarece poate fi derivată prin înmulțirea prețului unitar cu cantitatea, în loc să fie complet dependentă de cheia primară. Trebuie să o eliminăm din masă pentru a se conforma celui de-al treilea formular normal.

De fapt, din moment ce este derivat, este mai bine să nu-l stocați deloc în baza de date.

Putem calcula pur și simplu "în zbor" atunci când efectuează interogări de bază de date. De exemplu, s-ar putea să fi utilizat anterior această interogare pentru a prelua numerele de ordine și totalurile:

SELECT OrderNumber, Total FROM WidgetOrders

Acum putem folosi următoarea interogare:

SELECT Număr de ordine, UnitPrice * Cantitate AS Total FROM WidgetOrders

pentru a obține aceleași rezultate fără a încălca normele de normalizare.