3.1 Normalizarea bazei de date

Forma normală este o proprietate a unei relații dintr-un model de date relaționale care o caracterizează în termeni de redundanță, ceea ce poate duce la rezultate logic eronate ale eșantionării sau modificării datelor. Forma normală este definită ca setul de cerințe pe care o relație (tabelele dintr-o bază de date) trebuie să le îndeplinească.

Procesul de conversie a relațiilor de baze de date într-o formă care se conformează formelor normale se numește normalizare. Normalizarea are scopul de a aduce structura bazei de date într-o formă care oferă o redundanță logică minimă și nu are scopul de a reduce sau de a crește performanța sau de a reduce sau de a crește volumul fizic al bazei de date .

Scopul final al normalizării este de a reduce potențiala inconsecvență a informațiilor stocate în baza de date. Scopul general al procesului de normalizare este următorul:

  • excluderea anumitor tipuri de redundanță;
  • remediați unele anomalii de actualizare;
  • dezvoltarea unui proiect de bază de date care este o reprezentare suficient de „de înaltă calitate” a lumii reale, este intuitivă și poate servi drept bază bună pentru extinderea ulterioară;
  • simplificarea procedurii de aplicare a constrângerilor de integritate necesare.

Redundanța este de obicei eliminată prin descompunerea relațiilor în așa fel încât în ​​fiecare relație să fie stocate doar fapte primare (adică fapte care nu sunt derivate din alte fapte stocate).

În timp ce ideile de normalizare sunt foarte utile pentru proiectarea bazelor de date, ele nu sunt în niciun caz un mijloc universal sau exhaustiv de îmbunătățire a calității designului unei baze de date. Acest lucru se datorează faptului că există prea multă varietate de posibile erori și deficiențe în structura bazei de date care nu pot fi eliminate prin normalizare.

În ciuda acestor considerații, teoria normalizării este o realizare foarte valoroasă a teoriei și practicii relaționale, deoarece oferă criterii riguroase și rezonabile din punct de vedere științific pentru calitatea unui proiect de bază de date și metode formale de îmbunătățire a acestei calități. Acest lucru face ca teoria normalizării să iasă în evidență față de abordările de proiectare pur empirice care sunt oferite în alte modele de date. Mai mult, se poate susține că în întregul domeniu al tehnologiei informației nu există practic metode de evaluare și îmbunătățire a soluțiilor de proiectare care să fie comparabile cu teoria normalizării bazelor de date relaționale din punct de vedere al nivelului de rigoare formală.

Normalizarea este uneori criticată pe motiv că „este doar bunul simț” și orice profesionist competent va proiecta „în mod natural” o bază de date complet normalizată, fără a fi nevoit să aplice teoria dependenței.

Cu toate acestea, așa cum a remarcat profesorul Christopher Date, normalizarea sunt tocmai principiile bunului simț care ghidează un designer matur în mintea sa, adică principiile normalizării sunt formalizate de bunul simț . Între timp, identificarea și formalizarea principiilor bunului simț este o sarcină foarte dificilă, iar succesul în rezolvarea acesteia este o realizare semnificativă.

3.2 Prima formă normală

Prima formă normală (1NF) este forma normală de bază a unei relații în modelul de date relaționale.

O variabilă de relație este în prima formă normală dacă și numai dacă, în orice valoare validă a acelei variabile, fiecare tuplu de relație conține exact o valoare pentru fiecare dintre atribute.

Într-un model relațional, o relație este întotdeauna în prima formă normală, prin definiția conceptului de relație.

În ceea ce privește diferitele tabele, este posibil să nu fie reprezentări corecte ale relațiilor și, în consecință, pot să nu fie în 1NF. Conform definiției lui Christopher Date pentru un astfel de caz, un tabel este normalizat (în mod echivalent, este în prima formă normală) dacă și numai dacă este o reprezentare directă și adevărată a unei relații. Mai precis, tabelul în cauză trebuie să îndeplinească următoarele cinci condiții:

  • Nu există o ordonare a rândurilor de sus în jos (cu alte cuvinte, ordinea rândurilor nu transmite nicio informație).
  • Nu există o ordonare de la stânga la dreapta a coloanelor (cu alte cuvinte, ordinea coloanelor nu conține informații).
  • Fără linii duplicate.
  • Fiecare intersecție a unui rând și a unei coloane conține exact o valoare din domeniul corespunzător (și nimic altceva).
  • Toate coloanele sunt „regulate”.

„Regularitatea” tuturor coloanelor unui tabel înseamnă că nu există componente „ascunse” în tabel care să poată fi accesate doar prin invocarea unui operator special în loc să se refere la nume de coloane obișnuite sau care să ducă la efecte secundare pentru rânduri sau tabele la invocarea operatorilor standard.

Tabelul original nenormalizat (adică nu este o reprezentare corectă a unei relații):

Angajat Număr de telefon
Ivanov I.I.

283-56-82

390-57-34

Petrov P.P. 708-62-34
Sidorov S.S.

Un tabel redus la 1NF, care este reprezentarea corectă a unei relații:

Angajat Număr de telefon
Ivanov I.I. 283-56-82
Ivanov I.I. 390-57-34
Petrov P.P. 708-62-34

3.3 A doua formă normală

O variabilă de relație este în a doua formă normală dacă și numai dacă este în prima formă normală și fiecare atribut non-cheie este dependent ireductibil de (fiecare) cheie candidată .

Ireductibilitatea înseamnă că potențiala cheie nu conține un subset mai mic de atribute din care poate fi derivată și această dependență funcțională. Pentru o dependență funcțională ireductibilă, este adesea folosit conceptul echivalent de „dependență funcțională completă”.

Dacă cheia candidată este simplă, adică constă dintr-un singur atribut, atunci orice dependență funcțională de aceasta este ireductibilă (completă). Dacă cheia candidată este o cheie compusă, atunci, conform definiției celei de-a doua forme normale, nu trebuie să existe atribute non-cheie în relație care să depindă de o parte a cheii candidate compuse.

Un exemplu de conversie a unei relații la a doua formă normală

Perechea de atribute {Company branch, Position} formează cheia primară în următoarea relație:

R
Filiala companiei Denumirea funcției Salariu Disponibilitatea unui calculator
Filiala din Tomsk Curățător 20000 Nu
Filiala din Moscova Programator 40000 Mânca
Filiala din Tomsk Programator 25000 Mânca

Sa zicem ca salariul depinde de ramura si post, iar disponibilitatea unui calculator depinde doar de post.

Există o dependență funcțională Poziție -> Având un computer, în care partea stângă (determinantul) este doar o parte a cheii primare, ceea ce încalcă condiția celei de-a doua forme normale.

Pentru a reduce la 2NF, relația inițială ar trebui să fie descompusă în două relații:

R1
Filiala companiei Denumirea funcției Salariu
Filiala din Tomsk Curățător 20000
Filiala din Moscova Programator 40000
Filiala din Tomsk Programator 25000
R2
Denumirea funcției Disponibilitatea unui calculator
Curățător Nu
Programator Mânca
Programator Mânca

3.4 A treia formă normală (3NF)

O variabilă de relație R este în 3NF dacă și numai dacă sunt adevărate următoarele condiții:

  • Reste în a doua formă normală.
  • nici un atribut non-cheieRnu este în dependență funcțională tranzitivă de cheia candidatăR.

Explicații pentru definiție:

Un atribut non-cheie al unei relații R este un atribut care nu aparține niciunei dintre cheile candidate ale lui R.

Dependența funcțională a mulțimii de atribute Z de mulțimea de atribute X (scris X → Z, pronunțat „x determină z”) este tranzitivă dacă există un astfel de set de atribute Y încât X → Y și Y → Z. În acest caz, niciuna dintre mulțimile X, Y și Z nu este o submulțime a celeilalte, adică dependențele funcționale X → Z, X → Y și Y → Z nu sunt triviale și, de asemenea, nu există nicio dependență funcțională Y → X.

O definiție a 3NF, echivalentă cu cea a lui Codd, dar formulată diferit, a fost dată de Carlo Zaniolo în 1982. Potrivit acesteia, o variabilă de relație este în 3NF dacă și numai dacă fiecare dintre dependențele sale funcționale X → A îndeplinește cel puțin una dintre următoarele condiții:

  • X conține A (adică X → A este o dependență funcțională trivială)
  • X - super-cheie
  • A este un atribut cheie (adică A face parte dintr-o cheie candidată).

Definiția lui Zaniolo definește clar diferența dintre 3NF și forma normală Boyce-Codd (BCNF) mai strictă: BCNF exclude a treia condiție ("A este un atribut cheie").

Un rezumat memorabil și tradițional descriptiv al definiției lui Codd 3NF a fost oferit de Bill Kent: fiecare atribut non-cheie „ar trebui să ofere informații despre cheie, cheia completă și nimic altceva decât cheia ”.

Condiția de a depinde de „cheia completă” a atributelor non-cheie asigură că relația este în a doua formă normală; iar condiția ca aceștia să depindă de „nimic decât cheia” este ca ei să fie în a treia formă normală.

Chris Date vorbește despre rezumatul lui Kent ca fiind o „trăsătură intuitivă atractivă” a 3NF și observă că, cu o ușoară modificare, poate servi și ca definiție a formei normale Boyce-Codd mai stricte: „fiecare atribut trebuie să ofere informații despre o cheie. , o cheie plină și nimic altceva decât cheia.

Versiunea lui Kent a definiției 3NF este mai puțin strictă decât versiunea normală Boyce-Codd a formulării Data, deoarece prima afirmă doar că atributele non-cheie depind de chei.

Atributele primare (care sunt chei sau părți ale acestora) nu trebuie să fie deloc dependente funcțional; fiecare dintre ele oferă informații despre cheie prin furnizarea cheii în sine sau a unei părți a acesteia. Trebuie remarcat aici că această regulă este valabilă numai pentru atributele non-cheie, deoarece aplicarea ei tuturor atributelor va dezactiva complet toate cheile alternative complexe, deoarece fiecare element al unei astfel de chei va încălca condiția „cheie completă”.

Luați în considerare variabila relație R1 ca exemplu:

R1
Angajat Departament Telefon
Grishin Contabilitate 11-22-33
Vasiliev Contabilitate 11-22-33
Petrov Livra 44-55-66

Fiecare angajat aparține exclusiv unui departament; fiecare departament are un singur telefon. Atributul Angajat este cheia primară. Angajații nu au telefoane personale, iar numărul de telefon al angajatului depinde exclusiv de departament.

În exemplu, există următoarele dependențe funcționale: Angajat → Departament, Departament → Telefon, Angajat → Telefon.

Variabila de relație R1 este în a doua formă normală deoarece fiecare atribut are o dependență funcțională ireductibilă de potențialul Angajat cheie.

Relația Angajat → Telefon este tranzitivă, deci relația nu este în a treia formă normală.

Împărțirea R1 are ca rezultat două variabile de relație care sunt în 3NF:

R2
Departament Telefon
Contabilitate 11-22-33
Livra 44-55-66

R3
Angajat Departament
Grishin Contabilitate
Vasiliev Contabilitate
Petrov Livra

Relația inițială R1, dacă este necesar, se obține ușor ca urmare a operației de unire a relațiilor R2 și R3.