'n Een-tot-baie verhouding in 'n databasis vind plaas wanneer elke rekord in Tabel A baie gekoppelde rekords in Tabel B kan hê, maar elke rekord in Tabel B mag dalk net een ooreenstemmende rekord in Tabel A hê.
'n Een-tot-baie-verhouding in 'n databasis is die mees algemene relasionele databasisontwerp en is die kern van goeie ontwerp.
Databasisse kan ook 'n een-tot-een-verhouding en 'n baie-tot-baie-verhouding implementeer.
Voorbeeld van 'n een-tot-baie-verhouding
Oorweeg die verhouding tussen 'n onderwyser en die kursusse wat hulle aanbied. 'n Onderwyser kan veelvuldige klasse aanbied, maar die kursus sal nie dieselfde verhouding met die onderwyser hê nie.
Daarom, vir elke rekord in 'n Onderwyserstabel, kan daar baie rekords in die kursusse-tabel wees. Hierdie voorbeeld illustreer 'n een-tot-baie-verhouding: een onderwyser vir verskeie kursusse.
Waarom is dit belangrik om 'n een-tot-baie-verhouding te vestig
Om 'n een-tot-baie-verhouding te verteenwoordig, benodig jy ten minste twee tabelle. Kom ons kyk hoekom.
Voldoening aan eerste normale vormontwerp
Miskien het ons 'n tabel geskep waarin ons die naam en kursusse wat aangebied word, wil aanteken. Ons kan dalk 'n onderwysers- en kursustabel soos volg ontwerp:
Teacher_ID | Onderwyser_Naam | Kursus |
---|---|---|
Teacher_001 | Carmen | Biologie |
Teacher_002 | Veronica | Math |
Teacher_003 | Jorge | Engels |
Wat as Carmen twee of meer kursusse aanbied? Ons het twee opsies met hierdie ontwerp. Ons kan dit by Carmen se bestaande rekord voeg, soos volg:
Teacher_ID | Onderwyser_Name | Kursus |
---|---|---|
Teacher_001 | Carmen | Biologie, Wiskunde |
Teacher_002 | Veronica | Math |
Teacher_003 | Jorge | Engels |
Die ontwerp hierbo is egter onbuigsaam en kan later probleme tot gevolg hê wanneer jy data invoeg, redigeer of uitvee. Dit maak dit moeilik om vir data te soek.
Hierdie ontwerp oortree ook die eerste beginsel van databasisnormalisering, First Normal Form (1NF), wat bepaal dat elke tabelsel 'n enkele, diskrete stuk data moet bevat.
Die tweede normale vormreël
'n Ander ontwerp- alternatief kan wees om 'n tweede rekord vir Carmen by te voeg:
Onderwyser_ID | Onderwyser_Name | Kursus |
---|---|---|
Teacher_001 | Carmen | Biologie |
Teacher_001 | Carmen | Math |
Teacher_002 | Veronica | Math |
Teacher_003 | Jorge | Engels |
Hierdie benadering voldoen aan 1NF, maar is steeds swak databasisontwerp omdat dit oortolligheid bekendstel en 'n groot databasis onnodig kan opblaas. Belangriker nog, die data kan inkonsekwent raak.
Byvoorbeeld, wat as Carmen se naam verander het? Iemand wat met die data werk, kan haar naam in een rekord opdateer en versuim om dit in die tweede rekord op te dateer.
Hierdie ontwerp oortree die Tweede Normale Vorm (2NF)-standaard, wat aan 1NF voldoen en ook die oortolligheid van veelvuldige rekords moet vermy. Die 2NF-reël bereik dit deur substelle data in veelvuldige tabelle te skei en 'n verhouding tussen hulle te skep.
Hoe om 'n databasis met een-tot-baie-verhoudings te ontwerp
Om 'n een-tot-veel-verhouding in die Onderwysers- en Kursusse-tabel te implementeer, breek die tabelle in twee en koppel hulle met 'n vreemde sleutel.
Hier het ons die Kursuskolom in die Onderwyserstabel verwyder:
Onderwyser_ID | Onderwyser_Name |
---|---|
Teacher_001 | Carmen |
Teacher_002 | Veronica |
Teacher_003 | Jorge |
En hier is die kursusse-tabel. Let daarop dat sy vreemde sleutel, Teacher_ID, 'n kursus aan 'n onderwyser in die Onderwyserstabel koppel:
Course_ID | Kursusnaam | Teacher_ID |
---|---|---|
Course_001 | Biologie | Teacher_001 |
Course_002 | Math | Teacher_001 |
Course_003 | Engels | Teacher_003 |
Ons het 'n verhouding tussen die Onderwysers en die kursusse-tabel ontwikkel deur 'n vreemde sleutel te gebruik. Hierdie reëling sê vir ons dat Carmen beide Biologie en Wiskunde onderrig en dat Jorge Engels onderrig.
Ons kan sien hoe hierdie ontwerp enige moontlike afdankings vermy, individuele onderwysers toelaat om veelvuldige kursusse te onderrig, en 'n een-tot-baie-verhouding implementeer.