This page was saved using WebZIP 7.1.2.1052 offline browser (Unregistered) on 09/07/08 0:47:50.
Address: http://www.instruct-online.nl/docent_pagina.php?p=6346
Title: Instruct-online.nl - Electronische Leeromgeving Instruct  •  Size: 19374

M8 - Schematechnieken en databases       3 - Ontwerpen van een relationele database    Het relationele model

 

Hoofdstuk 2.1 Hoofdstuk 2.2 Hoofdstuk 2.3 Hoofdstuk 2.4 Hoofdstuk 2.5 Hoofdstuk 2.6 Hoofdstuk 3.1 Hoofdstuk 3.2 Hoofdstuk 3.3 Hoofdstuk 3.4 Hoofdstuk 3.5

1 - Het relationele model
2 - Tabellen in een relationeel model

 



1 - Het relationele model © Instruct

Verschillende modellen



Informatie over het relationele model:
www.utexas.edu

Behalve het relationele model bestaan er voor het ontwerpen van databases nog een aantal modellen, waaronder:

  • het hiërarchische model
  • het netwerkmodel
  • het objectgeoriënteerde model
Het relationele model wordt echter op dit moment het meest toegepast. Dit model is begin jaren ’70 ontworpen door E.F. Codd (1923-2003). Het was aanvankelijk bedoeld voor het ontwerpen van het gegevensmodel én als feitelijke databaseprogrammatuur. Voor het ontwerpen van het gegevensmodel wordt echter steeds meer gebruik gemaakt van Entity Relationship Modeling. Dit betekent dat de resultaten van ERM moeten worden omgezet naar een relationeel model.

 
  Begrippen in het relationele model


Het relationele model kent begrippen op twee niveaus:

  1. Het eerste niveau heeft betrekking op het ontwerpen van de database. Hier spelen de begrippen relatie, attribuut en tupel een rol.
  2. Het tweede niveau heeft betrekking op de feitelijke database. Hierbij gaat het om de begrippen tabel, kolom en rij.

De beide groepen begrippen kunnen met elkaar in verband worden gebracht:

  • Relatie komt overeen met tabel.
  • Attribuut komt overeen met kolom.
  • Tupel komt overeen met rij.

Daarnaast kent het relationele model nog begrippen die op beide niveaus gebruikt worden. Dat zijn: primaire sleutel en vreemde sleutel.

De begrippen zullen nu stuk voor stuk besproken worden.

 
  Relatie
 

Het begrip relatie heeft in het relationele model een andere betekenis dan bij ERM. In ERM betekent relatie: een verband tussen twee of meer entiteiten. In het relationele model komt ‘relatie’ overeen met ‘entiteittype’ bij ERM.

Twee zaken zijn hierbij van belang:

  • Relatie komt overeen met entiteittype, dus niet: relatie is gelijk aan entiteittype. Een relatie in het relationele model kan meer attributen omvatten dan bij ERM benoemd zijn. Een relationeel model kan ook meer relaties omvatten dan er entiteittypen zijn bij ERM. Dit verschil wordt veroorzaakt doordat de relatietypen die bij ERM zijn beschreven, bij het relationele model zo veel mogelijk worden opgenomen in de relaties. Een groot deel van dit gedeelt evan de theorie gaat over deze problematiek.

  • Relatie komt overeen met entiteittype. Het begrip relatie ligt dus op type-niveau. Dit is een verschil dat je verderop ook bij het begrip attribuut zult tegenkomen.

Relatie in het relationele model
Een relatie in het relationele model omvat de opsomming van alle attributen die bij elkaar horen. In het relationele model wordt een relatie in de vorm van tekst weergegeven; het relationele model kent geen grafische weergave.

Een relatie heeft een naam: meestal de naam van het entiteittype. Daarachter wordt tussen haakjes de opsomming gegeven van de eigenschappen van de relatie, oftewel de attributen. Dit is de schrijfwijze van de relatie Product:

    Product (productcode, productomschrijving, inkoopprijs, verkoopprijs, voorraad)

Identificatie
Naast de opsomming van de attributen wordt ook beschreven welk attribuut de identificatie is (of welke attributen de identificatie zijn) van de relatie. Die identificatie is rechtstreeks af te leiden uit het bijbehorende ERD. De identificatie wordt in het relationele model de primaire sleutel genoemd. Deze sleutel wordt in de relatiebeschrijving onderstreept. Nogmaals de relatie Product, nu met aanduiding van de primaire sleutel:

    Product (productcode, productomschrijving, inkoopprijs, verkoopprijs, voorraad)

Tot slot wordt in de relatiebeschrijving nog opgenomen op welke wijze het verband tussen entiteiten wordt gelegd.

Samengevat omvat een relatiebeschrijving :
  • de naam van de relatie;
  • de opsomming van de attributen van de relatie;
  • de primaire sleutel;
  • zonodig één of meer vreemde sleutels.

 
  Attribuut
 

Wat bij ERM een ‘attribuuttype’ wordt genoemd, heet in het relationele model een attribuut.

Bij ERM zijn twee soorten attribuuttypen te onderkennen:

  1. identificerende attribuuttypen
  2. ‘gewone’ attribuuttypen

In het relationele model zijn drie soorten attributen te onderkennen:

  1. primaire-sleutelattributen
  2. ‘gewone attributen’
  3. vreemde-sleutelattributen

 
  Tupel
 

Een voorbeeld van de relatie Product kan er als volgt uitzien:

productcode productomschrijving inkoopprijs verkoopprijs voorraad
XX24 Vulpeninkt 6.95 8.35 6
ZA287 Penvullingen zwart 0.95 1.15 22
JJ83 Balpennen blauw 1.75 2.10 15
NA256 Potloden HB 0.85 1.00 22

De bovenste rij omvat de beschrijving van de relatie Product. De vier rijen daaronder vormen een zogeheten voorbeeldpopulatie van de relatie Product. Elk van die rijen wordt tupel genoemd.

 
  Primaire sleutel
 

De primaire sleutel is de identificatie van een relatie, vergelijkbaar met de identifier bij ERM. Er gelden twee regels voor de primaire sleutel:

  • De waarden van de primaire sleutel moeten binnen een tabel uniek zijn. Er mogen bijvoorbeeld in Nederland geen twee inwoners zijn met hetzelfde burgerservicenummer, of in één database geen twee artikelen met dezelfde artikelcode.

  • Elk attribuut dat deel uitmaakt van de primaire sleutel móet een waarde hebben. Een null-waarde (zie hierna) is niet toegestaan. Deze regel staat binnen het relationele model bekend als entiteitsintegriteit.

Een voorbeeld van dit laatste. In veel bestanden van bedrijven worden klanten uniek geïdentificeerd met hun postcode en huisnummer. Samen vormen deze de primaire sleutel van die tabel. Als nu één van beide attributen een ongedefinieerde waarde heeft, is de sleutel nutteloos. Identificatie is dan niet meer mogelijk omdat bij een postcode tientallen huisnummers kunnen horen en bij een huisnummer miljoenen postcodes.

 
  Null-waarde
 

Als de waarde van een attribuut niet bekend is, krijgt zo’n attribuut eennull-waarde: een niet nader gedefinieerde waarde. Stel dat in een klantendatabase wordt vastgelegd onder welk telefoonnummer elke klant bereikbaar is. Er zullen ongetwijfeld personen zijn die niet telefonisch bereikbaar (willen) zijn en in dat geval kan het telefoonnummer niet ingevuld worden.

Dat klinkt heel eenvoudig, maar in een database moet vastgelegd worden dat een waarde er niet is. Daarvoor dient het begrip null-waarde. Als een waarde niet bekend is, mag je daarvoor geen spatie invullen en ook geen nul. Spatie en nul zijn bekende waarden; een telefoonnummer kan niet nul zijn en kan ook geen spatie zijn. De ‘waarde’ null is een speciaal teken in de database. Hoe dat teken eruit ziet, wordt bepaald door de leverancier van de databaseprogrammatuur.

In de meeste gevallen ziet een null-waarde er op byte-niveau als volgt uit: 0000 0000. Ter vergelijking: spatie is 0001 0000 en nul is 0011 0000.

 
  Vreemde sleutel
 

Het verband tussen entiteiten wordt in het relationele model gerealiseerd door middel van een vreemde sleutel. Dit kunnen we het beste met een voorbeeld illustreren. Hieronder staat het ERD dat het verband aangeeft tussen de entiteittypen Student en Klas, gevolgd door de tekstuele beschrijving van de entiteittypen.

Entitytype Student
Identifier studentnummer
Description studentnummer
naam, adres, postcode, woonplaats
geslacht, geboortedatum

Entitytype Klas
Identifier klasnummer
Description klasnummer
aantal_studenten

Dit ERD levert in het relationele model twee relaties op, te weten Student en Klas:

    Student (studentnummer, naam, adres, postcode, woonplaats, geslacht, geboortedatum)
    Klas (klasnummer, aantal_studenten)

Het feit dat een student deel uitmaakt van een bepaalde klas, wordt in het relationele model aangegeven door aan de relatie Student het attribuut ‘klasnummer’ toe te voegen. Het attribuut ’klasnummer’ in de relatie Student wordt vreemde sleutel genoemd. Het is de primaire sleutel van de relatie Klas en daarmee een vreemde sleutel van de relatie Student.

Schrijfwijze
Een vreemde sleutel wordt op een bepaalde manier aangeduid. Soms wordt dat gedaan door er een stippellijn onder te plaatsen. Een andere mogelijkheid, die we hier gebruiken, is de vreemde sleutel tussen punthaken (<>) plaatsen. Hierna zie je de beide relaties nogmaals maar nu met de vreemde sleutel in de relatie Student.

    Student (studentnummer, naam, adres, postcode, woonplaats, geslacht, geboortedatum, <klasnummer>)
    Klas (klasnummer, aantal_studenten)

Een vreemde sleutel moet verwijzen naar een volledige primaire sleutel. Dat betekent in de eerste plaats dat in de definitie van de vreemde sleutel dezelfde attributen moeten voorkomen als in de primaire sleutel waarnaar deze vreemde sleutel verwijst.

Laten we nog even kijken naar het verband tussen Student en Klas. Daarin brengen we één wijziging aan, namelijk dat de klas wordt geïdentificeerd door de combinatie van de attributen ‘afdeling‘ en ‘klasnummer‘.

    Student (studentnummer, naam, adres, postcode, woonplaats, geslacht, geboortedatum, <afdeling, klasnummer>)
    Klas (afdeling, klasnummer, aantal_studenten)

De primaire sleutel van de relatie Klas is nu: afdeling plus klasnummer. Dat houdt in dat de vreemde sleutel in de relatie Student ook afdeling plus klasnummer moet zijn. Je ziet in de relatie Student dat deze beide attributen geplaatst zijn tussen één stel punthaken: <afdeling, klasnummer>.

In de tweede plaats moet de waarde van de vreemde sleutel een bestaande waarde zijn van de primaire sleutel. De combinatie in de relatie Student mag dus nooit verwijzen naar een niet-bestaande klas.

De vreemde sleutel mág een null-waarde hebben. In het geval van de student betekent dit dat een student niet in een klas hoeft te zitten. Dat is bijvoorbeeld het geval als een school nieuwe leerlingen invoert maar nog niet weet in welke klas ze geplaatst zullen worden. Dat kan dus alleen het geval zijn als in het ontwerp de optionaliteit tussen het entiteittype student en het relatietype ‘zit in’ in het ERD 0 is. Bestaat een vreemde sleutel uit meer attributen, dan geldt: álle attributen van de vreemde sleutel hebben een null-waarde, of álle attributen van de vreemde sleutel hebben een waarde. Deze regels tezamen staan bekend als referentiële integriteit. De referentiële integriteit voorkomt dat de vreemde sleutel verwijst naar een niet-bestaande tupel in een relatie.

De referentiële integriteit bepaalt dus (1) dat de vreemde-sleutelwaarde verwijst naar een volledige primaire-sleutelwaarde, en (2) dat alle attributen van de vreemde sleutel een waarde hebben of alle attributen van de vreemde sleutel een null-waarde hebben. Het DBMS moet afdwingen dat de referentiële integriteit gehandhaafd blijft.

In Microsoft Access kunt je met een vinkje in het dialoogvenster Relaties bewerken aangeven dat referentiële integriteit afgedwongen moet worden. Het programma zorgt er dan dus voor dat aan beide bovenstaande voorwaarden wordt voldaan.

 

 


 



2 - Tabellen in een relationeel model © Instruct

 

Gegevens in een relationele database worden in de vorm van tabellen opgeslagen. Natuurlijk moeten deze tabellen wel aan enkele eisen voldoen:

  • In elke cel van de tabel mag niet meer dan één waarde voorkomen. Die waarde is bovendien ondeelbaar. Als bijvoorbeeld een waarde in de kolom Klascode ‘Havo-2C’ is, dan is dat één waarde. Het is dus niet mogelijk de waarden Havo en 2C afzonderlijk te bekijken. Als dat wel de bedoeling is, dan moeten er twee kolommen zijn:
    1. de kolom Afdeling
    2. de kolom Klasnummer

    Dat moet dan wel in het ERD beschreven zijn!

  • Geen twee rijen in de tabel mogen hetzelfde zijn. Dat kan worden opgelost door elke rij van een identificatie te voorzien. Dat is op zich niet moeilijk, we hebben immers bij ERM al ‘identifiers’ benoemd.