GeeksforGeeks
Prima formă normală (1NF) nu elimină redundanța, ci mai degrabă elimină grupurile care se repetă.
În loc să aveți mai multe coloane cu același tip de date într-o înregistrare, (0NF sau forma nenormalizată) eliminați informațiile repetate într-o relație separată și le reprezentați ca rânduri. Aceasta este ceea ce constituie 1NF.
Second Normal Form (2NF):
Second Normal Form (2NF) se bazează pe conceptul de dependență funcțională completă. A doua formă normală se aplică relațiilor cu chei compuse, adică relațiilor cu o cheie primară compusă din două sau mai multe atribute. O relație cu o cheie primară cu un singur atribut este automat cel puțin în 2NF. O relație care nu este în 2NF poate suferi de anomalii de actualizare.
Pentru a fi în a doua formă normală, o relație trebuie să fie în prima formă normală, iar relația nu trebuie să conțină nicio dependență parțială. O relație este în 2NF dacă nu are nicio dependență parțială, adică niciun atribut neprimar (atribute care nu fac parte din nicio cheie candidată) nu este dependent de vreun subset adecvat al vreunei chei candidate din tabel.
Cu alte cuvinte,
O relație care este în Prima formă normală și fiecare atribut care nu este cheie primară este complet dependentă din punct de vedere funcțional de cheia primară, atunci relația este în A doua formă normală (2NF).
Nota – Dacă subansamblul propriu-zis al cheii candidate determină un atribut neprimar, se numește dependență parțială.
Normalizarea relațiilor 1NF în 2NF implică eliminarea dependențelor parțiale. Dacă există o dependență parțială, eliminăm atributul sau atributele parțial dependente din relație, plasându-le într-o nouă relație împreună cu o copie a determinantului lor.
Considerați exemplele prezentate mai jos.
Exemplu-1:
Considerați tabelul de mai jos.
STUD_NO COURSE_NO COURSE_FEE1 C1 10002 C2 15001 C4 20004 C3 10004 C1 10002 C5 2000
{Rețineți că, există mai multe cursuri care au aceeași taxă de curs. }
Aici,
COURSE_FEE nu poate decide singur valoarea COURSE_NO sau STUD_NO;
COURSE_FEE împreună cu STUD_NO nu poate decide valoarea COURSE_NO;
COURSE_FEE împreună cu COURSE_NO nu poate decide valoarea STUD_NO;
În consecință,
COURSE_FEE ar fi un atribut neprimar, deoarece nu aparține singurei chei candidate {STUD_NO, COURSE_NO} ;
Dar, COURSE_NO -> COURSE_FEE, i.e., COURSE_FEE depinde de COURSE_NO, care este un subset propriu-zis al cheii candidate. Atributul neprimar COURSE_FEE depinde de un subset propriu al cheii candidate, ceea ce reprezintă o dependență parțială și, prin urmare, această relație nu este în 2NF.
Pentru a converti relația de mai sus în 2NF,
trebuie să împărțim tabelul în două tabele, cum ar fi :
Tabela 1: STUD_NO, COURSE_NO
Tabela 2: COURSE_NO, COURSE_FEE
Table 1 Table 2STUD_NO COURSE_NO COURSE_NO COURSE_FEE 1 C1 C1 10002 C2 C2 15001 C4 C3 10004 C3 C4 20004 C1 C5 2000 2 C5
Nota – 2NF încearcă să reducă datele redundante care sunt stocate în memorie. De exemplu, dacă există 100 de studenți care urmează cursul C1, nu este necesar să stocăm taxa de curs ca fiind 1000 pentru toate cele 100 de înregistrări, ci o singură dată putem stoca în al doilea tabel, deoarece taxa de curs pentru C1 este 1000.
Exemplu-2:
Considerați următoarele dependențe funcționale în relația R (A, B, C, D )
AB -> C BC -> D
În relația de mai sus, AB este singura cheie candidată și nu există nici o dependență parțială, adică orice subansamblu adecvat al lui AB nu determină nici un atribut neprimar.