Տվյալների բազայում մեկ-շատ հարաբերությունը տեղի է ունենում, երբ A աղյուսակի յուրաքանչյուր գրառում կարող է ունենալ բազմաթիվ կապակցված գրառումներ աղյուսակում B-ում, սակայն B աղյուսակի յուրաքանչյուր գրառում կարող է ունենալ միայն մեկ համապատասխան գրառում A աղյուսակում:
Տվյալների բազայում մեկ-շատ փոխհարաբերությունները ամենատարածված հարաբերական տվյալների բազայի ձևավորումն է և գտնվում է լավ դիզայնի հիմքում:
Տվյալների բազաները կարող են նաև իրականացնել մեկ առ մեկ և շատ-շատ հարաբերություններ:
Մեկից շատ հարաբերությունների օրինակ
Մտածեք ուսուցչի և նրանց կողմից դասավանդվող դասընթացների միջև փոխհարաբերությունների մասին: Ուսուցիչը կարող է մի քանի դասեր դասավանդել, բայց դասընթացը նույն հարաբերությունները չի ունենա ուսուցչի հետ:
Հետևաբար, ուսուցիչների աղյուսակի յուրաքանչյուր գրառման համար Դասընթացների աղյուսակում կարող են լինել բազմաթիվ գրառումներ: Այս օրինակը ցույց է տալիս մեկ-շատ փոխհարաբերությունները. մեկ ուսուցիչ մի քանի դասընթացների հետ:
Ինչու է կարևոր մեկից շատ հարաբերություններ հաստատել
Մեկ-շատ հարաբերությունները ներկայացնելու համար ձեզ անհրաժեշտ է առնվազն երկու աղյուսակ: Տեսնենք, թե ինչու։
Հավատարմություն առաջին նորմալ ձևի ձևավորմանը
Միգուցե մենք ստեղծել ենք աղյուսակ, որտեղ ցանկանում ենք գրանցել դասավանդվող անունն ու դասընթացները: Մենք կարող ենք ձևավորել «Ուսուցիչների և դասընթացների» աղյուսակը այսպես՝
Teacher_ID | Ուսուցչի_անուն | Դասընթաց |
---|---|---|
Ուսուցիչ_001 | Կարմեն | Կենսաբանություն |
Ուսուցիչ_002 | Վերոնիկա | Math |
Ուսուցիչ_003 | Խորխե | Անգլերեն |
Իսկ եթե Կարմենը դասավանդի երկու կամ ավելի դասընթաց: Այս դիզայնով մենք ունենք երկու տարբերակ. Մենք կարող ենք այն ավելացնել Կարմենի գոյություն ունեցող ռեկորդին, այսպես՝
Teacher_ID | Ուսուցիչ_Անուն | Դասընթաց |
---|---|---|
Ուսուցիչ_001 | Կարմեն | Կենսաբանություն, մաթեմատիկա |
Ուսուցիչ_002 | Վերոնիկա | Math |
Ուսուցիչ_003 | Խորխե | Անգլերեն |
Սակայն, վերը նշված դիզայնը ճկուն չէ և կարող է հետագայում խնդիրներ առաջացնել, երբ դուք տվյալները տեղադրեք, խմբագրեք կամ ջնջեք: Դա դժվարացնում է տվյալների որոնումը։
Այս դիզայնը խախտում է նաև տվյալների բազայի նորմալացման առաջին սկզբունքը՝ Առաջին նորմալ ձևը (1NF), որը նշում է, որ աղյուսակի յուրաքանչյուր բջիջ պետք է պարունակի մեկ, առանձին տվյալներ։
Երկրորդ նորմալ ձևի կանոն
Դիզայնի մեկ այլ այլընտրանք կարող է լինել Կարմենի համար երկրորդ ռեկորդ ավելացնելը.
Ուսուցիչ_ID | Ուսուցիչ_Անուն | Դասընթաց |
---|---|---|
Ուսուցիչ_001 | Կարմեն | Կենսաբանություն |
Ուսուցիչ_001 | Կարմեն | Math |
Ուսուցիչ_002 | Վերոնիկա | Math |
Ուսուցիչ_003 | Խորխե | Անգլերեն |
Այս մոտեցումը հավատարիմ է 1NF-ին, բայց դեռևս տվյալների բազայի վատ ձևավորում է, քանի որ այն ներմուծում է ավելորդություն և կարող է անհարկի փչացնել մեծ տվյալների բազան: Ավելի կարևոր է, որ տվյալները կարող են անհամապատասխան լինել:
Օրինակ, իսկ եթե Կարմենի անունը փոխվեր: Տվյալների հետ աշխատող ինչ-որ մեկը կարող է թարմացնել իր անունը մեկ գրառումով և չթարմացնել այն երկրորդ գրառումում:
Այս դիզայնը խախտում է Երկրորդ նորմալ ձևի (2NF) ստանդարտը, որը համապատասխանում է 1NF-ին և պետք է նաև խուսափի բազմաթիվ գրառումների ավելորդություններից: 2NF կանոնը հասնում է դրան՝ տվյալների ենթաբազմությունները բաժանելով բազմաթիվ աղյուսակների և ստեղծելով նրանց միջև հարաբերություններ:
Ինչպես ձևավորել տվյալների բազա՝ մեկից շատ հարաբերություններով
Ուսուցիչներ և դասընթացներ աղյուսակում մեկ-շատ փոխհարաբերություններ իրականացնելու համար աղյուսակները բաժանեք երկու մասի և կապեք դրանք օտար բանալիով:
Այստեղ մենք հեռացրինք Դասընթացի սյունակը ուսուցիչների աղյուսակում.
Ուսուցիչ_ID | Ուսուցիչ_Անուն |
---|---|
Ուսուցիչ_001 | Կարմեն |
Ուսուցիչ_002 | Վերոնիկա |
Ուսուցիչ_003 | Խորխե |
Եվ ահա Դասընթացների աղյուսակը: Նկատի ունեցեք, որ դրա օտարերկրյա բանալին՝ Teacher_ID, դասընթացը կապում է ուսուցչի հետ ուսուցիչների աղյուսակում՝
Դասընթացի_ID | Դասընթացի_անվանում | Teacher_ID |
---|---|---|
Դասընթաց_001 | Կենսաբանություն | Ուսուցիչ_001 |
Դասընթաց_002 | Math | Ուսուցիչ_001 |
Դասընթաց_003 | Անգլերեն | Ուսուցիչ_003 |
Մենք մշակել ենք հարաբերություններ ուսուցիչների և Դասընթացների աղյուսակի միջև՝ օգտագործելով օտար բանալի: Այս դասավորությունը մեզ ասում է, որ Կարմենը դասավանդում է և՛ կենսաբանություն, և՛ մաթեմատիկա, և որ Խորխեն անգլերեն է դասավանդում:
Մենք կարող ենք տեսնել, թե ինչպես է այս դիզայնը խուսափում ցանկացած հնարավոր ավելորդություններից, թույլ է տալիս առանձին ուսուցիչներին դասավանդել մի քանի դասընթացներ և իրականացնում է մեկ-շատ հարաբերություններ: