Visiškai funkcinė priklausomybė yra duomenų bazės normalizavimo būsena, kuri prilygsta antrosios įprastos formos (2NF) normalizavimo standartui. Trumpai tariant, tai reiškia, kad jis atitinka Pirmosios įprastos formos reikalavimus (1NF), o visi ne raktažodžiai yra visiškai funkcionaliai priklausomi nuo pirminio rakto.
Tai nėra tokia sudėtinga, kaip gali atrodyti. Pažvelkime į tai išsamiau.
Pirmosios įprastinės formos santrauka
Kad duomenų bazė būtų visiškai funkcionali, ji pirmiausia turi atitikti pirmąją įprastinę formą .
Visa tai reiškia, kad kiekvienas atributas turi turėti vieną, atominę vertę.
Pavyzdžiui, ši lentelė neatitinka 1NF, nes darbuotojas Tina yra susietas su dviem vietomis: abu jie vienoje ląstelėje:
Darbuotojas | Vieta |
---|---|
Jonas | Los Andželas |
Tina | Los Andželas, Čikaga |
Leisti, kad šis dizainas galėtų neigiamai paveikti duomenų atnaujinimus ar įrašus. Siekiant užtikrinti 1NF atitikimą, pertvarkykite lentelę taip, kad visi atributai (arba stulpelių langeliai) būtų vienos vertės:
Darbuotojas | Vieta |
---|---|
Jonas | Los Andželas |
Tina | Los Andželas |
Tina | Čikaga |
Tačiau 1NF vis dar nepakanka, kad būtų išvengta problemų su duomenimis.
Kaip veikia 2NF, kad užtikrintų visišką priklausomybę
Norėdami būti visiškai priklausomi, visi pagrindiniai raktažodžiai be kandidatų turi priklausyti nuo pirminio rakto. (Atminkite, kad pagrindinio atributo kandidatas yra bet kuris raktas (pavyzdžiui, pagrindinis arba užsienio raktas), naudojamas vienareikšmiškai identifikuoti duomenų bazės įrašą.
Duomenų bazių kūrėjai naudoja užrašą, kuris apibūdina priklausomus ryšius tarp atributų:
Jei atributas A nustato B reikšmę, mes rašome A-> B - tai reiškia, kad B funkciniu požiūriu priklauso nuo A. Šiame santykyje A nustato B reikšmę, o B priklauso nuo A.
Pavyzdžiui, toliau esančioje lentelėje Darbuotojų departamentas yra EmployeeID ir DeptID, kurie yra kandidato raktas: EmployeeID yra pagrindinis pagrindinio raktas, o DeptID yra užsienio raktas.
Bet kuris kitas atributas - šiuo atveju "EmployeeName" ir "DeptName" - priklauso nuo pirminio rakto, kad gautų jo vertę.
Darbuotojo ID | Darbuotojo vardas | DeptID | DeptName |
---|---|---|---|
Emp1 | Jonas | Dept001 | Finansai |
Emp2 | Tina | Dept003 | Pardavimai |
Emp3 | Carlosas | Dept001 | Finansai |
Šiuo atveju lentelė nėra visiškai priklausoma, nes, nors EmployeeName priklauso nuo pirminio rakto EmployeeID, DeptName priklauso DeptID vietoj. Tai vadinama daline priklausomybe .
Kad ši lentelė atitiktų 2NF, mes turime atskirti duomenis į dvi lenteles:
Darbuotojo ID | Darbuotojo vardas | DeptID |
---|---|---|
Emp1 | Jonas | Dept001 |
Emp2 | Tina | Dept003 |
Emp3 | Carlosas | Dept001 |
Pašaliname atributą DeptName iš lentelės Darbuotojai ir sukurkite naują lentelę Departamentai :
DeptID | DeptName |
---|---|
Dept001 | Finansai |
Dept002 | Žmogiškieji ištekliai |
Dept003 | Pardavimai |
Dabar santykiai tarp lentelių yra visiškai priklausomi arba 2NF.
Kodėl visiškas priklausomybė yra svarbi
Visapusiška duomenų bazės atributų priklausomybė padeda užtikrinti duomenų vientisumą ir išvengti duomenų anomalijų.
Pavyzdžiui, apsvarstykite aukščiau esančioje lentelėje pateiktą lentelę, kuri tinka tik 1NF. Čia vėlgi:
Darbuotojas | Vieta |
---|---|
Jonas | Los Andželas |
Tina | Los Andželas |
Tina | Čikaga |
Tina turi du įrašus. Jei mes atnaujinsime vieną, nesuvokdami, kad yra du, rezultatas būtų nenuoseklūs duomenys.
Arba, jei mes norime pridėti darbuotoją prie šios lentelės, bet mes dar nežinome vietos? Gali būti, kad negalėsite pridėti naujo darbuotojo, jei atributas Vietai neleidžia NULL vertės.
Vis dėlto visiškai nesikeičia, kai kalbama apie normalizavimą. Turite įsitikinti, kad jūsų duomenų bazė yra trečioje įprastoje formoje (3NF).