Loading AI tools
Van Wikipedia, de vrije encyclopedie
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.[1][2] 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[3]
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.
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.
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.
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 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.
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:
Wanneer een relatie tuples bevat (wat niet noodzakelijk is)
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:
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 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.
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.
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)}
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'
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.