Recomandat, 2024

Alegerea Editorului

Diferența dintre 3NF și BCNF

Normalizarea este o metodă care elimină redundanța dintr-o relație, minimizând astfel anomaliile de inserare, ștergere și actualizare care degradează performanța bazelor de date. În acest articol, vom diferenția între două forme normale mai mari, adică 3NF și BCNF. Diferența de bază dintre 3NF și BCNF este aceea că 3NF elimină dependența tranzitivă de o relație și o tabelă care trebuie să fie în BCNF, dependența trivială funcțională X -> Y într-o relație trebuie să dețină numai dacă X este cheia super.

Să discutăm diferențele dintre 3NF și BCNF cu ajutorul diagramei de comparație prezentată mai jos.

Diagramă de comparație

Bazele comparației3NFBCNF
ConceptNiciun atribut non-prime nu trebuie să depindă de tasta Candidate.Pentru orice dependență trivială dintr-o relație R spune X-> Y, X ar trebui să fie o cheie super-relativă R.
Dependenţă3NF poate fi obținut fără a sacrifica toate dependențele.Este posibil ca dependențele să nu fie păstrate în BCNF.
DescompunereDescompunerea fără pierderi se poate realiza la 3NF.Pierderea fără pierderi este dificil de realizat în BCNF.

Definiția 3NF

Un tabel sau o relație este considerat a fi în a treia formă normală numai dacă tabela este deja în 2NF și nu există niciun atribut non-prime care să depindă tranzitoriu de cheia candidatului unei relații.

Deci, înainte de a aborda procesul de normalizare a unei mese în 3NF, permiteți-mi să discut cheia candidatului. O cheie candidată este o cheie super minimă adică o cheie super cu atribute minime care pot defini toate atributele unei relații. Deci, în procesul de normalizare a mesei, în primul rând, recunoașteți cheia candidatului unei relații date. Atributele care fac parte din cheia candidatului sunt atribute primare, iar atributele care nu fac parte din cheia candidatului sunt atributele non-prime .

Acum dacă avem o relație R (A, B, C, D, E, F) și avem următoarele dependențe de funcție pentru relația R.

Observând dependențele funcționale, putem concluziona că AB este o cheie candidată pentru relația R, deoarece folosind AB-cheie putem căuta valoarea pentru toate atributele într-o relație R. Astfel , A, B devine atribute primare, deoarece împreună formează cheia candidatului. Atributele C, D, E, F devin atribute nefinanciare deoarece niciuna dintre acestea nu face parte dintr-o cheie candidat.

Tabelul este în 2NF, deoarece niciun atribut non-prime nu depinde parțial de cheia candidatului

Dar, se observă o dependență tranzitivă între dependențele funcționale furnizate, deoarece atributul F nu depinde direct de cheia candidatului AB . În schimb, atributul F depinde tranzitoriu de cheia candidatului AB prin atributul D. Până când atributul D are o valoare pe care o putem atinge la valoarea atributului F, din cheia candidatului AB. În cazul în care valoarea atributului D este NULL, nu putem găsi / căuta valoarea F cu ajutorul tastei candidat AB. Acesta este motivul pentru care 3NF solicită eliminarea dependenței tranzitorii de relații.

Deci, pentru a elimina această dependență tranzitivă, trebuie să împărțim relația R. În timp ce împărțim o relație puneți întotdeauna cheia candidatului și toate atributele care depind de acea cheie candidat în prima relație. În următoarea relație divizată, vom plasa atributul care cauzează dependența tranzitantă, precum și atributele care depind de ea în a doua relație.

Acum, tabelele R1 și R2 sunt în 3NF, deoarece nu au rămas dependențe parțiale și tranzitive. Relația R1 (A, B, C, D, E) are o cheie candidată AB, în timp ce relația R2 (D, E) are D ca cheie candidat.

Definiția BCNF

BCNF este considerat a fi mai puternic decât 3NF. Relația R care se află în BCNF trebuie să fie în 3NF . Și oriunde o dependență funcțională non-trivială A -> B are relația R, atunci A trebuie să fie o super cheie a relației R. După cum știm, tasta Super este o cheie care are un singur atribut sau un set de atribute care determină întregul atributele unei relații.

Acum, să mergem la un exemplu pentru a înțelege BCNF într-un mod mai bun. Să presupunem că avem o relație R (A, B, C, D, F), care au următoarele dependențe funcționale.

Observând relația R, putem spune că A și BF sunt cheile candidate ale relației R, deoarece singurele pot căuta valoarea pentru toate atributele în relația R. Astfel A, B și F sunt atributele primului în timp ce C și D sunt atribute primare . Nu se observă dependență tranzitorie în dependențele funcționale prezente mai sus. Prin urmare, tabelul R este în 3NF.

Dar o dependență funcțională, adică D -> F, încalcă definiția BCNF, conform căreia dacă D -> F există, atunci D ar trebui să fie cheia super, care nu este cazul aici. Deci, vom împărți relația R.

Acum, tabelele R1 și R2 sunt în BCNF. Relația R1 are două chei candidate A și B, dependența trivială funcțională a R1, adică A-> BCD și B -> ACD, țineți pentru BCNF ca A și B sunt cheile super pentru relație. Relația R2 are D ca cheia candidatului și dependența funcțională D -> F deține, de asemenea, pentru BCNF, D fiind o cheie Super.

Diferențe cheie între 3NF și BCNF

  1. 3NF afirmă că niciun atribut non-prime nu trebuie să depindă tranzitoriu de cheia candidat a relației. Pe de altă parte, BCNF afirmă că dacă există o relație trivială funcțională X -> Y pentru o relație; atunci X trebuie să fie o cheie super.
  2. 3NF poate fi obținut fără a sacrifica dependența relației. Cu toate acestea, dependența poate să nu fie păstrată în timpul obținerii BCNF.
  3. 3NF poate fi realizat fără a pierde nici o informație din tabela veche, în timp ce, în timp ce obținem BCNF, putem pierde unele informații din tabelul vechi.

Concluzie:

BCNF este mult mai restrictivă decât 3NF care ajută la normalizarea mai multă a tabelului. Relația din 3NF are o redundanță minimă care este îndepărtată ulterior de BCNF.

Top