Databasisverhoudings is die ruggraat van alle relationele databasisse
'N Verhouding word gevestig tussen twee databasis tabelle wanneer een tabel 'n vreemde sleutel het wat die primêre sleutel van 'n ander tabel verwys. Dit is die basiese konsep agter die term relasionele databasis.
Hoe 'n buitelandse sleutel werk om 'n verhouding te vestig
Kom ons kyk na die basiese beginsels van primêre en vreemde sleutels. 'N Primêre sleutel identifiseer elke rekord in die tabel uniek. Dit is 'n tipe kandidaat-sleutel wat gewoonlik die eerste kolom in 'n tabel is en kan outomaties deur die databasis gegenereer word om te verseker dat dit uniek is.
'N Buitelandse sleutel is 'n ander kandidaat sleutel (nie die primêre sleutel nie) wat gebruik word om 'n rekord te koppel aan data in 'n ander tabel.
Kyk byvoorbeeld na hierdie twee tabelle wat identifiseer watter onderwyser watter kursus leer.
Hier is die Kursustafel se primêre sleutel Kursus_ID. Sy vreemde sleutel is Teacher_ID:
Course_ID | Kursus naam | Teacher_ID |
---|---|---|
Course_001 | Biologie | Teacher_001 |
Course_002 | wiskunde | Teacher_001 |
Course_003 | Engels | Teacher_003 |
U kan sien dat die vreemde sleutel in Kursusse by 'n primêre sleutel in Onderwysers pas:
Teacher_ID | Teacher_Name |
---|---|
Teacher_001 | Carmen |
Teacher_002 | Veronica |
Teacher_003 | Jorge |
Ons kan sê dat die onderwyser_ID vreemde sleutel gehelp het om 'n verhouding tussen die kursusse en die onderwysers-tabelle te vestig.
Tipes databasisverwantskappe
Deur vreemde sleutels of ander kandidaat sleutels te gebruik, kan jy drie tipes verhoudings tussen tabelle implementeer:
Een-tot-een : Hierdie tipe verhouding laat slegs een rekord aan elke kant van die verhouding toe.
Die primêre sleutel hou verband met slegs een rekord - of nie - in 'n ander tabel. Byvoorbeeld, in 'n huwelik het elke eggenoot slegs een ander gade. Hierdie soort verhouding kan geïmplementeer word in 'n tafel en gebruik dus nie 'n vreemde sleutel nie.
Een-tot-baie : 'n Een-tot-baie-verhouding kan 'n enkele rekord in een tabel verwant wees aan veelvuldige rekords in 'n ander tabel.
Oorweeg 'n besigheid met 'n databasis met kliënte en bestellings tabelle.
'N Enkele klant kan verskeie bestellings koop, maar 'n enkele bestelling kan nie aan verskeie kliënte gekoppel word nie. Die tabel Orders bevat dus 'n vreemde sleutel wat ooreenstem met die primêre sleutel van die tabel Klante, terwyl die Klante-tabel geen vreemde sleutel sal hê wat na die Bestellings-tabel verwys nie.
Baie-tot-baie : Dit is 'n komplekse verhouding waarin baie rekords in 'n tabel kan koppel aan baie rekords in 'n ander tabel. Byvoorbeeld, ons besigheid benodig waarskynlik nie net Klante en Bestellings-tabelle nie, maar het waarskynlik ook 'n Produkte-tabel nodig.
Weereens, die verhouding tussen die Klante en Bestellings tabel is een-tot-baie, maar kyk na die verband tussen die tabel Bestellings en Produkte. 'N Bestelling kan verskeie produkte bevat, en 'n produk kan gekoppel word aan verskeie bestellings: verskeie kliënte kan 'n bestelling indien wat 'n paar van dieselfde produkte bevat. Hierdie soort verhouding vereis ten minste drie tabelle.
Wat is databasisverhoudinge belangrik?
Die totstandbrenging van konsekwente verhoudings tussen databasis tabelle help om data integriteit te verseker, wat bydra tot databasis normalisering. Byvoorbeeld, wat as ons nie enige tabelle via 'n vreemde sleutel skakel nie en eerder die data in die Kursusse en Onderwysers-tabelle gekombineer het, soos dit:
Teacher_ID | Teacher_Name | Kursus |
---|---|---|
Teacher_001 | Carmen | Biologie, Wiskunde |
Teacher_002 | Veronica | wiskunde |
Teacher_003 | Jorge | Engels |
Hierdie ontwerp is onbuigsaam en skend die eerste beginsel van databasis normalisering, Eerste Normale Vorm (1NF), wat bepaal dat elke tafelsel 'n enkele, diskrete stuk data moet bevat.
Of dalk het ons besluit om net 'n tweede rekord vir Carmen by te voeg, om 1NF af te dwing:
Teacher_ID | Teacher_Name | Kursus |
---|---|---|
Teacher_001 | Carmen | Biologie |
Teacher_001 | Carmen | wiskunde |
Teacher_002 | Veronica | wiskunde |
Teacher_003 | Jorge | Engels |
Dit is nog steeds 'n swak ontwerp, wat onnodige duplisering plaas en wat data-anomalieë genoem word , wat net beteken dat dit kan bydra tot inkonsekwente data.
Byvoorbeeld, as 'n onderwyser veelvuldige rekords het, wat as sekere data geredigeer moet word, maar die persoon wat die data-redigering uitvoer, besef nie dat veelvuldige rekords bestaan nie? Die tabel bevat dan verskillende data vir dieselfde individu, sonder enige duidelike manier om dit te identifiseer of te vermy.
Breek hierdie tabel in twee tafels, onderwysers en kursusse (soos hierbo gekonfigureer), skep die korrekte verhouding tussen die data en help dus om data konsekwentheid en akkuraatheid te verseker.