Marrëdhëniet një-me-shumë në një bazë të dhënash

Një marrëdhënie një-me-shumë në një bazë të dhënash ndodh kur çdo rekord në Tabelën A mund të ketë shumë të dhëna të lidhura në Tabelën B, por secili rekord në Tabelën B mund të ketë vetëm një rekord përkatës në Tabelën A. Një marrëdhënie një-me-shumë në një bazë të dhënash është dizajni më i zakonshëm i bazës së të dhënave relacionale dhe është në qendër të dizajnit të mirë.

Konsideroni marrëdhëniet ndërmjet një mësuesi dhe kurseve që ata mësojnë. Një mësues mund të mësojë kurse të shumta, por kursi nuk do të kishte marrëdhënie të njëjta me mësuesin.

Prandaj, për secilin rekord në tabelën e mësuesve, mund të ketë shumë shënime në tabelën e kurseve. Kjo është një marrëdhënie një-me-shumë: një mësues në kurse të shumta.

Pse Krijimi i një Marrëdhënie Një-me-Shumë është e rëndësishme

Për të përfaqësuar një marrëdhënie një-me-shumë, ju duhet të paktën dy tryeza. Le të shohim pse.

Ndoshta ne krijuam një tabelë Mësuesish në të cilën dëshironim të shënonim emrin dhe kurset e mësuara. Ne mund ta dizajnojmë kështu:

Mësuesit dhe Kurse
Teacher_ID Teacher_Name kurs
Teacher_001 Carmen biologji
Teacher_002 veronikë Math
Teacher_003 jorge anglisht

Po sikur Carmen të mësojë dy ose më shumë kurse? Kemi dy opsione me këtë dizajn. Mund ta shtojmë vetëm në rekordin ekzistues të Carmen, si kjo:

Mësuesit dhe Kurse
Teacher_ID Mësues _Name kurs
Teacher_001 Carmen Biologji, Matematikë
Teacher_002 veronikë Math
Teacher_003 jorge anglisht

Sidoqoftë, dizajni i mësipërm është i paqëndrueshëm dhe mund të rezultojë me probleme më vonë kur përpiqet të futë, ndryshojë ose fshijë të dhënat.

Kjo e bën të vështirë për të kërkuar të dhëna. Ky dizajn shkel parimin e parë të normalizimit të bazës së të dhënave, Forma e Parë e Përgjithshme (1NF) , e cila thotë se çdo qelizë e tabelës duhet të përmbajë një pjesë të vetme dhe të veçantë të të dhënave.

Një tjetër alternativë e dizajnit mund të jetë thjesht të shtoni një rekord të dytë për Carmen:

Mësuesit dhe Kurse
Mësuesi _ID Mësues _Name kurs
Teacher_001 Carmen biologji
Teacher_001 Carmen Math
Teacher_002 veronikë Math
Teacher_003 jorge anglisht

Kjo i përmbahet 1NF, por është ende një dizajn i dobët i bazës së të dhënave, sepse ai paraqet tepricë dhe mund të mbizotërojë një bazë të dhënash shumë të madhe në mënyrë të panevojshme. Më e rëndësishmja, të dhënat mund të bëhen të paqëndrueshme. Për shembull, çfarë ndodh nëse emri i Carmen ndryshoi? Dikush që punon me të dhënat mund të përditësojë emrin e saj në një rekord dhe nuk e përditëson atë në rekordin e dytë. Ky dizajn shkel formën e dytë të zakonshme (2NF), e cila i përmbahet 1NF dhe gjithashtu duhet të shmangë tepricat e të dhënave të shumëfishta duke ndarë nënsitë e të dhënave në tabela të shumëfishta dhe duke krijuar një marrëdhënie mes tyre.

Si të krijoni një bazë të dhënash me një-me-shumë marrëdhënie

Për të zbatuar një marrëdhënie të vetme në shumë në tabelën e mësuesve dhe kurseve, ne i thyejmë tavolinat në dy dhe i lidhim ato duke përdorur një çelës të huaj .

Këtu, ne kemi hequr kolonën e kursit në tabelën e mësuesve:

mësuesit
Mësuesi _ID Mësues _Name
Teacher_001 Carmen
Teacher_002 veronikë
Teacher_003 jorge

Dhe këtu është tryeza e kurseve. Vini re se çelësi i tij i huaj, Teacher_ID, lidh një kurs me një mësues në tabelën e mësuesve:

kurse
Course_ID Course_Name Teacher_ID
Course_001 biologji Teacher_001
Course_002 Math Teacher_001
Course_003 anglisht Teacher_003

Ne kemi zhvilluar një marrëdhënie midis tabelës së mësuesve dhe kurseve duke përdorur një çelës të huaj.

Kjo na tregon se Biologjia dhe Matematika mësohen nga Carmen dhe Jorge mëson anglishten.

Mund të shohim se si ky dizajn shmang çdo humbje të mundshme, lejon mësuesit individualë të mësojnë kurse të shumëfishta dhe të zbatojnë një marrëdhënie të vetme.

Bazat e të dhënave gjithashtu mund të zbatojnë një marrëdhënie një-në-një dhe një marrëdhënie shumë-me-shumë.