Normalizare DBMS: Exemplu de bază de date 1NF, 2NF, 3NF
Ce este normalizarea bazelor de date?
Normalizare este o tehnică de proiectare a bazelor de date care reduce redundanța datelor și elimină caracteristicile nedorite precum Anomaliile de inserare, actualizare și ștergere. Regulile de normalizare împart tabele mai mari în tabele mai mici și le leagă folosind relații. Scopul Normalizării în SQL este de a elimina datele redundante (repetitive) și de a asigura stocarea logică a datelor.
Inventatorul inventatorului model relațional Edgar Codd a propus teoria normalizării datelor cu introducerea primei forme normale și a continuat să extindă teoria cu a doua și a treia formă normală. Later s-a alăturat lui Raymond F. Boyce pentru a dezvolta teoria formei normale Boyce-Codd.
Tipuri de forme normale în DBMS
Iată o listă de forme normale în SQL:
- 1NF (prima formă normală): Se asigură că tabelul bazei de date este organizat astfel încât fiecare coloană să conțină valori atomice (indivizibile) și fiecare înregistrare este unică. Acest lucru elimină grupurile repetate, structurând astfel datele în tabele și coloane.
- 2NF (a doua formă normală): Se bazează pe 1NF de Trebuie să eliminăm datele redundante dintr-un tabel care este aplicat pe mai multe rânduri. și așezându-le în mese separate. Necesită ca toate atributele non-cheie să fie complet funcționale pe cheia primară.
- 3NF (a treia formă normală): Extinde 2NF, asigurându-se că toate atributele non-cheie nu numai că sunt complet funcționale pe cheia primară, ci și independente unele de altele. Acest lucru elimină dependența tranzitivă.
- BCNF (Forma normală Boyce-Codd): O perfecționare a 3NF care abordează anomaliile care nu sunt gestionate de 3NF. Este necesar ca fiecare determinant să fie o cheie candidată, asigurând o respectare și mai strictă a regulilor de normalizare.
- 4NF (a patra formă normală): Se adresează dependențelor cu valori multiple. Acesta asigură că într-o înregistrare nu există mai multe fapte independente cu mai multe valori despre o entitate.
- 5NF (a cincea formă normală): Cunoscută și sub denumirea de „Projection-Join Normal Form” (PJNF), se referă la reconstrucția informațiilor din bucăți de date mai mici, aranjate diferit.
- 6NF (a șasea formă normală): Teoretic și nu implementat pe scară largă. Se ocupă de datele temporale (tratând modificările în timp) prin descompunerea suplimentară a tabelelor pentru a elimina orice redundanță non-temporală.
Teoria normalizării datelor în MySQL serverul este încă în curs de dezvoltare. De exemplu, sunt discuții chiar și pe 6th Forma normală. Cu toate acestea, în majoritatea aplicațiilor practice, normalizarea își atinge cel mai bine în 3rd Formă normală. Evoluția normalizării în teoriile SQL este ilustrată mai jos-
Normalizarea bazei de date cu exemple
Baza de date Exemplu de normalizare poate fi ușor de înțeles cu ajutorul unui studiu de caz. Să presupunem că o bibliotecă video menține o bază de date cu filme închiriate. Fără nicio normalizare în baza de date, toate informațiile sunt stocate într-un singur tabel, așa cum se arată mai jos. Să înțelegem baza de date de normalizare cu exemplu de normalizare cu soluție:
Aici vezi Coloana Filme închiriate are mai multe valori. Acum să trecem la primele forme normale:
Prima formă normală (1NF)
- Fiecare celulă de tabel ar trebui să conțină o singură valoare.
- Fiecare înregistrare trebuie să fie unică.
Tabelul de mai sus în 1NF-
Exemplu 1NF
Înainte de a continua, să înțelegem câteva lucruri -
Ce este o CHEIE în SQL
A CHEIE în SQL este o valoare folosită pentru a identifica în mod unic înregistrările dintr-un tabel. O CHEIE SQL este o singură coloană sau o combinație de mai multe coloane utilizate pentru a identifica în mod unic rândurile sau tuplurile din tabel. Cheia SQL este folosită pentru a identifica informațiile duplicate și, de asemenea, ajută la stabilirea unei relații între mai multe tabele din baza de date.
Notă: Coloanele dintr-un tabel care NU sunt folosite pentru a identifica o înregistrare în mod unic sunt numite coloane fără cheie.
Ce este o cheie primară?
O valoare primară este o singură valoare de coloană utilizată pentru a identifica în mod unic o înregistrare a bazei de date.
Are următoarele atribute
- A cheia principala nu poate fi NULL
- O valoare a cheii primare trebuie să fie unică
- Valorile cheii primare ar trebui rareori modificate
- Cheia primară trebuie să primească o valoare atunci când este inserată o nouă înregistrare.
Ce este cheia compusă?
O cheie compusă este o cheie primară compusă din mai multe coloane utilizate pentru a identifica o înregistrare în mod unic
În baza noastră de date, avem două persoane cu același nume Robert Phil, dar locuiesc în locuri diferite.
Prin urmare, avem nevoie atât de Nume complet, cât și de Adresă pentru a identifica o înregistrare în mod unic. Aceasta este o cheie compusă.
Să trecem la a doua formă normală 2NF
A doua formă normală (2NF)
- Regula 1 - Fii în 1NF
- Regula 2- Cheie primară cu o singură coloană care nu depinde funcțional de niciun subset de relație de cheie candidată
Este clar că nu putem avansa pentru a face baza noastră de date simplă în 2nd Formular de normalizare, cu excepția cazului în care împărțim tabelul de mai sus.
Ne-am împărțit tabelul 1NF în două mese, adică. Tabelul 1 și Tabelul 2. Tabelul 1 conține informații despre membri. Tabelul 2 conține informații despre filmele închiriate.
Am introdus o nouă coloană numită Membership_id, care este cheia primară pentru tabelul 1. Înregistrările pot fi identificate în mod unic în Tabelul 1 folosind ID-ul de membru
Baza de date – Cheie străină
În tabelul 2, Membership_ID este cheia externă
Cheia externă face referire la cheia primară a altui tabel! Vă ajută să vă conectați Mesele
- O cheie externă poate avea un nume diferit de cheia primară
- Se asigură că rândurile dintr-un tabel au rânduri corespunzătoare în altul
- Spre deosebire de cheia primară, acestea nu trebuie să fie unice. Cel mai adesea nu sunt
- Cheile externe pot fi nule chiar dacă cheile primare nu pot
De ce ai nevoie de o cheie străină?
Să presupunem că un novice introduce o înregistrare în Tabelul B, cum ar fi
Veți putea insera doar valori în cheia străină care există în cheia unică din tabelul părinte. Acest lucru ajută la integritatea referenţială.
Problema de mai sus poate fi depășită prin declararea ID-ului de membru din Table2 ca cheie externă a ID-ului de membru din Table1
Acum, dacă cineva încearcă să insereze o valoare în câmpul ID de membru care nu există în tabelul părinte, va fi afișată o eroare!
Ce sunt dependențele funcționale tranzitive?
Un tranzitiv dependenta functionala este atunci când se schimbă o coloană fără cheie, poate cauza modificarea oricăreia dintre celelalte coloane fără cheie
Luați în considerare tabelul 1. Schimbarea coloanei fără cheie Nume complet poate schimba salutul.
Să trecem la 3NF
A treia formă normală (3NF)
- Regula 1 - Fii în 2NF
- Regula 2 - Nu are dependențe funcționale tranzitive
Pentru a muta masa noastră 2NF în 3NF, trebuie să ne împărțim din nou masa.
Exemplu 3NF
Mai jos este un exemplu 3NF în baza de date SQL:
Ne-am împărțit din nou mesele și am creat un nou tabel care stochează Salutări.
Nu există dependențe funcționale tranzitive și, prin urmare, tabelul nostru este în 3NF
În Tabelul 3 ID-ul de salut este cheia primară, iar în Tabelul 1 ID-ul de salut este străin de cheia primară din Tabelul 3
Acum, micul nostru exemplu este la un nivel care nu poate fi descompus în continuare pentru a obține tipuri de normalizare mai înalte în formă normală în DBMS. De fapt, este deja în forme superioare de normalizare. În bazele de date complexe, sunt necesare, în mod normal, eforturi separate pentru trecerea la următoarele niveluri de normalizare a datelor. Cu toate acestea, vom discuta pe scurt despre următoarele niveluri de normalizare în DBMS.
Forma normală Boyce-Codd (BCNF)
Chiar și atunci când o bază de date este în 3rd Forma normala, totusi ar exista anomalii daca are mai multe Candidat Cheia.
Uneori este denumit și BCNF 3.5 Forma normală.
A patra formă normală (4NF)
Dacă nicio instanță de tabel de bază de date nu conține două sau mai multe date independente și cu mai multe valori care descriu entitatea relevantă, atunci este în 4th Forma normală.
A cincea formă normală (5NF)
Un tabel este în 5th Forma normală numai dacă este în 4NF și nu poate fi descompusă în orice număr de tabele mai mici fără pierderi de date.
A șasea formă normală (6NF) propusă
6th Forma normală nu este standardizată, totuși, este discutată de experții în baze de date de ceva timp. Sperăm că vom avea o definiție clară și standardizată pentru 6th Forma normală în viitorul apropiat...
Avantajele formei normale
- Îmbunătățiți consistența datelor: Normalizarea asigură că fiecare parte de date este stocată într-un singur loc, reducând șansele de date inconsecvente. Când datele sunt actualizate, acestea trebuie să fie actualizate doar într-un singur loc, asigurând coerența.
- Reduceți redundanța datelor: Normalizarea ajută la eliminarea datelor duplicate prin împărțirea lor în mai multe tabele înrudite. Acest lucru poate economisi spațiu de stocare și, de asemenea, poate face baza de date mai eficientă.
- Îmbunătățiți performanța interogărilor: Bazele de date normalizate sunt adesea mai ușor de interogat. Deoarece datele sunt organizate logic, interogările pot fi optimizate pentru a rula mai rapid.
- Faceți datele mai semnificative: Normalizarea implică gruparea datelor într-un mod care să aibă sens și să fie intuitiv. Acest lucru poate face baza de date mai ușor de înțeles și utilizat, în special pentru persoanele care nu au proiectat baza de date.
- Reduceți șansele de anomalii: Anomaliile sunt probleme care pot apărea la adăugarea, actualizarea sau ștergerea datelor. Normalizarea poate reduce șansele acestor anomalii, asigurându-se că datele sunt organizate logic.
Dezavantajele normalizării
- Complexitate crescută: Normalizarea poate duce la relații complexe. Un număr mare de tabele cu chei străine poate fi dificil de gestionat, ceea ce duce la confuzie.
- Flexibilitate redusă: Datorită regulilor stricte de normalizare, este posibil să existe mai puțină flexibilitate în stocarea datelor care nu respectă aceste reguli.
- Cerințe de stocare sporite: În timp ce normalizarea reduce redundanța, poate fi necesar să se aloce mai mult spațiu de stocare pentru a găzdui tabele și indici suplimentari.
- Performanță generală: Alăturarea mai multor mese poate fi costisitoare din punct de vedere al performanței. Cu cât datele sunt mai normalizate, cu atât sunt necesare mai multe conexiuni, ceea ce poate încetini timpul de recuperare a datelor.
- Pierderea contextului de date: Normalizarea descompune datele în tabele separate, ceea ce poate duce la o pierdere a contextului de afaceri. Examinarea tabelelor înrudite este necesară pentru a înțelege contextul unei date.
- Nevoia de cunoștințe de specialitate: Implementarea unei baze de date normalizate necesită o înțelegere profundă a datelor, a relațiilor dintre date și a regulilor de normalizare. Acest lucru necesită cunoștințe de specialitate și poate consuma mult timp.
Asta e tot pentru normalizarea SQL!!!
Concluzie
- Proiectare baze de date este esențială pentru implementarea cu succes a unui sistem de management al bazelor de date care îndeplinește cerințele de date ale unui sistem de întreprindere.
- Normalizarea în DBMS este un proces care ajută la producerea de sisteme de baze de date care sunt rentabile și au modele de securitate mai bune.
- Dependențe funcționale sunt o componentă foarte importantă a procesului de normalizare a datelor
- Majoritatea sistemelor de baze de date sunt baze de date normalizate până la a treia formă normală în DBMS.
- O cheie primară identifică în mod unic este înregistrată într-un tabel și nu poate fi nulă
- O cheie externă ajută la conectarea tabelului și face referire la o cheie primară