Unu-al-multaj rilatoj en datumbazo okazas kiam ĉiu rekordo en Tablo A povas havi multajn ligojn en Tabelo B, sed ĉiu registro en Tablo B povas havi nur unu respondan registron en Tabelo A. Unu-al-multaj rilatoj en datumbazo estas la plej komuna rilata datumbazo kaj estas en la koro de bona dezajno.
Konsideru la rilaton inter instruisto kaj la kursoj kiujn ili instruas. Instruisto povas instrui multajn kursojn, sed la kurso ne havus la saman rilaton kun la instruisto.
Sekve, por ĉiu registro en tablo de Majstroj, ekzistas multaj registroj en la Kursa tablo. Ĉi tiu estas unu-al-multaj rilatoj: unu instruisto al pluraj kursoj.
Kial establi Unu-al-Multaj Rilatoj estas Grava
Por reprezenti unu-al-multaj rilatoj, vi bezonas almenaŭ du tabulojn. Vidu, kial.
Eble ni kreis Majstablan tablon, en kiu ni volis registri la nomon kaj kursojn instruitajn. Ni povus desegni ĝin kiel ĉi:
Majstro_ID | Majstro_Name | Kurso |
---|---|---|
Majstro_001 | Carmen | Biologio |
Majstro_002 | Veronica | Matematiko |
Majstro_003 | Georgo | Angla |
Kion se Carmen instruas du aŭ pli kursojn? Ni havas du eblojn kun ĉi tiu dezajno. Ni nur povus aldoni ĝin al la ekzistanta rekordo de Carmen, kiel ĉi tiu:
Majstro_ID | Majstro _Name | Kurso |
---|---|---|
Majstro_001 | Carmen | Biologio, Matematiko |
Majstro_002 | Veronica | Matematiko |
Majstro_003 | Georgo | Angla |
La dezajno supre, tamen, estas nefleksebla kaj povus rezultigi problemojn poste provinte enmeti, redakti aŭ forviŝi datumojn.
Ĝi malfacilas serĉi datumojn. Ĉi tiu dezajno malobservas la unuan principojn de datumbazo, Unua Normala Formo (1NF) , kiu deklaras, ke ĉiu tablo-ĉelo devus enhavi solan diskretan datumon.
Alia alternativa dezajno povus esti simple aldoni duan rekordon por Carmen:
Majstro _ID | Majstro _Name | Kurso |
---|---|---|
Majstro_001 | Carmen | Biologio |
Majstro_001 | Carmen | Matematiko |
Majstro_002 | Veronica | Matematiko |
Majstro_003 | Georgo | Angla |
Ĉi tio aliĝas al 1NF sed ankoraŭ estas malriĉa datumbaza dezajno ĉar ĝi enkondukas redundon kaj povus floregi tre grandan datumbazon nenecese. Pli grave, la datumoj povus fariĝi malkonstantaj. Ekzemple, kio se la nomo de Carmen ŝanĝiĝis? Iu, kiu laboras kun la datumoj, povus ĝisdatigi ŝian nomon en unu rekordo kaj ne ĝisdatigi ĝin en la dua rekordo. Ĉi tiu dezajno malobservas Duan Normalan Formon (2NF), kiu aliĝas al 1NF kaj devas ankaŭ eviti la redundojn de multnombraj rekordoj apartigante subaĵojn de datumoj en multoblajn tabulojn kaj kreante interrilaton inter ili.
Kiel Desegni Datumaron Kun Unu-al-Multaj Rilatoj
Por efektivigi unu-al-multaj rilatoj en la tablo de Instruistoj kaj Kursoj, ni rompas la tabulojn en du kaj ligas ilin per fremda ŝlosilo .
Jen ni forigis la Kurskolumon en la Majstro-tablo:
Majstro _ID | Majstro _Name |
---|---|
Majstro_001 | Carmen |
Majstro_002 | Veronica |
Majstro_003 | Georgo |
Kaj jen la Kursoj-tablo. Notu, ke ĝia eksterlanda ŝlosilo, Teacher_ID, ligas kurson al instruisto en la tablo de Majstroj:
Course_ID | Kurso_Name | Majstro_ID |
---|---|---|
Kurso_001 | Biologio | Majstro_001 |
Kurso_002 | Matematiko | Majstro_001 |
Kurso_003 | Angla | Majstro_003 |
Ni disvolvis interrilaton inter la Majstroj kaj la Kursoj-tablo per fremda ŝlosilo.
Ĉi tio diras al ni, ke ambaŭ Biologio kaj Matematiko estas instruitaj de Carmen kaj ke Georgo instruas la anglan.
Ni povas vidi, kiel ĉi tiu dezajno evitas ajnajn eblajn redundojn, permesas al individuaj instruistoj instrui multoblajn kursojn kaj efektivigi unu-al-multaj rilatoj.
Datumbazoj ankaŭ povas efektivigi unu-al-unu rilaton kaj multajn al multajn rilatojn.