# 9: Sleutel en Verwijzingen

Elke tabel in een database heeft een kolom, of een combinatie van kolommen, die **uniek** is. Daarmee wordt bedoeld dat elk woord of getal in die kolom (of de combinatie van de woorden en/of getallen in die kolommen) maar **één keer voorkomt.**

Die kolom, of combinatie van kolommen, noemen we de **(primaire) sleute**l van de tabel (in het engels primary key).

Voor een primaire steutel geldt:

* In elke rij moet in de sleutelkolom(men) iets zijn ingevuld.
* Deze waarden (of combinaties van waarden) zijn verschillend voor alle rijen.

Bij de tabellen van de database bibliotheek, die in het vorige hoofdstuk beschreven is, heb je ook primaire sleutels.

Bij de tabel leerlingen is het sleutelveld de kolom llnr. Als je het llnr weet dan weet je precies welke leerling er bedoeld wordt.

Als je de kolom naam als sleutelveld kiest dan heb je een probleem als er twee leerlingen met dezelfde naam zijn.

Wel zou je het mobiele nummer als sleutel kunnen kiezen, want twee leden met hetzelfde mobiele nummer zullen niet voorkomen. Als er verschillende mogelijkheden zijn om een sleutel te kiezen dan noem je dat **kandidaat-sleutels**. Meestal kies je als **primaire sleutel** de eenvoudigste kandidaat-sleutel; het liefst **één kolom**, en vaak wordt er daarom een extra kolom toegevoegd met een nummer, die dan als sleutelveld dienst doet.&#x20;

De tabellen van de database bibliotheek staan niet los van elkaar, er bestaat een bepaald verband tussen de meeste tabellen; ze hebben een relatie.

In de tabel uitleningen staan bijvoorbeeld leerlingennummers (llnr). Als je wilt weten wie bij een gegeven llnr hoort, dan moet je dat opzoeken in de leerlingen tabel.

Zo'verband tussen de gegevens in de ene tabel en die in een andere tabel noem je een **verwijzing of referentie-sleutel**, in het engels **foreign key**.

Verwijzingen kunnen door een RDBMS (database programma) worden gecontroleerd. Als je bij een uitlening als boeknummer een nummer invult, dat niet voorkomt bij de boeken-tabel, dan kan het programma een foutmelding geven. Tenminste als in het programma is aangegeven dat die relatie er is.

Het controleren van de verwijzingen noemen we het bewaken van de **referentiële integriteit**.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://metis-montessori-lyceum.gitbook.io/informatica/modules/databases/9-sleutel-en-verwijzingen.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
