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:
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:
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:
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:
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:
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.