Dependența complet funcțională în normalizarea bazelor de date

O dependență funcțională completă este o stare de normalizare a bazei de date care echivalează cu standardul de normalizare a Formei II Normale (2NF) . Pe scurt, aceasta înseamnă că îndeplinește cerințele Formei Normale (1NF) și toate atributele non-cheie sunt complet funcționale dependente de cheia primară.

Acest lucru nu este la fel de complicat cum ar putea suna. Să ne uităm la acest lucru în detaliu.

Rezumatul primei forme normale

Înainte ca o bază de date să poată fi pe deplin funcțională dependentă, trebuie să se conformeze mai întâi Formei Normale .

Toate acestea înseamnă că fiecare atribut trebuie să dețină o singură valoare atomică.

De exemplu, tabelul următor nu este conform cu 1NF, deoarece angajatul Tina este legat de două locații, ambele într-o singură celulă:

Prima neconformitate cu forma normală
Angajat Locație
Ioan Los Angeles
Tina Los Angeles, Chicago

Permiterea acestui design ar putea avea un impact negativ asupra actualizărilor sau intrărilor de date. Pentru a asigura conformitatea cu 1NF, rearanjați tabelul astfel încât toate atributele (sau celulele din coloane) să dețină o singură valoare:

Prima conformare normală a formularului
Angajat Locație
Ioan Los Angeles
Tina Los Angeles
Tina Chicago

Dar 1NF nu este încă suficient pentru a evita problemele cu datele.

Cum funcționează 2NF pentru a asigura o dependență deplină

Pentru a fi complet dependent, toate atributele de cheie non-candidate trebuie să depindă de cheia primară. (Rețineți că un atribut cheie candidat este orice cheie (de exemplu, o cheie primară sau străină) folosită pentru a identifica în mod unic o înregistrare de bază de date.

Designerii de baze de date folosesc o notație pentru a descrie relațiile dependente dintre atribute:

Dacă atributul A determină valoarea lui B, vom scrie acest A -> B - ceea ce înseamnă că B este funcțional dependent de A. În această relație, A determină valoarea B, în timp ce B depinde de A.

De exemplu, în următorul tabel Departamentele angajaților , EmployeeID și DeptID sunt ambele chei candidate: EmployeeID este cheia primară a tabelului, în timp ce DeptID este o cheie străină.

Orice alt atribut - în acest caz, EmployeeName și DeptName - trebuie să depindă de cheia primară pentru a obține valoarea sa.

Departamentele angajaților
Card de identitate al angajatului Numele angajatului DeptID DeptName
Emp1 Ioan Dept001 Finanţa
Emp2 Tina Dept003 Vânzări
Emp3 Carlos Dept001 Finanţa

În acest caz, tabela nu este pe deplin dependentă, deoarece, în timp ce EmployeeName depinde de cheia primară EmployeeID, DeptName depinde în schimb de DeptID. Aceasta se numește dependență parțială .

Pentru a face ca acest tabel să fie conform cu 2NF, trebuie să separăm datele în două tabele:

Angajați
Card de identitate al angajatului Numele angajatului DeptID
Emp1 Ioan Dept001
Emp2 Tina Dept003
Emp3 Carlos Dept001

Eliminăm atributul DeptName din tabelul Employees și creăm un nou tabel Departamente :

departamente
DeptID DeptName
Dept001 Finanţa
Dept002 Resurse umane
Dept003 Vânzări

Acum relațiile dintre mese sunt complet dependente, sau în 2NF.

De ce este importantă dependența deplină

Deplina dependență între atributele bazei de date ajută la asigurarea integrității datelor și evitarea anomaliilor de date.

De exemplu, luați în considerare tabelul din secțiunea de mai sus, care aderă doar la 1NF. Aici este, din nou:

Prima conformare normală a formularului
Angajat Locație
Ioan Los Angeles
Tina Los Angeles
Tina Chicago

Tina are două înregistrări. Dacă ne actualizăm una fără a realiza că există două, rezultatul ar fi date incoerente.

Sau, dacă vrem să adăugăm un angajat la această masă, dar nu știm încă locația? S-ar putea să nu fi permis să adăugăm chiar un angajat nou dacă atributul Locație nu permite valori NULL.

Dependența deplină nu este întreaga imagine, totuși, când vine vorba de normalizare. Trebuie să vă asigurați că baza dvs. de date se află în Forma a treia normală (3NF).