Mahusiano Moja kwa Wingi katika Database

Uhusiano mmoja hadi wengi katika duka hutokea wakati kila rekodi katika Jedwali A inaweza kuwa na rekodi nyingi zilizounganishwa katika Jedwali B, lakini kila rekodi katika Jedwali B inaweza kuwa na rekodi moja tu inayofanana katika Jedwali A. Uhusiano mmoja hadi wengi katika database ni ya kawaida ya uhusiano wa uhusiano database na ni moyo wa kubuni nzuri.

Fikiria uhusiano kati ya mwalimu na kozi wanazofundisha. Mwalimu anaweza kufundisha kozi nyingi, lakini kozi haitakuwa na uhusiano sawa na mwalimu.

Kwa hiyo, kwa kila rekodi katika meza ya Walimu, kunaweza kuwa na rekodi nyingi katika meza ya Mafunzo. Hii ni uhusiano mmoja hadi wengi: mwalimu mmoja kwa kozi nyingi.

Kwa nini Kuanzisha Uhusiano Moja na Wengi ni Muhimu

Kuwakilisha uhusiano mmoja hadi wengi, unahitaji angalau meza mbili. Hebu angalia kwa nini.

Pengine tuliunda meza ya Walimu ambayo tulitaka kurekodi jina na kozi zilizofundishwa. Tunaweza kuunda kama hii:

Walimu na Mafunzo
Mwalimu_ID Mwalimu_Name Kozi
Mwalimu_001 Carmen Biolojia
Mwalimu_002 Veronica Math
Mwalimu_003 Jorge Kiingereza

Nini kama Carmen anafundisha kozi mbili au zaidi? Tuna chaguzi mbili na kubuni hii. Tunaweza tu kuongeza kwenye rekodi ya Carmen iliyopo, kama hii:

Walimu na Mafunzo
Mwalimu_ID Mwalimu __Name Kozi
Mwalimu_001 Carmen Biolojia, Math
Mwalimu_002 Veronica Math
Mwalimu_003 Jorge Kiingereza

Mpangilio juu, hata hivyo, hauwezi kubadilika na inaweza kusababisha matatizo baadaye wakati wa kujaribu kuingiza, hariri au kufuta data.

Inafanya kuwa vigumu kutafuta data. Mpangilio huu unakiuka kanuni ya kwanza ya uhalalishaji wa database, Fomu ya kwanza ya kawaida (1NF) , ambayo inasema kwamba kila kiini cha meza lazima iwe na kipande kimoja cha data.

Alternative design mbadala inaweza kuwa kuongeza tu rekodi ya pili ya Carmen:

Walimu na Mafunzo
Mwalimu _ID Mwalimu __Name Kozi
Mwalimu_001 Carmen Biolojia
Mwalimu_001 Carmen Math
Mwalimu_002 Veronica Math
Mwalimu_003 Jorge Kiingereza

Hii inashirikiana na 1NF lakini bado ni duni ya kubuni ya kubuni kwa sababu inauza redundancy na inaweza kuzuia database kubwa sana bila lazima. Muhimu zaidi, data inaweza kuwa haiendani. Kwa mfano, je! Ikiwa jina la Carmen limebadilishwa? Mtu anayefanya kazi na data anaweza kusasisha jina lake katika rekodi moja na kushindwa kuiweka kwenye rekodi ya pili. Mpangilio huu unakiuka Fomu ya Pili ya kawaida (2NF), inayofuata 1NF na lazima pia kuepuka uharibifu wa rekodi nyingi kwa kutenganisha subsets ya data katika meza nyingi na kujenga uhusiano kati yao.

Jinsi ya Kubuni Database na Mahusiano Moja kwa Wingi

Ili kutekeleza uhusiano mmoja hadi wengi katika meza ya Walimu na Mafunzo, tunavunja meza ndani ya mbili na kuwaunganisha kwa kutumia ufunguo wa kigeni .

Hapa, tumeondoa safu ya kozi katika meza ya Walimu:

Walimu
Mwalimu _ID Mwalimu __Name
Mwalimu_001 Carmen
Mwalimu_002 Veronica
Mwalimu_003 Jorge

Na hapa kuna meza ya Mafunzo. Kumbuka kuwa ufunguo wake wa kigeni, Teacher_ID, unaunganisha mwalimu katika meza ya walimu:

Mafunzo
Course_ID Jina la kozi Mwalimu_ID
Kozi_001 Biolojia Mwalimu_001
Kozi_002 Math Mwalimu_001
Kozi_003 Kiingereza Mwalimu_003

Tumeanzisha uhusiano kati ya Walimu na meza ya kozi kwa kutumia ufunguo wa kigeni.

Hii inatuambia kwamba wote Biolojia na Math hufundishwa na Carmen na kwamba Jorge anafundisha Kiingereza.

Tunaweza kuona jinsi kubuni hii inavyoweza kuzuia uharibifu wowote iwezekanavyo, inaruhusu walimu binafsi kufundisha kozi nyingi, na kutumia uhusiano mmoja hadi wengi.

Takwimu zinaweza pia kutekeleza uhusiano mmoja hadi mmoja na uhusiano wa wengi hadi wengi.