[hand]
Relationele databases
In deze handleiding vertel ik het n en ander over relationele databases. Wat het zijn, hoe het werkt en waarom dit het meestgebruikte database methode is.
Databases
In het dagelijks leven werken wij dagelijks met databases. Een database is immers de eenvoudigste wijze om gegevens te representeren. Een database is te vergelijken met een kaartenbak. In een kaartenbak kan je op eenvoudige wijze een kaart toevoegen, een kaart verwijderen of een een kaart bewerken. Ook is een kaartenbak op n wijze gesorteerd. Bijvoorbeeld op auteur in de bibliotheek.
Een database is te definieren als een hoeveelheid met elkaar verbandhoudende gegevens met veelal een onderlinge relatie.
Architectuur
De structuur van een database is gebaseerd op een zogenoemd drieschema-architectuur. Dit houdt in dat een database op drie niveau's werkt, te weten de volgende niveau's
- Intern niveau
- Conceptueel niveau
- Extern niveau
Intern niveau
Het interne niveau is de fysieke beschrijving van de database. In dit niveau is vastgelegd op welk media de gegevens worden gerealiseerd, maar ook hoe de samenhang tussen gegevens in elkaar steekt.
Ook beschrijft dit niveau hoe de toegangspaden zijn beschreven. Dit kan sequentiel, geindexeerd sequentieel of anders zijn. Hier kom ik later nog op terug.
Dit niveau is eigenlijk de administratie van de database. Het DBMS , DataBase Managment System, gebruikt dit niveau om de database te bewerken en weer te geven.
Als er iets veranderd wordt in de fysieke structuur van een database en dat heeft geen gevolg voor de werking van de programma's noemen we dat
fysieke gegevensonafhankelijkheid. Kortom laat je de database in een andere map op de server opslaan en heeft dat geen gevolg voor het programma... dan spreken we over fysieke gegevensonafhankelijkheid.
Conceptueel niveau
Het conceptuele niveau is een wat eenvoudiger te begrijpen niveau omdat dit het werkelijke database ontwerp is. Dit is een weergave van de logische structuur van de website en er staat in beschreven welke attributen er bij elkaar horen, het maximumaantal tekens, maar ook welke verbanden er bestaan tussen de gegevens.
Daarnaast vind je in dit schema ook nog wat integriteitsregels.
Het belangrijkste aan een database is dat hij betrouwbaar en consistent is. Als je in het ne programma het adres van meneer Jansen opvraagt moet dat wel hetzelfde zijn als in het andere programma. Een datasbase mag geen tegenstrijdige gegevens verstrekken.
Als dit wel het geval is noemen we de database corrupt.
Wanneer het conceptuele schema verandert, bijvoorbeeld er komt een extra kolom bij en dat heeft geen gevolgen voor het programma. Het programma kan zonder aanpassingen doorwerken, dan noemen we dat logische gegevensonafhankelijkheid.
Extern niveau
Het externe niveau is een subschema van het conceptuele schema. Het is dus een deelbeschrijving die kolommen van het conceptuele niveau bevat. Een ander word voor extern niveau is ook wel
view.
Dit is bijvoorbeeld handig om te programmeren in het gebruik van een ledensysteem. Door een aparte view te maken van alleen naam & adresgegevens is deze eenvoudig op te vragen.
Het relationele model
Nu we weten hoe de architectuur van een database er uit ziet, kunnen we eens naar een relationele database kijken.
Er is een simpele reden waarom relationele databases zo populair zijn . De grondslag van het relationele model ligt namelijk in de wiskunde en vooral de theoretici putten hier veel vertrouwen uit.
Kortom we gaan even de wiskunde induiken.
Verzamelingen
In de wiskunde wordt een verzameling gedefinieerd als een verzamelijk gelijksoortige elementen. Ook een namen van voetbalspeleres of kentekens kunnen verzameling vormen in de wiskunde, niet alleen maar getallen.
Een element in een verzameling komt maar n keer voor en heeft geen volgorde. Zo geldt dus het volgende:
{a,b} = {b,a}
Op een verzameling kun je dus ook wiskundige operatoren uitvoeren. We nemen de belangrijkste even door.
In de onderstaande voorbeelden gelden de volgende verzamelingen.
Verzameling A = {a,b,c}
Verzameling B = {b,y,z}
Unie
De samenvoeging van beide relaties noemen we de unie. De unie van A en B is dan ook:
A B = {a,b,c,y,z}
Intersectie
De intersectie zijn de elementen die in alle verzamelingen voorkomen.
A B = {b}
Verschil
Het verschil tussen de verzamelingen
A\B = {a,c}
Cartetisch product
Om het product van twee verzamelingen te krijgen is het niet noodzakelijk dat de verzamelingen van het zelfde type zijn.
Verzameling A = {a,b}
Verzameling 1 = {1,2}
We krijgen dan het volgende cartetisch product
A * 1 = {(a,1),(a2),(b,1),(b,2)}
Een
deelverzameling van het product kan zijn: {(a,2),(b,1)}
Het cartetisch product kan je weergeven in een tabel en hier stappen we dan ook weer terug naar het principe van de relationele database.
<table>
<tr>
<td>Verzameling A</td>
<td>Verzameling 1</td>
</tr>
<tr>
<td>A</td>
<td>2</td>
</tr>
<tr>
<td>B</td>
<td>1</td>
</tr>
</table>
Een tabel en daarmee ook de database is een een groot cartetisch product van allerlei verzamelingen.
Een deelverzameling van een cartetisch product zoals hierboven in de tabel is te zien noemen we een RELATIE. Een RELATIE is dus een deelverzameling van het product van een aantal verzamelingen.
Met deze kennis is het ook een mooie kans om wat begrippen onder de aandacht te brengen.
Begrippen
Attribuut
Een relatie is dus samengesteld uit een aantal begrippen. Zo'n soort begrip noemen we een ATTRIBUUT. Als je dus een relatie auto hebt is de kleur een mogelijk ATTRIBUUT van de relatie auto.
Een attribuut mag niet zomaar allerlei waardes aannemen. Dit wordt beperkt door het DOMEIN
Domein
Het domein is een verzameling die aangeeft welke waarden een attribuut mag aannemen. In de voorbeeld van een auto mag het bijvoorbeeld alleen maar {rood,blauw} zijn. Maar ook een minimumwaarde en maximumwaarde is mogelijk. Zo is een auto die 500km/h rijdt vrij ongeloofwaardig.
Tupel
Een tupel is een element uit de verzameling. In het voorbeeld van de verzameling auto's in een enkele auto dus een tupel.
Dit alles kunnen we terugvinden in een voorbeeld van een tabel definitie.
DOMEIN kleur bestaande uit {rood,blauw}
DOMEIN kenteken bestaande uit 8 posities
RELATIE auto
(autoKleur: Domein kleur
kenteken: Domein kenteken)
Sleutels
Zoals eerder gezegd moet ieder voorkomen in een RELATIE uniek zijn. Als je drie Jan Jansen's in je ledenbestand heeft is dat dus een probleem.
Dit kun je oplossen door iedereen een uniek lidmaatschapsnummer te geven. Zo'n lidmaatschapsnummer noemen we een sleutel omdat het een unieke identificatie is.
Deze sleutels zijn ook belangrijk om de relaties tussen de tabellen te kunnen definiren. Want ook in een deelschema moet ieder voorkomen uniek zijn.
Er zijn drie vormen van sleutels:
- Kandidaatsleutels
- Primaire sleutel
- Foreign key
Kandidaatsleutels
In een relatie zal het altijd zo zijn dat er meerdere attributen een sleutel kunnen zijn. Al deze mogelijkheden noemen we kandidaatsleutels.
Daarnaast kan ook een combinatie van attributen een kandidaatsleutel zijn. Bijvoorbeeld naam + geboorte datum.
De regel van een kandidaatsleutel is dus dat het een uniek voorkomen is in de relatie en dat het niet veel aan verandering onderhevig is.
Primaire sleutel
En van de kandidaatsleutels wordt gekozen als primaire sleutel. Deze sleutel wordt vaak voor het indexeren gebruikt. Vaak wordt deze sleutel als eerste genomed en onderstreept om aan te geven dat dit de Primaire sleutel is.
De overige kandidaatsleutels worden alternatieve sleutels genoemd.
Foreign Key
De foreign key in de ne relatie, is de primary key in de andere. De foreign key is dus de verbinding tussen de verschillende relaties. Zo kan het lidnummer als primary key optreden in de tabel LEDEN, maar als foreign key in de tabel CONTRIBUTIE.
Slotwoord
Dit was een korte en compacte inleiding op relationele databases. Ik ben hier puur ingegaan op de theorie en achterliggende gedachten van relationele databases en de bijbehorende terminologie.
Ik hoop dat je er wat wijzer van bent geworden en als je meer over databases wilt weten is er heel veel op internet over te vinden of kijks eens naar de I-Tracks module Databases & SQL Foundation.
[/hand]