Būtina sąlyga: Pirmoji normali forma , Antroji normali forma , Trečioji normali forma
Taikant bendruosius 2NF ir 3NF apibrėžimus, gali būti nustatytas papildomas perteklius, kurį sukelia priklausomybės, kurios pažeidžia vieną ar daugiau kandidatų raktų. Tačiau, nepaisant šių papildomų apribojimų, vis tiek gali egzistuoti priklausomybės, dėl kurių 3NF ryšiuose atsiras perteklius. Dėl šio 3NF silpnumo atsirado stipresnė normali forma, vadinama į Boyce-Codd normali forma (Codd, 1974) .
Nors 3NF yra tinkama normalioji forma reliacinėms duomenų bazėms, vis dėlto ši (3NF) normali forma gali nepašalinti 100% pertekliaus dėl X−>Y funkcinės priklausomybės, jei X nėra nurodyto ryšio raktas. Tai gali būti išspręsta naudojant Boyce-Codd normalią formą (BCNF).
Boyce-Codd normalioji forma (BCNF)
Boyce–Codd normalioji forma (BCNF) yra pagrįsta funkcinėmis priklausomybėmis, kurios atsižvelgia į visus galimus ryšio raktus; tačiau BCNF taip pat turi papildomų apribojimų, palyginti su bendruoju 3NF apibrėžimu.
BCNF taisyklės
1 taisyklė: Lentelė turi būti 3-iosios normalios formos.
2 taisyklė: X turėtų būti kiekvienos funkcinės priklausomybės (FD) X−>Y superraktas duotame santykyje.
Pastaba: Norėdami patikrinti, ar ryšys yra BCNF, nustatome visus determinantus ir įsitikiname, kad jie yra kandidatiniai raktai.
BCNF DBVS
Jūs susidūrėte su panašia hierarchija, žinoma kaip Chomsky normalioji forma skaičiavimo teorijoje. Dabar atidžiai išstudijuokite aukščiau pateiktą hierarchiją. Galima daryti išvadą, kad kiekvienas BCNF santykis yra ir 3NF . Kitaip tariant, ryšys 3NF neturi būti BCNF. Kurį laiką apmąstykite šį teiginį.
Norint nustatyti aukščiausią normaliąją tam tikro ryšio R formą su funkcinėmis priklausomybėmis, pirmiausia reikia patikrinti, ar galioja BCNF sąlyga. Jei nustatoma, kad R yra BCNF, galima drąsiai daryti išvadą, kad ryšys taip pat yra 3NF , 2NF, ir 1NF kaip rodo hierarchija. 1NF turi mažiausiai ribojančių apribojimų – jam reikia tik santykio R, kad kiekvienoje kortelėje būtų atominės reikšmės. 2NF turi šiek tiek griežtesnį apribojimą.
3NF yra labiau ribojantis nei pirmosios dvi normalios formos, bet yra mažiau ribojantis nei BCNF. Tokiu būdu apribojimas didėja, kai keliaujame hierarchija žemyn.
Pavyzdžiai
Čia aptarsime keletą pagrindinių pavyzdžių, kurie leis suprasti BCNF savybes. Čia aptarsime kelis pavyzdžius.
1 pavyzdys
Panagrinėkime studentų duomenų bazę, kurioje minimi studento duomenys.
This_ID | This_Branch | Stu_Kursas | Filialo_numeris | Stu_Kurso_Nr |
---|---|---|---|---|
101 | Kompiuterių mokslas ir inžinerija | DBVS | B_001 | 201 |
101 | Kompiuterių mokslas ir inžinerija | Kompiuterių tinklai | B_001 | 202 |
102 | Elektronikos ir ryšių inžinerija | VLSI technologija | B_003 | 401 |
102 | Elektronikos ir ryšių inžinerija | Mobilusis ryšys | B_003 | 402 |
Pirmiau minėtų dalykų funkcinė priklausomybė yra tokia:
Stu_ID −>Stu_Branch Stu_Course −> {Branch_Number, Stu_Course_No}>
Aukščiau pateiktos lentelės kandidatų raktai yra šie: {This_ID, This_Course}
Kodėl šios lentelės nėra BCNF?
Aukščiau pateikta lentelė nėra BCNF, nes, kaip matome, nei Stu_ID, nei Stu_Course nėra Super Key. Kadangi aukščiau paminėtos taisyklės aiškiai nurodo, kad norint, kad lentelė būtų BCNF, ji turi vadovautis savybe, kad funkcinei priklausomybei X−>Y, X turi būti super rakte ir čia ši savybė sugenda, todėl šios lentelės nėra BCNF. .
Kaip patenkinti BCNF?
Norėdami patenkinti šią lentelę BCNF, turime ją išskaidyti į kitas lenteles. Čia yra visa procedūra, kurios metu šią lentelę paverčiame BCNF. Pirmiausia padalykime šią pagrindinę lentelę į dvi lenteles This_Branch ir Stu_Kursas Lentelė.
Stu_Branch lentelė
This_ID | This_Branch |
---|---|
101 | Kompiuterių mokslas ir inžinerija |
102 | Elektronikos ir ryšių inžinerija |
Šios lentelės kandidato raktas: This_ID .
kaip konvertuoti eilutę į char
Stu_kursų lentelė
Stu_Kursas | Filialo_numeris | Stu_Kurso_Nr |
---|---|---|
DBVS | B_001 | 201 |
Kompiuterių tinklai | B_001 | 202 |
VLSI technologija | B_003 | 401 |
Mobilusis ryšys | B_003 | 402 |
Šios lentelės kandidato raktas: Stu_Kursas .
Stu_ID į Stu_Course_No Table
This_ID | Stu_Kurso_Nr |
---|---|
101 | 201 |
101 | 202 |
102 | 401 |
102 | 402 |
Šios lentelės kandidato raktas: {Stu_ID, Stu_Course_No}.
Išskaidžius į tolimesnes lenteles, dabar BCNF, perduodant Super Key sąlygą, funkcinėje priklausomybėje X−>Y X yra Super raktas.
2 pavyzdys
Raskite aukščiausią normaliąją santykio formą R(A, B, C, D, E), kai FD nustatyta kaip:
{ BC->D, AC->BE, B->E }>>>Paaiškinimas:
- 1 žingsnis: Kaip matome, (AC)+ ={A, C, B, E, D}, bet nė vienas jo poaibis negali nustatyti visų ryšio atributų, todėl AC bus kandidatas. A arba C negali būti gaunami iš jokio kito ryšio atributo, todėl bus tik 1 kandidatas raktas {AC}.
- 2 žingsnis: Pirminiai atributai yra tie atributai, kurie šiame pavyzdyje yra kandidato rakto {A, C} dalis, o kiti šiame pavyzdyje bus ne pirminiai {B, D, E}.
- 3 veiksmas: Ryšys R yra pirmosios normalios formos, nes reliacinė DBVS neleidžia naudoti daugiareikšmių ar sudėtinių atributų.
Ryšys yra 2-os normalios formos, nes BC->D yra 2-osios normaliosios formos (BC nėra tinkamas kandidato rakto AC poaibis), o AC->BE yra 2-osios normaliosios formos (AC yra kandidatas raktas) ir B->E yra 2-osios normalios formos (B nėra tinkamas kandidato rakto AC poaibis).
Santykis yra ne 3-ioje normalioje formoje, nes BC->D (nei BC yra superraktas, nei D nėra pirminis atributas) ir B->E (nei B yra superraktas, nei E nėra pirminis atributas), bet tenkina 3-ąjį normalųjį , FD LHS turėtų būti super raktas arba RHS turėtų būti pagrindinis atributas. Taigi aukščiausia normalioji santykio forma bus 2-oji normalioji forma.
Pastaba: Pagrindinis atributas negali būti tranzityviai priklausomas nuo BCNF santykio rakto.
Apsvarstykite šias kai kurių santykių R funkcines priklausomybes
A ir B yra super raktai, todėl aukščiau pateiktas ryšys yra BCNF.
Pastaba: BCNF skilimas visada gali būti neįmanomas esant be nuostolių sujungimo sąlygai. Pavyzdžiui, santykis R (V, W, X, Y, Z) su funkcinėmis priklausomybėmis: