Բազմաբնույթ հարաբերություններ տվյալների շտեմարանում

Տվյալների բազայում մեկից-շատ հարաբերություններ են տեղի ունենում, երբ Աղյուսակ A- ում յուրաքանչյուր գրառումը կարող է ունենալ շատ կապված գրառումներ Table B- ում, սակայն յուրաքանչյուր աղյուսակը կարող է ունենալ միայն մեկ համապատասխան արձանագրություն Աղյուսակ Ա-ում: տվյալների բազան ամենատարածված հարաբերական բազայի դիզայնն է եւ գտնվում է լավ դիզայնի սրտում:

Դիտարկենք ուսուցչի եւ դասավանդվող դասընթացների հարաբերությունները: Ուսուցիչը կարող է սովորել բազմաթիվ դասընթացներ, սակայն դասընթացի ուսուցիչի հետ նույն հարաբերությունները չեն ունենա:

Հետեւաբար, Ուսուցիչների սեղանի յուրաքանչյուր արձանագրության համար դասընթացների աղյուսակում շատ գրառում կարող է լինել: Սա մեկ-մեկ հարաբերություն է, մեկ ուսուցիչ, բազմակի դասընթացների:

Ինչու է միմյանց հետ փոխհարաբերություն հաստատելը կարեւոր է

Մեկից-շատ հարաբերություններ ներկայացնելու համար անհրաժեշտ է առնվազն երկու սեղան: Տեսնենք, թե ինչու:

Գուցե մենք ստեղծել ենք «Ուսուցիչների սեղան», որտեղ մենք ուզում էինք դասագրվել անունը եւ դասընթացները: Մենք կարող ենք նման ձեւակերպել:

Ուսուցիչները եւ դասընթացները
Ուսուցիչ_ID Ուսուցիչ_Name Դասընթաց
Ուսուցիչ_001 Կարմեն Կենսաբանություն
Ուսուցիչ_002 Վերոնիկա Մաթեմատիկա
Ուսուցիչ_003 Խորխե Անգլերեն

Իսկ եթե Carmen սովորեցնում է երկու կամ ավելի դասընթացներ: Այս նախագծով մենք ունենք երկու տարբերակ: Մենք կարող էինք պարզապես ավելացնել այն Carmen- ի առկա ռեկորդը, ինչպես դա:

Ուսուցիչները եւ դասընթացները
Ուսուցիչ_ID Ուսուցիչ _Name Դասընթաց
Ուսուցիչ_001 Կարմեն Կենսաբանություն, Մաթեմատիկա
Ուսուցիչ_002 Վերոնիկա Մաթեմատիկա
Ուսուցիչ_003 Խորխե Անգլերեն

Այնուամենայնիվ, վերոնշյալ նախագծումը անխուսափելի է եւ կարող է հետագայում խնդիրներ առաջացնել այն ժամանակ, երբ փորձում եք ներդնել, խմբագրել կամ ջնջել տվյալները:

Դա դժվարացնում է տվյալների որոնումը: Այս դիզայնը խախտում է տվյալների բազայի նորմավորման առաջին սկզբունքը, Առաջին Normal Form (1NF) , որը նշում է, որ յուրաքանչյուր աղյուսակի բջիջը պետք է պարունակի մեկ, առանձին տվյալներ:

Մեկ այլ դիզայնի այլընտրանք կարող է լինել պարզապես Կարմենի համար երկրորդ ձայնագրությունը ավելացնել.

Ուսուցիչները եւ դասընթացները
Ուսուցիչ _ID Ուսուցիչ _Name Դասընթաց
Ուսուցիչ_001 Կարմեն Կենսաբանություն
Ուսուցիչ_001 Կարմեն Մաթեմատիկա
Ուսուցիչ_002 Վերոնիկա Մաթեմատիկա
Ուսուցիչ_003 Խորխե Անգլերեն

Սա հավատարիմ է 1NF- ին, սակայն դեռեւս վատ տվյալների բազայի նախագծում է, քանի որ այն արտացոլում է ավելորդություն եւ կարող է արմատախիլ անել մի շատ մեծ բազա անհարկի: Ավելի կարեւոր է, տվյալները կարող են դառնալ անհամապատասխան: Օրինակ, եթե Carmen- ի անունը փոխվել է: Տվյալների հետ աշխատող ինչ-որ մեկը կարող է իր անունը նորացնել մեկ գրառում եւ չկարողանա թարմացնել այն երկրորդ գրառում: Այս դիզայնը խախտում է երկրորդ բնական ձեւը (2NF), որը հավատարիմ է 1NF- ին եւ պետք է նաեւ խուսափի բազում գրառումների վերատպումից `տվյալների բազմազանությունը բաժանելով բազմակի աղյուսակներում եւ դրանց միջեւ կապ ստեղծելով:

Ինչպես ձեւավորել տվյալների շտեմարան, մեկ-մի քանի հարաբերություններով

Ուսուցիչների եւ դասընթացների սեղանի վրա մեկից-շատ հարաբերություններ իրականացնելու համար սեղանները բաժանվում ենք երկու եւ կապում ենք դրանք օտար բանալու միջոցով :

Այստեղ մենք հեռացրեցինք դասընթացի սյունը Ուսուցիչների սեղանին.

Ուսուցիչները
Ուսուցիչ _ID Ուսուցիչ _Name
Ուսուցիչ_001 Կարմեն
Ուսուցիչ_002 Վերոնիկա
Ուսուցիչ_003 Խորխե

Եվ ահա դասընթացների սեղանն է: Նշենք, որ իր արտասահմանյան բանալին Teacher_ID- ը դասընթաց է վարվում Ուսուցիչների սեղանին:

Դասընթացներ
Course_ID- ը Դասընթացի անվանումը Ուսուցիչ_ID
Course_001 Կենսաբանություն Ուսուցիչ_001
Course_002 Մաթեմատիկա Ուսուցիչ_001
Course_003 Անգլերեն Ուսուցիչ_003

Արտասահմանյան բանալին օգտագործելով Ուսուցիչների եւ դասընթացների սեղանի միջեւ հարաբերություն ենք ստեղծել:

Սա մեզ ասում է, որ Կենսաբանության եւ Մաթեմատիկայի ուսուցումը Carmen- ի կողմից է, եւ Jorge- ն սովորեցնում է անգլերեն:

Մենք կարող ենք տեսնել, թե ինչպես է այս դիզայնը խուսափում ցանկացած հնարավոր կրճատումներից, թույլ է տալիս անհատական ​​ուսուցիչներին ուսուցանել մի քանի դասընթացներ եւ իրականացնում է մեկից-շատ հարաբերություններ:

Տվյալների բազաները կարող են իրականացնել նաեւ մեկ-մեկ հարաբերություններ եւ շատ-շատերի հարաբերություններ: