- O relație va fi în 3NF dacă este în 2NF și nu conține nicio dependență parțială tranzitivă.
- 3NF este utilizat pentru a reduce duplicarea datelor. De asemenea, este folosit pentru a obține integritatea datelor.
- Dacă nu există o dependență tranzitivă pentru atributele non-prime, atunci relația trebuie să fie în a treia formă normală.
O relație este în a treia formă normală dacă îndeplinește cel puțin una dintre următoarele condiții pentru fiecare dependență de funcție netrivială X → Y.
- X este o super-cheie.
- Y este un atribut principal, adică fiecare element al lui Y face parte dintr-o cheie candidată.
Exemplu:
java 8
Tabelul EMPLOYEE_DETAIL:
EMP_ID | EMP_NAME | EMP_ZIP | EMP_STATE | EMP_CITY |
---|---|---|---|---|
222 | Harry | 201010 | SUS | Noida |
333 | Stephan | 02228 | NE | Boston |
444 | Și | 60007 | NE | Chicago |
555 | Katharine | 06389 | Regatul Unit | Norwich |
666 | Ioan | 462007 | MP | Bhopal |
Super-cheie din tabelul de mai sus:
{EMP_ID}, {EMP_ID, EMP_NAME}, {EMP_ID, EMP_NAME, EMP_ZIP}....so on
Cheia candidatului: {EMP_ID}
Atribute non-prime: În tabelul dat, toate atributele, cu excepția EMP_ID, sunt non-prime.
Aici, EMP_STATE și EMP_CITY depind de EMP_ZIP și EMP_ZIP depind de EMP_ID. Atributele non-prime (EMP_STATE, EMP_CITY) depind tranzitiv de super-cheie (EMP_ID). Încalcă regula a treia formă normală.
De aceea trebuie să mutăm EMP_CITY și EMP_STATE în noul tabel, cu EMP_ZIP ca cheie primară.
Tabelul ANGAJATI:
EMP_ID | EMP_NAME | EMP_ZIP |
---|---|---|
222 | Harry | 201010 |
333 | Stephan | 02228 |
444 | Și | 60007 |
555 | Katharine | 06389 |
666 | Ioan | 462007 |
Tabelul EMPLOYEE_ZIP:
convertiți șirul în interger
EMP_ZIP | EMP_STATE | EMP_CITY |
---|---|---|
201010 | SUS | Noida |
02228 | NE | Boston |
60007 | NE | Chicago |
06389 | Regatul Unit | Norwich |
462007 | MP | Bhopal |