Unu-al-Multaj Rilatoj en Datumbazo

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:

Instruistoj kaj Kursoj
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:

Instruistoj kaj Kursoj
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:

Instruistoj kaj Kursoj
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:

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

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