Et forhold etableres mellom to databasetabeller når ett bord har en fremmednøkkel som refererer til den primære nøkkelen til et annet bord. Dette er det grunnleggende konseptet bak begrepet relasjonsdatabase.
Hvordan en utenlandsk nøkkel fungerer for å etablere et forhold
La oss se på grunnleggende om primære og utenlandske nøkler. En primærnøkkel identifiserer hver enkelt post i tabellen. Det er en type kandidatnøkkel som vanligvis er den første kolonnen i et bord og kan automatisk genereres av databasen for å sikre at den er unik.
En fremmed nøkkel er en annen kandidatnøkkel (ikke den primære nøkkelen) som brukes til å koble en post til data i en annen tabell.
For eksempel, vurder disse to tabellene som identifiserer hvilken lærer som lærer hvilken kurs.
Her er kurstabellens primære nøkkel Course_ID. Dens utenlandske nøkkel er Lærer_ID:
| Course_ID | COURSE_NAME | Teacher_ID |
|---|---|---|
| Course_001 | Biologi | Teacher_001 |
| Course_002 | Matte | Teacher_001 |
| Course_003 | Engelsk | Teacher_003 |
Du kan se at den utenlandske nøkkelen i kurs samsvarer med en primærnøkkel i lærerne:
| Teacher_ID | Lærernavn |
|---|---|
| Teacher_001 | Carmen |
| Teacher_002 | Veronica |
| Teacher_003 | Jorge |
Vi kan si at den utenlandske nøkkelen til lærer_ID har bidratt til å etablere en forhold mellom kursene og lærerbordene.
Typer Database Relationships
Ved å bruke utenlandske nøkler eller andre kandidatnøkler kan du implementere tre typer relasjoner mellom tabeller:
En-til-en: Denne typen forhold tillater bare en post på hver side av forholdet.
Den primære nøkkelen gjelder bare én plate - eller ingen - i en annen tabell. For eksempel, i ekteskap, har hver ektefelle bare en annen ektefelle. Denne typen forhold kan implementeres i et enkelt bord og bruker derfor ikke en utenlandsk nøkkel.
En-til-mange: En til mange forhold tillater at en enkelt post i ett bord skal være relatert til flere poster i en annen tabell.
Vurder en bedrift med en database som har kunder og bestillingsbord.
En enkelt kunde kan kjøpe flere bestillinger, men en enkelt ordre kan ikke knyttes til flere kunder. Derfor vil ordre-tabellen inneholde en fremmednøkkel som matchet primærnøkkelen til Kunder-tabellen, mens Kunde-tabellen ikke ville ha noen utenlandsk nøkkel som peker på ordre-tabellen.
Mange-til-mange: Dette er et komplekst forhold der mange poster i et bord kan lenke til mange poster i et annet bord. For eksempel trenger vår virksomhet sannsynligvis ikke bare kunder og bestillingsbord, men har sannsynligvis også behov for et produkttabell.
Igjen er forholdet mellom tabellene Kunder og bestillinger en til mange, men vurder forholdet mellom ordre og produkter-tabellen. En ordre kan inneholde flere produkter, og et produkt kan knyttes til flere bestillinger: flere kunder kan sende inn en bestilling som inneholder noen av de samme produktene. Denne typen forhold krever minst tre tabeller.
Hva er databaseforhold viktige?
Etablering av konsistente forhold mellom databasetabeller bidrar til å sikre dataintegritet, noe som bidrar til database normalisering. For eksempel, hva om vi ikke lenker noen tabeller via en utenlandsk nøkkel og i stedet bare kombinerte dataene i kurs og lærer tabeller, slik som:
| Teacher_ID | Lærernavn | Kurs |
|---|---|---|
| Teacher_001 | Carmen | Biologi, matematikk |
| Teacher_002 | Veronica | Matte |
| Teacher_003 | Jorge | Engelsk |
Denne utformingen er ufleksibel og bryter med det første prinsippet om database normalisering, First Normal Form (1NF), som sier at hver tabellcelle skal inneholde et enkelt, diskret datatykke.
Eller kanskje vi bestemte oss for å bare legge til en nyrekord for Carmen, for å håndheve 1NF:
| Teacher_ID | Lærernavn | Kurs |
|---|---|---|
| Teacher_001 | Carmen | Biologi |
| Teacher_001 | Carmen | Matte |
| Teacher_002 | Veronica | Matte |
| Teacher_003 | Jorge | Engelsk |
Dette er fortsatt en svak design, introduserer unødvendig duplisering og det som kalles datainnføringsanomalier , som bare betyr at det kan bidra til inkonsekvente data.
For eksempel, hvis en lærer har flere poster, hva om noen data må redigeres, men personen som utfører dataredigeringen, skjønner ikke at flere poster eksisterer? Tabellen vil da inneholde forskjellige data for det samme individet, uten noen klar måte å identifisere eller unngå.
Å bryte dette bordet i to tabeller, lærere og kurs (som visualisert ovenfor) skaper det riktige forholdet mellom dataene og bidrar dermed til å sikre datakonsistens og nøyaktighet.




