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ë regjistrime të lidhura në tabelën B, por çdo 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ë zemër të dizajnit të mirë.
Bazat e të dhënave mund të zbatojnë gjithashtu një marrëdhënie një-me-një dhe një marrëdhënie shumë-me-shumë.
Shembull i një marrëdhënieje një me shumë
Merrni parasysh marrëdhënien midis një mësuesi dhe kurseve që ata japin. Një mësues mund të mësojë disa klasa, por kursi nuk do të kishte të njëjtën marrëdhënie me mësuesin.
Prandaj, për çdo rekord në tabelën e Mësuesve, mund të ketë shumë regjistrime në tabelën e Kurseve. Ky shembull ilustron një marrëdhënie një me shumë: një mësues me shumë kurse.
Pse është e rëndësishme krijimi i një marrëdhënieje një me shumë
Për të përfaqësuar një marrëdhënie një me shumë, ju nevojiten të paktën dy tabela. Le të shohim pse.
Aderimi në modelin e parë normal të formës
Ndoshta kemi krijuar një tabelë në të cilën duam të regjistrojmë emrin dhe lëndët e mësuara. Ne mund të hartojmë një tabelë të mësuesve dhe kurseve si kjo:
Teacher_ID | Emri_Mësues | Kurs |
---|---|---|
Teacher_001 | Carmen | Biologji |
Teacher_002 | Veronica | Matematikë |
Teacher_003 | Jorge | Anglisht |
Po sikur Carmen të mësojë dy ose më shumë kurse? Ne kemi dy opsione me këtë dizajn. Ne mund ta shtojmë atë në rekordin ekzistues të Carmen, si kjo:
Teacher_ID | Mësues_Emri | Kurs |
---|---|---|
Teacher_001 | Carmen | Biologji, Matematikë |
Teacher_002 | Veronica | Matematikë |
Teacher_003 | Jorge | Anglisht |
Megjithatë, dizajni i mësipërm është jo fleksibël dhe mund të rezultojë në probleme më vonë kur futni, modifikoni ose fshini të dhënat. E bën të vështirë kërkimin e të dhënave.
Ky dizajn shkel gjithashtu parimin e parë të normalizimit të bazës së të dhënave, Forma e Parë Normale (1NF), e cila thotë se çdo qelizë e tabelës duhet të përmbajë një pjesë të vetme, diskrete të të dhënave.
Rregulli i dytë i formës normale
Një alternativë tjetër dizajni mund të jetë shtimi i një rekordi të dytë për Carmen:
Mësues_ID | Mësues_Emri | Kurs |
---|---|---|
Teacher_001 | Carmen | Biologji |
Teacher_001 | Carmen | Matematikë |
Teacher_002 | Veronica | Matematikë |
Teacher_003 | Jorge | Anglisht |
Kjo qasje i përmbahet 1NF, por është ende një dizajn i dobët i bazës së të dhënave, sepse paraqet tepricë dhe mund të fryjë një bazë të dhënash 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, po sikur të ndryshonte emri i Carmen? Dikush që punon me të dhënat mund të përditësojë emrin e saj në një regjistrim dhe të mos e përditësojë atë në rekordin e dytë.
Ky dizajn shkel standardin e Formës së Dytë Normale (2NF), i cili i përmbahet 1NF dhe duhet gjithashtu të shmangë tepricat e regjistrimeve të shumta. Rregulli 2NF e arrin këtë duke ndarë nëngrupe të dhënash në tabela të shumta dhe duke krijuar një marrëdhënie midis tyre.
Si të hartoni një bazë të dhënash me marrëdhënie një-në-shumë
Për të zbatuar një marrëdhënie një me shumë në tabelën Mësuesit dhe Kurset, ndani tabelat në dy dhe lidhini ato duke përdorur një çelës të huaj.
Këtu, hoqëm kolonën e Kursit në tabelën Mësuesit:
Mësues_ID | Mësues_Emri |
---|---|
Teacher_001 | Carmen |
Teacher_002 | Veronica |
Teacher_003 | Jorge |
Dhe këtu është tabela e Kurseve. Vini re se çelësi i tij i huaj, Teacher_ID, lidh një kurs me një mësues në tabelën Teachers:
ID_Kursi | Emri_kursi | Teacher_ID |
---|---|---|
Kursi_001 | Biologji | Teacher_001 |
Kursi_002 | Matematikë | Teacher_001 |
Kursi_003 | Anglisht | Teacher_003 |
Ne kemi zhvilluar një marrëdhënie ndërmjet tabelës Mësuesit dhe Kurset duke përdorur një çelës të huaj. Ky rregullim na tregon se Carmen jep mësim biologji dhe matematikë dhe se Jorge jep anglisht.
Ne mund të shohim se si ky dizajn shmang çdo tepricë të mundshme, lejon mësuesit individual të japin mësime të shumëfishta dhe zbaton një marrëdhënie një me shumë.