4.1 Ներածություն
Ժամանակն է հասկանալ աղյուսակների միջև կապերը: Երկու կապակցված աղյուսակների միջև փոխազդող տարրերի քանակը կոչվում է կարդինալություն։ Կարդինալությունը կօգնեն քեզ վերահսկել, թե որքան արդյունավետ ես բաժանել տվյալները աղյուսակների մեջ:
Բոլոր էակները կարող են պահպանել կապերը միմյանց միջև, սակայն պրակտիկայում առանձնացվում են էակների միջև կապերի երեք տեսակներ:
- Մեկը մեկին
- Մեկը շատերին
- Շատերը շատերին
4.2 Մեկը մեկին կապ
Եթե էակ Բ-ի յուրաքանչյուր օրինակում միայն մեկ էակ Ա-ի օրինակ կա, ապա ենթադրվում է, որ դրանց միջև կա մեկին-մեկ կապ (որը հաճախ նշվում է «1:1»): ER-դիագրամներում նման տեսակ կապը նշվում է գծիկով, որի ամեն մի վերջում փոքր գիծ կա:

Մեկը մեկին կապերը, որպես կանոն, ցույց են տալիս, որ եթե չունեք բավարար պատճառներ դրանց առանձին պահելու համար, երկու աղյուսակների տվյալները նպատակահարմար է հաշվել մեկում:
Որոշ դեպքերում մեկին-մեկ կապով աղյուսակների օգտագործումը լիովին ողջամիտ է։ Օրինակ, եթե ձեր աղյուսակներում կան կամավոր դաշտեր, օրինակ՝ նկարագրություններ, որոնք հաճախ դատարկ են, ապա կա իմաստ տեղափոխելու բոլոր նկարագրությունները առանձին աղյուսակում, ինչը կօգնի ձեզ խուսափել հաճախակի բաց թողնվածներից և բարձրացնել ձեր տվյալների բազայի արդյունավետությունը։
Հետո, ճիշտ տվյալների համընկնման համար, ստիպված կլինեք ներառել առնվազն մեկ նույնական սյունակ յուրաքանչյուր աղյուսակում (դրա համար ամենալավ ընտրությունը գլխավոր բանալին է):
4.3 Մեկը շատերին կապ
Այսպիսի հարաբերությունը առաջանում է, երբ մեկ աղյուսակի գրառում կապված է մյուսի մի քանի էակների հետ: Օրինակ, նույն հաճախորդը կարող է հավաքել մի քանի ապրանքներ զամբյուղում, իսկ մրցույթի մասնակիցը՝ սահմանել միանգամից մի քանի ռեկորդներ։ Մեկը-շատերին (կամ կարճ «1:Մ») կապերը դիագրամում երևում են «կրունկի ոտքեր» նշանով, ինչպես ցույց է տրված ստորև նշանված օրինակում:

1:Մ կապը տվյալների բազայի նախագծման ժամանակ կիրառելու համար, ավելացրեք «մեկը» աղյուսակից գլխավոր բանալին որպես ատրիբուտ «շատերը» աղյուսակում։ Եթե գլխավոր բանալին գտնվում է մեկ այլ աղյուսակում, ապա կոչվում է «արտաքին բանալի»։ «Մեկը» աղյուսակը համարվում է գլխավոր, մինչդեռ «շատերը» աղյուսակը՝ դուստր:
4.4 Շատերը շատերին կապ
Երբ մեկ աղյուսակի մի քանի էակները կարող են կապված լինել մյուսի մի քանի էակների հետ, ընդունվում է, որ դրանց միջև կա «շատերը շատերին» կապ (կամ «Մ:Մ»)։ Օրինակ, նման կապ է առաջանում ուսանողների և դասընթացների միջև, քանի որ յուրաքանչյուր ուսանող կարող է մասնակցել տարբեր դասընթացների, իսկ յուրաքանչյուր դասընթացի կարող են գալ բազմաթիվ ուսանողներ:
ER-դիագրամում այս տեսակի կապը ցուցադրվում է հետևյալ կերպ.

Այսպիսի կապը տվյալների բազայում ուղղակիորեն իրականացնելն անհնար է։ Ուստի այն պետք է բաժանել երկու կապի՝ մեկից շատերին:
Դրա համար պետք է ստեղծել նոր էակ երկու աղյուսակների միջև։ Եթե Մ:Մ կապը սահմանվում է վաճառքների և ապրանքների միջև, նոր էակը կարելի է անվանել «վաճառված ապրանքներ», քանի որ այն կներկայացնի յուրաքանչյուր վաճառքի բովանդակությունը:
«Վաճառված ապրանքներ»-ի հետ և՛ «վաճառքներ» աղյուսակը, և՛ «ապրանքներ» աղյուսակը կունենան 1:Մ կապ։ Այս կապը թույլ կտա հետևել, թե որոնք կոնկրետ ապրանքները վաճառվել են ինչ հաճախորդներին։ Այլ խոսքով, «վաճառքներ» և «ապրանքներ» աղյուսակների միջև կապը ստեղծում է հարաբերություններ, որոնք թույլ է տալիս հետևել յուրաքանչյուր վաճառքի կոնկրետ վաճառված ապրանքներին։ Տարբեր մոդելներում նման միջանկյալ էակները կոչվում են տարբեր կերպ՝ «կապող աղյուսակներ», «ասոցիատիվ էակներ» կամ «հանգույցային աղյուսակներ»։ Այսպիսի հարաբերությունները կիրառվող են մեծ քանակությամբ տվյալների պահպանման մոդելավորման և տվյալների վերլուծության խնդիրների լուծման համար:
Կապող աղյուսակի յուրաքանչյուր գրառում միացնում է հարևան աղյուսակների երկու տարբեր էակներ։ Այն կարող է նաև պարունակել լրացուցիչ տեղեկություններ։ Օրինակ, ուսանողների և դասընթացների միջև կապող աղյուսակը կարող է ունենալ այսպիսի տեսք.

4.5 Պարտադիր է, թե՞ ոչ
Կապերը վերլուծելու համար կարելի է որոշել, թե որ էակը պարտադիր պայման է մյուսի համար։ Չպարտադիր կողմը նշվում է շրջանով միացնող գծի վրա։ Օրինակ, որպեսզի պետությունը ունենա իր ներկայացուցչին ՄԱԿ-ում, նա պետք է լինի քարտեզի վրա։ Սակայն հակառակը հաստատումը ճիշտ չէ:

Երկու էակները կարող են կապված լինել միմյանց հետ (այսինքն՝ մեկը չի կարող գոյություն ունենալ առանց մյուսի):
Ռեկուրսիվ կապեր
Երբեմն աղյուսակը կարող է հղել ինքն իրեն։ Օրինակ, աշխատողների աղյուսակում կարող է լինել «մենեջեր» ատրիբուտ, որը հղում է մեկ այլ աշխատողի նույն աղյուսակում։ Սա կոչվում է ռեկուրսիվ կապ:
Նույնական կապեր
Կապերը համարվում են նույնական, եթե դրանք կրկնվում են մեկից ավելի անգամ։ Սովորաբար, դրանցից մեկը կարելի է հեռացնել առանց կարևոր տեղեկության կորստի։ Օրինակ, եթե «ուսանողներ» էակը կապված է «դասախոսներ» էակին ոչ միայն ուղղակիորեն, այլ նաև «դասընթացներ»-ով, ապա նպատակահարմար է հեռացնել «ուսանողներ» և «դասախոսներ» միջև կապը։ Այս որոշումը հիմնավորված է այն փաստով, որ ուսանողներին դասախոսներին որոշել կարելի է միայն «դասընթացներ»-ի միջոցով:
4.6 Տվյալների հղումների ամբողջականություն
Գլխավոր և արտաքին բանալիների փոփոխությունները հաշվի են առնում տվյալների հղումների ամբողջականությունը։ Հիմնական գաղափարն այն է, որ տվյալների բազայում նույն տվյալները պարունակող երկու աղյուսակները լինեն համապատասխան:
Տվյալների ամբողջականությունը պահանջում է ճիշտ կառուցված հարաբերություններ աղյուսակների միջև, ինչպես նաև ճիշտ հաստատված հղումներ դրանց միջև։ Տվյալների ամբողջականությունը կարող է խախտվել հետևյալ դեպքերում:
- Հեռացման անոմալիա (deletion anomaly) առաջանում է, երբ հիմնական աղյուսակից հեռացվում է տող։ Այդ դեպքում կախյալ աղյուսակի արտաքին բանալին շարունակում է հղել հիմնական աղյուսակից հեռացված տողին։ Հիմնական աղյուսակում տողի բացակայությունը հանգեցնում է տվյալների ամբողջականության խախտման:
- Ներմուծման անոմալիա (insertion anomaly) առաջանում է, երբ փորձում եք ներմուծել տող կախյալ աղյուսակում։ Այդ դեպքում արտաքին բանալին չի ունենա համապատասխանություն հիմնական աղյուսակի ոչ մի տողի հետ։ Սա կարող է առաջացնել տվյալների սխալ մեկնաբանում և համակարգի սխալ աշխատանք:
- Թարմացման անոմալիաներ (update anomaly) կարող են լինել, երբ մի տողի տվյալները թարմացվում են, բայց դրանք հակասում են նույն աղյուսակի մի այլ տողի ներկայիս տվյալներին։ Սա կարող է հանգեցնել սխալ արդյունքների համակարգում:
Հեռացման անոմալիա
Հեռացման անոմալիայի լուծման համար արտաքին բանալուն պետք է սահմանել երկու սահմանափակումներից մեկը։
Եթե կախյալ աղյուսակի տողը պահանջում է հիմնական աղյուսակի տողի առկայություն, ապա արտաքին բանալու համար սահմանվում է կասկադային հեռացում։ Այսինքն՝ երբ հիմնական աղյուսակից հեռացվում է տող, կախյալ աղյուսակից նույնպես հեռացվում են կապված տող(եր)ը։
Եթե հիմնական և կախյալ աղյուսակների միջև կապը պարտադիր չէ, ապա արտաքին բանալիի համար սահմանվում է NULL
արժեք, երբ հիմնական աղյուսակից հեռացվում է կապված տողը։ Դրա համար արտաքին բանալիի սյունակը պետք է ընդունի NULL
արժեք։
Ներմուծման անոմալիա
Ներմուծման անոմալիան լուծելու համար կախյալ աղյուսակում տվյալներ ավելացնելիս այն սյունակը, որը ներկայացնում է արտաքին բանալին, պետք է ընդունի NULL
արժեք։ Այսպիսով, եթե ավելացված օբյեկտը կապ չունի հիմնական աղյուսակի հետ, ապա արտաքին բանալիի սյունակում կցուցադրվի NULL
արժեք։
Թարմացման անոմալիաներ
Թարմացման անոմալիաների խնդիրը լուծելու համար կիրառվում է նորմալացում, որը մենք խոսել ենք ավելի վաղ։
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ