database normalization tutorial
Acest tutorial va explica ce este normalizarea bazei de date și diferite forme normale, cum ar fi 1NF 2NF 3NF și BCNF cu exemple de cod SQL:
Normalizarea bazei de date este o tehnică bine cunoscută utilizată pentru proiectarea schemei de baze de date.
Scopul principal al aplicării tehnicii de normalizare este de a reduce redundanța și dependența datelor. Normalizarea ne ajută să împărțim tabelele mari în mai multe tabele mici, definind o relație logică între acele tabele.
Ce veți învăța:
- Ce este normalizarea bazei de date?
- Concluzie
Ce este normalizarea bazei de date?
Normalizarea bazei de date sau normalizarea SQL ne ajută să grupăm datele aferente într-un singur tabel. Orice date atributive sau date conexe indirect sunt plasate în diferite tabele și aceste tabele sunt conectate cu o relație logică între tabelele părinte și copil.
În 1970, Edgar F. Codd a venit cu conceptul de normalizare. El a împărtășit o lucrare numită „Un model relațional de date pentru băncile mari partajate” în care a propus „First Normal Form (1NF)”.
Avantajele normalizării SGBD
Normalizarea bazei de date oferă următoarele avantaje de bază:
- Normalizarea crește consistența datelor, deoarece evită duplicitatea datelor stocând datele într-un singur loc.
- Normalizarea ajută la gruparea datelor similare sau conexe în aceeași schemă, rezultând astfel o grupare mai bună a datelor.
- Normalizarea îmbunătățește căutarea mai rapidă, deoarece indexurile pot fi create mai repede. Prin urmare, baza de date sau tabelul normalizat este utilizat pentru OLTP (Online Transaction Processing).
Dezavantaje ale normalizării bazei de date
Normalizarea SGBD are următoarele dezavantaje:
- Nu putem găsi datele asociate pentru, să spunem un produs sau un angajat într-un singur loc și trebuie să ne alăturăm mai multor tabele. Acest lucru determină o întârziere în recuperarea datelor.
- Astfel, Normalizarea nu este o opțiune bună în tranzacțiile OLAP (Procesare analitică online).
Înainte de a continua, să înțelegem următorii termeni:
- Entitate: Entitatea este un obiect din viața reală, în care datele asociate unui astfel de obiect sunt stocate în tabel. Exemplul unor astfel de obiecte sunt angajații, departamentele, studenții etc.
- Atribute: Atributele sunt caracteristicile entității, care oferă unele informații despre entitate. De exemplu, dacă tabelele sunt entități, atunci coloanele sunt atributele lor.
Tipuri de forme normale
# 1) 1NF (Prima formă normală)
Prin definiție, o entitate care nu are coloane sau grupuri de date repetate poate fi denumită Primul formular normal. În prima formă normală, fiecare coloană este unică.
Iată cum ar fi arătat tabelul angajaților și departamentului nostru dacă în prima formă normală (1NF):
empNum | numele de familie | Nume | deptName | deptCity | deptCountry |
---|---|---|---|---|---|
1001 | Andrews | Jack | Conturi | New York | Statele Unite |
1002 | Schwatz | Mike | Tehnologie | New York | Statele Unite |
1009 | ceașcă | Harry | HR | Berlin | Germania |
1007 | Harvey | Parker | Administrator | Londra | Regatul Unit |
1007 | Harvey | Parker | HR | Londra | Regatul Unit |
Aici, toate coloanele atât ale angajaților, cât și ale tabelelor Departamentului au fost împărțite într-una și nu este nevoie de conectarea coloanelor, cum ar fi deptNum, deoarece toate datele sunt disponibile într-un singur loc.
Dar un tabel ca acesta, cu toate coloanele necesare, ar fi nu numai dificil de gestionat, ci și dificil de efectuat operațiuni și, de asemenea, ineficient din punct de vedere al stocării.
# 2) 2NF (a doua formă normală)
Prin definiție, o entitate care este 1NF și unul dintre atributele sale este definită ca cheie primară, iar atributele rămase sunt dependente de cheia primară.
Următorul este un exemplu de cum ar arăta angajații și tabelul departamentului:
Tabelul angajaților:
empNum | numele de familie | Nume |
---|---|---|
1001 | Andrews | Jack |
1002 | Schwatz | Mike |
1009 | ceașcă | Harry |
1007 | Harvey | Parker |
1007 | Harvey | Parker |
Tabelul departamentelor:
deptNum | deptName | deptCity | deptCountry |
---|---|---|---|
1 | Conturi | New York | Statele Unite |
Două | Tehnologie | New York | Statele Unite |
3 | HR | Berlin | Germania |
4 | Administrator | Londra | Regatul Unit |
Tabelul EmpDept:
empDeptID | empNum | deptNum |
---|---|---|
1 | 1001 | 1 |
Două | 1002 | Două |
3 | 1009 | 3 |
4 | 1007 | 4 |
5 | 1007 | 3 |
Aici, putem observa că am împărțit tabelul în formă 1NF în trei tabele diferite. tabelul Angajaților este o entitate despre toți angajații unei companii și atributele sale descriu proprietățile fiecărui angajat. Cheia principală pentru acest tabel este empNum.
În mod similar, tabelul Departamente este o entitate despre toate departamentele dintr-o companie și atributele sale descriu proprietățile fiecărui departament. Cheia principală pentru acest tabel este deptNum.
În al treilea tabel, am combinat cheile primare ale ambelor tabele. Cheile principale ale tabelelor Angajați și Departamente sunt denumite chei străine în acest al treilea tabel.
Dacă utilizatorul dorește o ieșire similară cu cea pe care am avut-o în 1NF, atunci utilizatorul trebuie să se alăture tuturor celor trei tabele, folosind cheile principale.
Un exemplu de interogare ar arăta așa cum se arată mai jos:
SELECT empNum, lastName, firstName, deptNum, deptName, deptCity, deptCountry FROM Employees A, Departments B, EmpDept C WHERE A.empNum = C.empNum AND B.deptNum = C.deptNum WITH UR;
# 3) 3NF (a treia formă normală)
Prin definiție, o tabelă este considerată a treia normală dacă tabelul / entitatea se află deja în a doua formă normală și coloanele tabelului / entității nu depind tranzitiv de cheia primară.
Să înțelegem dependența netransitivă, cu ajutorul exemplului următor.
Spuneți un tabel numit, Clientul are coloanele de mai jos:
Număr de înregistrare client - Cheia primară care identifică un client unic
ClientZIP - Codul poștal al localității în care locuiește clientul
CustomerCity - Orașul în care locuiește clientul
În cazul de mai sus, coloana CustomerCity este dependentă de coloana CustomerZIP, iar coloana CustomerZIP este dependentă de CustomerID.
Scenariul de mai sus se numește dependență tranzitivă a coloanei CustomerCity de CustomerID, adică cheia primară. După ce înțelegem dependența tranzitivă, acum să discutăm problema acestei dependențe.
Ar putea exista un posibil scenariu în care se face o actualizare nedorită a tabelului pentru actualizarea CustomerZIP la un cod poștal din alt oraș fără a actualiza CustomerCity, lăsând astfel baza de date într-o stare inconsistentă.
Pentru a remedia această problemă, trebuie să eliminăm dependența tranzitivă care ar putea fi realizată prin crearea unui alt tabel, să zicem, tabelul CustZIP care conține două coloane, adică CustomerZIP (ca cheie primară) și CustomerCity.
Coloana CustomerZIP din tabelul Customer este o cheie externă pentru CustomerZIP din tabelul CustZIP. Această relație asigură că nu există nicio anomalie în actualizările în care un CustomerZIP este actualizat fără a face modificări în CustomerCity.
# 4) Boyce-Codd Formă normală (3,5 Formă normală)
Prin definiție, tabelul este considerat formă normală Boyce-Codd, dacă este deja în a treia formă normală și pentru fiecare dependență funcțională între A și B, A ar trebui să fie o super cheie.
Această definiție sună cam complicată. Să încercăm să o rupem pentru a o înțelege mai bine.
- Dependență funcțională: Se spune că atributele sau coloanele unui tabel sunt funcțional dependente atunci când un atribut sau o coloană a unui tabel identifică în mod unic un alt atribut (e) sau coloană (e) din același tabel.
De exemplu, coloana empNum sau Numărul angajaților identifică în mod unic celelalte coloane precum numele angajatului, salariul angajaților etc. din tabelul angajaților. - Super cheie: O singură cheie sau un grup de chei multiple care ar putea identifica în mod unic un singur rând dintr-un tabel poate fi denumită Super Cheie. În termeni generali, cunoaștem astfel de chei precum Chei compozite.
Să luăm în considerare următorul scenariu pentru a înțelege când există o problemă cu a treia formă normală și cum vine Boyce-Codd Forma normală de salvare.
empNum | Nume | empCity | deptName | deptHead |
---|---|---|---|---|
1001 | Jack | New York | Conturi | Raymond |
1001 | Jack | New York | Tehnologie | Donald |
1002 | Harry | Berlin | Conturi | Samara |
1007 | Parker | Londra | HR | Elizabeth |
1007 | Parker | Londra | Infrastructură | Tom |
În exemplul de mai sus, angajații cu empNum 1001 și 1007 lucrează în două departamente diferite. Fiecare departament are un șef de departament. Pot fi mai mulți șefi de departament pentru fiecare departament. Ca și pentru departamentul de conturi, Raymond și Samara sunt cei doi șefi de departamente.
În acest caz, empNum și deptName sunt super chei, ceea ce implică faptul că deptName este un atribut primar. Pe baza acestor două coloane, putem identifica fiecare rând unic.
De asemenea, deptName depinde de deptHead, ceea ce implică faptul că deptHead este un atribut non-prime. Acest criteriu descalifică tabelul pentru a face parte din BCNF.
Pentru a rezolva acest lucru, vom împărți tabelul în trei tabele diferite, după cum se menționează mai jos:
Tabelul angajaților:
empNum | Nume | empCity | deptNum |
---|---|---|---|
1001 | Jack | New York | D1 |
1001 | Jack | New York | D2 |
1002 | Harry | Berlin | D1 |
1007 | Parker | Londra | D3 |
1007 | Parker | Londra | D4 |
Tabelul departamentului:
deptNum | deptName | deptHead |
---|---|---|
D1 | Conturi | Raymond |
D2 | Tehnologie | Donald |
D1 | Conturi | Samara |
D3 | HR | Elizabeth |
D4 | Infrastructură | Tom |
# 5) A patra formă normală (4 forme normale)
Prin definiție, un tabel este în a patra formă normală, dacă nu are două sau mai multe date independente care descriu entitatea relevantă.
# 6) A cincea formă normală (5 forme normale)
Un tabel poate fi luat în considerare în a cincea formă normală numai dacă îndeplinește condițiile pentru a patra formă normală și poate fi împărțit în mai multe tabele fără pierderea datelor.
Întrebări și răspunsuri frecvente
Q # 1) Ce este normalizarea într-o bază de date?
Răspuns: Normalizarea bazei de date este o tehnică de proiectare. Folosind acest lucru putem proiecta sau reproiecta scheme în baza de date pentru a reduce datele redundante și dependența datelor prin divizarea datelor în tabele mai mici și mai relevante.
Q # 2) Care sunt diferitele tipuri de normalizare?
Răspuns: Următoarele sunt diferitele tipuri de tehnici de normalizare care pot fi utilizate pentru a proiecta scheme de baze de date:
- Prima formă normală (1NF)
- A doua formă normală (2NF)
- A treia formă normală (3NF)
- Forma normală Boyce-Codd (3.5NF)
- A patra formă normală (4NF)
- A cincea formă normală (5NF)
Î # 3) Care este scopul normalizării?
descărcați sunet de înaltă calitate de pe YouTube
Răspuns: Scopul principal al normalizării este de a reduce redundanța datelor, adică datele trebuie stocate o singură dată. Aceasta este pentru a evita orice anomalie a datelor care ar putea apărea atunci când încercăm să stocăm aceleași date în două tabele diferite, dar modificările se aplică numai unuia și nu celuilalt.
Q # 4) Ce este denormalizarea?
Răspuns: Denormalizarea este o tehnică de creștere a performanței bazei de date. Această tehnică adaugă date redundante în baza de date, spre deosebire de baza de date normalizată care elimină redundanța datelor.
Acest lucru se face în baze de date imense în care executarea unui JOIN pentru a obține date de la mai multe tabele este o afacere costisitoare. Astfel, datele redundante sunt stocate în mai multe tabele pentru a evita operațiile JOIN.
Concluzie
Până acum, am trecut cu toții prin trei forme de normalizare a bazelor de date.
Teoretic, există forme mai mari de normalizări ale bazelor de date, cum ar fi Boyce-Codd Normal Form, 4NF, 5NF. Cu toate acestea, 3NF este formularul de normalizare utilizat pe scară largă în bazele de date de producție.
Lectura placuta!!
Lectură recomandată
- Testarea bazei de date cu JMeter
- MongoDB Creați o copie de rezervă a bazei de date
- Tutorial MongoDB Create Database
- Top 10 instrumente de proiectare a bazelor de date pentru a construi modele de date complexe
- Performanță MongoDB: performanță de blocare, erori de pagină și profil de baze de date
- Altibase Open Source Relational Database Review
- Profilator de baze de date MongoDB pentru monitorizarea interogărilor și performanței
- Cum se testează baza de date Oracle