# Relationeel model

Het relationele model voor databasemanagement is een databasemodel op basis van de eerste-orde predikatenlogica. Het relationele model werd in 1969 voor het eerst geformuleerd en voorgesteld door de Britse informaticus Edgar F. Codd. In het relationele model van een database worden alle data weergegeven in termen van in relaties gegroepeerde tupels. Een database die in termen van het relationele model is georganiseerd noemt men een relationele database.
Het doel van het relationele model is het voorzien in een declaratieve methode voor het specificeren van data en query's: gebruikers geven direct aan welke informatie de database bevat en welke informatie zij eruit willen halen of erin willen stoppen, terwijl de databasemanagementsysteem-software zorg draagt voor het beschrijven van de datastructuren voor het opslaan van data en de ophaalprocedures voor het beantwoorden van de query's.
De meeste implementaties van het relationele model maken gebruik van de SQL-datadefinitie en querytaal. Een tabel in een SQL-databaseschema correspondeert met een predikaatvariabele; de inhoud van een tabel naar een relatie; sleutelrestricties, andere restricties en SQL-query's corresponderen met predicaten. Geïmplementeerde SQL-databases, zoals DB2, wijken echter in vele details af van het relationele model. Codd zette zich sterk af tegen dergelijke afwijkingen die de oorspronkelijke principes compromitteren
Relationele databases zijn niet de enige manier om data op te slaan, maar zij vormen heden ten dage wel de de facto standaard in de industrie. Producten als Oracle en DB2 hebben de relationele datamodelleringstheorie sinds het einde van de jaren 80 algemeen ingang doen vinden bij bedrijven en instellingen. Daarnaast hebben desktopproducten als DBase, Microsoft Access en MySQL relationele databases vanaf het begin van de jaren negentig toegankelijk gemaakt voor het grote publiek.

## Overzicht

Het centrale idee van het relationele model is om een database te beschrijven als een collectie van predicaten over een eindige verzameling van predicaatvariabelen, die de restricties op de mogelijke waarden en combinaties van waarden beschrijft. Op elk willekeurig moment is de inhoud van de database een eindig (logisch) model van de database, dat wil zeggen een verzameling van relaties, één per predicaatvariabele, zodanig dat aan alle predicaten wordt voldaan. Een verzoek om informatie uit de database (een databasequery) is ook een predicaat.

### Alternatieven voor het relationele model

Andere modellen zijn het hiërarchische - en het netwerkmodel. Sommige systemen die gebruikmaken van deze oudere architecturen zijn heden ten dage nog steeds in gebruik in datacenters met een behoefte aan een hoog datavolume. Ook komt het voor dat de bestaande systemen zo complex en abstract zijn dat het te duur is om deze oudere systemen te migreren naar systemen waar een relationeel model aan ten grondslag ligt. Verder zijn ook de nieuwere objectgeoriënteerde databases van belang.

## Heersende verwarring in terminologie

Al te vaak wordt gedacht dat de term relationele database afkomstig is van het gebruik van relaties die tussen tabellen worden gelegd. Dit is niet het geval. Het woord relationeel is van toepassing binnen één tabel en heeft niets te maken met relaties tussen tabellen onderling. De grote verwarring hier omtrent is het gevolg van diverse factoren:
* Een relationele database bestaat in de praktijk altijd uit verschillende tabellen waartussen relaties mogelijk zijn. Intuïtief (maar helaas ook foutief) is de link tussen 'relationele database' en deze relaties al te snel gelegd.
* Daar komt nog bij dat in het Nederlands zowel de relatie-tabellen als de relaties tussen die tabellen (dus eigenlijk relaties tussen wiskundige relaties) allebei kunnen worden aangeduid met het begrip 'relatie'. In het Engels is er een onderscheid tussen 'relation' en 'relationship'.
* De fout is zover doorgedrongen dat ze ook voorkomt in boeken waarvan tot miljoenen exemplaren worden verkocht (bv. 'How computers work'), bij gerenommeerde uitgeverijen en zelfs op websites die claimen over databases en SQL te gaan. Het 'terugdraaien' is dus bijna onmogelijk geworden.
* Zoals eerder opgemerkt worden desktop-versies van relationele databases gebruikt door het (zeer) grote publiek. Basiskennis van relationele databases (multi-user, isolation, transactions, locking enz.) is niet langer meer een vereiste, en iedereen denkt al te snel weg te zijn met de relationele technologie. Hierdoor wordt al te snel uitgegaan van een kennis van de materie en in het geval van 'relationeel' zelf een eigen invulling gegeven door zelfs de grote meerderheid van de informatici.

## Relaties in databaseopslag

Een relatie in databaseopslag is een tweedimensionale tabel die wordt gebruikt om data op te slaan. Om een relatie genoemd te worden dient deze tabel aan een aantal voorwaarden te voldoen.

### Onderdelen

Een relatie bestaat uit een heading en een body. De heading bevat de attribuutnamen en de body de tuples. Een tuple is een verzameling van ongeordende attribuut-waarden, terwijl een attribuut op zijn beurt bestaat uit zijn naam en zijn waarde.
Omdat het gaat om een tweedimensionale tabel kunnen we (zij het grofweg) stellen dat:
* de heading overeenkomt met de tabelhoofding
* de body overeenkomt met de rijen daaronder
* een tuple overeenkomt met een rij,
* een attribuutwaarde overeenkomt met een waarde die in de tabel is ingevuld
* een attribuutnaam de naam is die wordt weergegeven in de tabelhoofding

### Voorwaarden

Wanneer een relatie tuples bevat (wat niet noodzakelijk is)
* moeten de tuples uniek zijn: geen twee tuples zijn dezelfde
* moeten de tuples onderling verwisselbaar zijn
* moeten de attributen onderling verwisselbaar zijn

## Tabellen en relaties
### Praktische benadering

Een tabel is een standaardmanier om gegevens op te slaan die reeds ingang vond lang voor er sprake was van databases en zelfs lang voor computers bestonden. Het is een logische en bijna intuïtieve manier van opslag die zelfs geen verdere uitleg vereist. Als het relationele model slechts hieruit bestond zou Ted Codd, de man die dit model voor het eerst beschreef in 1970, er niet zo een naam mee hebben gemaakt, en zouden software-ontwikkelaars genoegen nemen met het ontwikkelen van spreadsheetprogramma's, de tabel-applicaties bij uitstek.
Toch zijn deze intuïtieve tabellen, met rijen en kolommen, ook de basis van het relationele model. Niet alle tabellen echter voldoen aan de eisen om in aanmerking te komen voor data-opslag binnen relationele databases. Tabellen moet hiervoor voldoen aan een aantal criteria. Indien een tabel voldoet aan al deze criteria, noemen we deze tabel een relatie-variabele. Alle relaties zijn dus tabellen, maar niet alle tabellen zijn relatie-variabelen. Omdat de term relatievariabele nogal omslachtig is, wordt die in praktijk steeds afgekort tot relvar (ook in het Engels, daar kort voor relation variable)
NOOT: verder gebruiken we voor rij ook wel de term record, en kolom noemen we ook wel variabele of attribuut.
De criteria waaraan een tabel moet voldoen om een relvar te worden genoemd, zijn:
* Elke rij beschrijft juist één entiteit.
* Binnen een rij worden nooit gegevens bijgehouden over meerdere entiteiten en één entiteit wordt binnen één tabel nooit beschreven over meerdere rijen.
* Elke rij is uniek.
* Elke kolom beschrijft precies één attribuut van een entiteit, en in elke rij is de betekenis van het attribuut dezelfde.
* De volgorde van de rijen is onbelangrijk. Dit wil zeggen dat een andere volgorde van rijen nooit tot informatie-verlies kan leiden.
* De volgorde van de kolommen is onbelangrijk. Dit wil zeggen dat een andere volgorde van kolommen nooit tot informatie-verlies kan leiden.

### Wiskundige benadering: een basis
#### Inleiding

Een relatie (wiskunde) is het wiskundige begrip waarvan de term 'relationele database' is afgeleid. Ted Codd ontwikkelde indertijd het relationele model door wiskundige logica toe te passen op gegevensopslag en was daarmee de absolute grondlegger van de relationele algebra en het relationeel model en bij uitbreiding de relationele database.

#### Een relatie

Een relatie kan wiskundig gezien worden als een bepaald verband tussen verschillende verzamelingen. Dit verband kan bestaan tussen twee verzamelingen (V1 en V2) of meer (V1, V2, ...Vn) verzamelingen.

##### Koppels

Indien het verband zich stelt tussen twee verzamelingen bestaat de relatie uit een verzameling koppels. Alle mogelijke koppels die kunnen gevormd worden tussen twee verzamelingen noemen we het cartesisch product. In praktijk zal een relatie niet alle mogelijke koppels behelzen maar een deelverzameling van deze koppels.
Een voorbeeld: V1 = {1,2,3} en V2 = {2,4}. Het cartesisch product van deze relatie zijn alle mogelijke combinaties van deze twee verzamelingen: {(1,2)(1,4),(2,2),(2,4),(3,2),(3,4)}
Een voorbeeldrelatie tussen deze 2 verzamelingen zou kunnen zijn: <: V1 is kleiner dan V2. De relatie kan dan uitgedrukt worden als volgende verzameling koppels: {(1,2)(1,4)(2,4)(3,4)}
In praktijk bestaat een relatie dus uit een deelverzameling van het cartesisch product van de verzamelingen die deel uitmaken van die relatie.

##### n-tupels

Indien de relatie een verband uitdrukt tussen meer dan twee verzamelingen spreken we van een n-tupel waarbij de n staat voor de graad van de relatie (3 verzamelingen: 3-tupel, 4 verzamelingen: 4-tupel enzovoort; meer gebruikt is een n-tupel van graad 3, een n-tupel van graad 4 enz.)
Een voorbeeld van zo'n relatie is bv. x=y*z. Gesteld dat deze relatie plaatsvindt tussen de 3 verzamelingen V1, V2 en V3 waarbij x deel uitmaakt van V1, y van V2 en z van V3 en waarbij V1,V2 en V3 allemaal bestaan uit de natuurlijke getallen 2 tot en met 10 is de relatie de verzameling van 3-tupels: {(4,2,2),(6,2,3),(6,3,2),(8,2,4),(8,4,2),(9,3,3),(10,2,5),(10,5,2)}

#### De relatie: toepassing op gegevensopslag

Een relatie zoals de n-tupel van graad 3 hierboven laat zich dus schrijven door een opsomming van tupels. Wiskundig wordt dit gedaan zoals hierboven: met accolades, haakjes en komma's. Een andere mogelijke manier om hetzelfde te doen is gebruikmaken van een tabelvorm. Als hoofding worden hier dan de verzamelingen gebruikt waaruit de waarden mogelijk kunnen komen. Zo een [verzameling]heet binnen [gegevensopslag]: [het domein].
| V1 | V2 | V3 |
| 4 | 2 | 2 |
| 6 | 2 | 3 |
| 6 | 3 | 2 |
| 8 | 4 | 2 |
| 8 | 2 | 4 |
| 9 | 3 | 3 |
| 10 | 2 | 5 |
| 10 | 5 | 2 |
Bij een relatie van data is dat niet anders. Evenals als de n-tupel van graad 3 hierboven (V1=V2*V3) heeft elke relatie een omschrijving nodig van wat er precies wordt voorgesteld. Zo een omschrijving noemen we een predicaat. Bij gegevensopslag gaat dat steeds om een volzin. Het predicaat van de netgenoemde 3-tupel wordt dus:
de waarde van V1 is de waarde van V2 vermenigvuldigd met de waarde van V3.
Een concreet voorbeeld van een relatie van graad 3 kan zijn:
| KlantId | Familienaam | Voornaam |
| 1 | Eggink | Joost |
| 2 | Vermeiren | Muriel |
Het predicaat in dit geval is:
Klant met als ID 'KlantId' heeft als familienaam 'Familienaam' en als voornaam 'Voornaam'

## Voetnoten

* ↑ E.F. Codd, Derivability, Redundancy, and Consistency of Relations Stored in Large Data Banks, IBM Research Report, 1969
* ↑ E.F. Codd. "A Relational Model of Data for Large Shared Data Banks", in Communications of the ACM, 1970.
* ↑ E.F. Codd, The Relational Model for Database Management, Addison-Wesley Publishing Company, 1990, ISBN 0-201-14192-2
databasemanagementsysteem · databasemodel · databasenormalisatie · referentiële integriteit · relationele algebra · relationele database · relationeel model