Տվյալների բազայի կախվածությունը այն թեման է, որը հաճախ շփոթում է ինչպես ուսանողներին, այնպես էլ բազայի մասնագետներին: Բարեբախտաբար, դրանք այնքան էլ բարդ չեն եւ կարող են լավագույնս ցուցադրվել մի շարք օրինակներ օգտագործելու միջոցով: Այս հոդվածում մենք ուսումնասիրում ենք ընդհանուր տվյալների բազայի կախվածության տեսակներ:
Տվյալների բազայի կախվածությունը / ֆունկցիոնալ կախվածությունը
Կախվածությունը տվյալների շտեմարանում տեղի է ունենում, երբ նույն տվյալների բազայի աղյուսակում պահվող տեղեկությունները միանգամայն որոշում են նույն աղյուսակում պահվող այլ տեղեկություններ: Դուք նաեւ կարող եք նկարագրել այն որպես հարաբերություն, որտեղ իմանալով մեկ հատկանիշի (կամ մի շարք հատկանիշների) արժեքը բավական է ձեզ համար մեկ սեղանի այլ հատկանիշի (կամ հատկանիշների շարք) արժեքը:
Ասելով, որ սեղանի հատկանիշների միջեւ կախվածություն կա, նույնն է, որ կա այդ հատկանիշների միջեւ ֆունկցիոնալ կախվածություն: Եթե առկա է տվյալների բազայում կախվածություն, որ B հատկանիշը կախված է Ա հատկանիշից, ապա դա գրեք որպես «A -> B»:
Օրինակ, Սոցիալական ապահովության համարը (SSN) եւ անունը ցուցակի աշխատողների հատկանիշների ցանկում կարելի է ասել, որ անունը կախված է SSN- ով (կամ SSN-> անունը), քանի որ աշխատողի անունը կարող է առանձնահատուկ որոշվել SSN- ից: Այնուամենայնիվ, հակառակ հայտարարությունը (անունը `SSN) ճիշտ չէ, քանի որ մեկից ավելի աշխատողներ կարող են ունենալ նույն անունը, այլ տարբեր SSN- ները:
Աննշան ֆունկցիոնալ կախվածություններ
Աննշան ֆունկցիոնալ կախվածությունը տեղի է ունենում, երբ նկարագրում եք հատկանիշի ֆունկցիոնալ կախվածությունը բնորոշ հատկանիշների հավաքածուն, որը ներառում է բնորոշ հատկանիշը: Օրինակ, «{A, B} -> B» - չնչին ֆունկցիոնալ կախվածությունը, ինչպես «{name, SSN} -> SSN»: Այս տեսակի ֆունկցիոնալ կախվածությունը կոչվում է չնչին, քանի որ դա կարող է հանգեցնել առողջ իմաստով: Ակնհայտ է, որ եթե դուք արդեն գիտեք B արժեքը, ապա B- ի արժեքը կարող է բացառապես որոշվել այդ գիտելիքով:
Full ֆունկցիոնալ կախվածություններ
Ֆունկցիոնալ կախվածության պահանջները բավարարում են լիարժեք ֆունկցիոնալ կախվածությունը եւ ֆունկցիոնալ կախվածության ձախ կողմում ներկայացված հատկանիշների շարքը չի կարող կրճատվել հետագա: Օրինակ, «{SSN, age} -> անունը» ֆունկցիոնալ կախվածությունն է, բայց դա լիարժեք ֆունկցիոնալ կախվածություն չէ, քանի որ դուք կարող եք հեռացնել տարիքը հայտարարության ձախ կողմում առանց կախվածության հարաբերության վրա ազդելու:
Անցումային կախվածություններ
Անցումային կախվածությունը տեղի է ունենում, երբ առկա է անուղղակի փոխհարաբերություն, որն առաջացնում է ֆունկցիոնալ կախվածություն: Օրինակ, «A-> C- ը անցումային կախվածություն է, երբ ճիշտ է միայն այն պատճառով, որ« A-> B »եւ« B-> C- ը ճիշտ են:
Բազմարժութային կախվածություններ
Բազմակի կախվածությունը տեղի է ունենում, երբ սեղանի մեկ կամ ավելի տողերի առկայությունը ենթադրում է նույն աղյուսակում մեկ կամ ավելի այլ տողերի առկայություն: Օրինակ, պատկերացրեք մի մեքենա, որն արտադրում է ավտոմեքենաների բազմաթիվ մոդելներ, բայց միշտ էլ յուրաքանչյուր մոդելի համար կարմիր եւ կապույտ գույներ է տալիս: Եթե ունեք սեղան, որը պարունակում է մոդելի անվանումը, գույնը եւ յուրաքանչյուր մեքենայի տարին, ընկերությունը արտադրում է, այդ աղյուսակում գոյություն ունի բազմաբնույթ կախվածություն : Եթե կա որոշակի մոդելի անուն եւ տարվա կապույտ գիծ, ապա պետք է լինի նույն շարքը, որը համապատասխանում է նույն մեքենայի կարմիր տարբերակին:
Կախվածության կարեւորությունը
Տվյալների բազայի կախվածությունը կարեւոր է հասկանալ, քանի որ ապահովում են տվյալների շտեմարանի նորմալացման համար օգտագործվող հիմնական կառուցվածքային բլոկները: Օրինակ:
- Երկրորդ նորմալ ձեւով (2NF) սեղանի համար սեղանի վրա չպետք է լինի ոչ վարչապետի հատկանիշ, որը գործունակորեն կախված է թեկնածուի բանալիի ենթաբեմից:
- Երրորդ հերթական ձեւով (3NF) մեկ սեղանի համար յուրաքանչյուր ոչ-հիմնական հատկանիշը պետք է ունենա ոչ անցողական ֆունկցիոնալ կախվածություն թեկնածուի յուրաքանչյուր բանալիի վրա:
- Բոյս-Կոդի նորմալ ձեւով (BCNF) մի սեղանի համար յուրաքանչյուր ֆունկցիոնալ կախվածություն (բացառությամբ չնչին կախվածության) պետք է լինի գերծանրքաշային :
- Սեղանի համար չորրորդ նորմալ ձեւով (4NF) , այն պետք է ունենա մի քանի արժեքավոր կախվածություն: