Zoals u wellicht al weet, gebruiken databases tabellen om informatie te organiseren. (Als u geen basisbekendheid met databaseconcepten hebt, leest u Wat is een database?). Elke tabel bestaat uit een aantal rijen, die elk overeenkomen met een enkele databaserecord. Dus, hoe houden databases al deze records recht? Het is door het gebruik van toetsen.
Primaire sleutels
Het eerste type sleutel dat we zullen bespreken, is de primaire sleutel. Elke databasetabel moet een of meer kolommen hebben die zijn aangewezen als de primaire sleutel. De waarde van deze sleutel moet uniek zijn voor elke record in de database.
Stel dat we een tabel hebben met de naam Medewerkers die personeelsinformatie bevat voor elke medewerker in ons bedrijf. We moeten een geschikte primaire sleutel selecteren die elke medewerker uniek identificeert. Uw eerste gedachte zou kunnen zijn om de naam van de werknemer te gebruiken. Dit zou niet goed uitpakken omdat het denkbaar is dat je twee werknemers met dezelfde naam zou aannemen. Een betere keuze zou kunnen zijn om een uniek werknemers-ID-nummer te gebruiken dat u aan elke werknemer toewijst wanneer ze worden aangenomen. Sommige organisaties kiezen ervoor om socialezekerheidsnummers (of soortgelijke overheidsidentificaties) voor deze taak te gebruiken, omdat elke medewerker er al een heeft en ze gegarandeerd uniek zijn. Het gebruik van socialezekerheidsnummers voor dit doel is echter zeer controversieel vanwege privacykwesties. (Als u voor een overheidsorganisatie werkt, kan het gebruik van een sofi-nummer zelfs illegaal zijn volgens de Privacy Act van 1974.) Om deze reden zijn de meeste organisaties overgestapt op het gebruik van unieke ID's (werknemer-ID, studenten-ID, enz.) .) die deze privacyproblemen niet delen.
Nadat u een primaire sleutel hebt bepaald en de database hebt ingesteld, zal het databasebeheersysteem de uniekheid van de sleutel afdwingen. Als u probeert een record in een tabel in te voegen met een primaire sleutel die een bestaande record dupliceert, mislukt de invoeging.
De meeste databases zijn ook in staat om hun eigen primaire sleutels te genereren. Microsoft Access kan bijvoorbeeld worden geconfigureerd om het gegevenstype AutoNummering te gebruiken om een uniek ID toe te wijzen aan elk record in de tabel. Hoewel het effectief is, is dit een slechte ontwerppraktijk omdat het u een betekenisloze waarde geeft in elk record in de tabel. Waarom zou je die ruimte niet gebruiken om iets nuttigs op te slaan?
Vreemde sleutels
Het andere type is de externe sleutel, die wordt gebruikt om relaties tussen tabellen te maken. Er bestaan natuurlijke relaties tussen tabellen in de meeste databasestructuren. Terugkomend op onze medewerkersdatabase, stel je voor dat we een tabel met afdelingsinformatie wilden toevoegen aan de database. Deze nieuwe tabel kan Afdelingen worden genoemd en bevat een grote hoeveelheid informatie over de afdeling als geheel. We willen ook informatie over de werknemers op de afdeling opnemen, maar het zou overbodig zijn om dezelfde informatie in twee tabellen (Medewerkers en Afdelingen) te hebben. In plaats daarvan kunnen we een relatie tussen de twee tabellen maken.
Laten we aannemen dat de tabel Afdelingen de kolom Afdelingsnaam als primaire sleutel gebruikt. Om een relatie tussen de twee tabellen te creëren, voegen we een nieuwe kolom toe aan de tabel Werknemers met de naam Afdeling. Vervolgens vullen we de naam in van de afdeling waartoe elke medewerker behoort. We informeren ook het databasebeheersysteem dat de kolom Afdeling in de tabel Werknemers een externe sleutel is die verwijst naar de tabel Afdelingen. De database zal vervolgens de referentiële integriteit afdwingen door ervoor te zorgen dat alle waarden in de kolom Afdelingen van de tabel Werknemers overeenkomstige vermeldingen in de tabel Afdelingen hebben.
Merk op dat er geen uniekheidsbeperking is voor een externe sleutel. We hebben (en waarschijnlijk ook) meer dan één werknemer die tot een enkele afdeling behoort. Evenzo is het niet vereist dat een vermelding in de tabel Afdelingen een overeenkomstige vermelding in de tabel Werknemers heeft. Het is mogelijk dat we een afdeling hebben zonder werknemers.
Lees Vreemde sleutels maken voor meer informatie over dit onderwerp.