Meer over relaties en ERD’s#

In Database-ontwerp: relaties heb je geleerd hoe je relaties beschrijft met ERDish-zinnen en hoe je ze tekent met kraaienpoten. In deze verdieping kijken we naar een paar extra eigenschappen van relaties en oefen je met het lezen en tekenen van ERD’s.

Notitie

De diagrammen in deze verdieping zijn in een oudere stijl getekend: met entiteitnamen in hoofdletters en met gestippelde of doorgetrokken lijnen. De kraaienpoten lees je op dezelfde manier als in de lesstof. Het verschil tussen gestippeld en doorgetrokken wordt hieronder uitgelegd bij ouder-kindrelaties; in de lesstof en de eindopdracht hoef je dat onderscheid niet te maken.

Checklist voor ERDish-zinnen#

  • Iedere zin begint met iedere of elke.

  • De zinnen komen in paren.

  • Er zit een werkwoord in de zin.

  • “Eén of meer”, “precies één”, “nul of één” en “nul of meer” geven de kardinaliteit aan.

  • Het onderwerp en lijdend voorwerp in de zin worden gevormd door entiteiten.

  • Vaak moet met de opdrachtgever besproken worden hoe het precies zit. Is het bijvoorbeeld toegestaan dat een werknemer meerdere banen heeft?

Ouder-kind relaties#

Soms heeft een entiteit geen eigen unieke sleutel, maar hoort ze zo sterk bij een andere entiteit dat ze alleen via die entiteit te herkennen is. Dat heet een ouder-kind-relatie. De kind-entiteit erft de UID van de ouder-entiteit. In de oudere diagrammen hieronder zie je dat aan een doorgetrokken lijn; de andere relaties zijn daar gestippeld.

Werknemer en salarisgeschiedenis

Er is alleen een primary UID voor werknemer gedefinieerd, dus dat is de ouder-entiteit en salarisgeschiedenis is de kind-entiteit. Je zult je nu afvragen: elke entiteit moet toch een UID hebben? Dat klopt. In het geval van salarisgeschiedenis is de UID werknemer_id. De UID voor deze entiteit bestaat dus niet uit een attribuut, maar uit een relatie!

Belangrijk: in het fysieke model komt hiervoor een extra kolom werknemer_id in de tabel SALARISGESCHIEDENIS.

Regels voor een ERD#

Een ERD (Entity Relationship Diagram) geeft de belangrijke entiteiten en hun relaties weer. Het doel van een ERD is om in de analyse en het ontwerp een voorstel te documenteren, waarover met de opdrachtgever gediscussieerd kan worden.

Informatie mag slechts één keer worden getoond in een ERD. Daarnaast mag je geen informatie in het model stoppen die kan worden afgeleid van andere informatie. Bijvoorbeeld: wanneer je de geboortedatum van een persoon al hebt opgeslagen, mag je niet nog eens de leeftijd van die persoon opslaan. De leeftijd kan namelijk aan de hand van de geboortedatum berekend worden.

Constraints#

Constraints zijn beperkingen of voorwaarden die voortvloeien uit de analyse van bedrijfsregels. Stel dat een bedrijf wil dat het informatiesysteem een seintje geeft als een werknemer 25 jaar bij het bedrijf werkt, zodat er iets georganiseerd kan worden. Dan moet dit in de bouwfase in het informatiesysteem geprogrammeerd worden. Deze constraints zet je als losse informatie bij je ERD.

Andere voorbeelden:

  • Er mogen geen geboortedata worden ingevoerd die in de toekomst liggen.

  • Een begindatum moet voor een einddatum liggen.

  • Een afdeling moet uit minimaal drie werknemers bestaan.

Dit kun je voor elkaar krijgen door extra programmeerwerk. Afhankelijk van je database-systeem (DBMS) is dit mogelijk in het DBMS zelf of zul je het in de applicatie moeten programmeren.

Andere constraints, zoals welke attributen tot de UID behoren, kun je wel in het ERD opnemen.

Overdraagbaarheid#

Sommige relaties zijn niet overdraagbaar (transferable). Dat betekent dat een rij, als die eenmaal aan een andere rij gekoppeld is, niet meer aan een andere rij gekoppeld mag worden. In het fysieke model maak je de relatie aan die kant dan niet aanpasbaar (not updatable). Bekijk het voorbeeld hieronder.

Dichter en gedicht

Een gedicht dat eenmaal door een bepaalde dichter is geschreven, kan later niet door een andere dichter zijn geschreven. Er moeten maatregelen genomen worden zodat dit niet aangepast kan worden. De relatie van gedicht naar dichter is dus niet overdraagbaar.

Leerling en klas

De relaties hierboven zijn allebei overdraagbaar, want een leerling kan achteraf naar een andere klas worden overgeplaatst.

CRUD-analyse#

Een ERD leidt uiteindelijk tot een verzameling tabellen waarin we gegevens als rijen gaan opslaan (de database). Een database vormt de basis voor een applicatie. Zo’n applicatie is opgebouwd uit verschillende onderdelen, zoals ‘Adreswijziging leerling’ of ‘Cijferoverzicht’. Je kunt per onderdeel een zogenaamde CRUD-analyse aan je ERD toevoegen. Daarin wordt genoteerd welke data in dat onderdeel wordt aangemaakt, opgehaald, aangepast en verwijderd.

Actie

Betekenis

Create

Welke data wordt aangemaakt?

Retrieve

Welke data wordt opgehaald?

Update

Welke data wordt aangepast?

Delete

Welke data wordt gewist?

Opdrachten#

Oefening 6 (ERDish-zinnen maken)

Maak steeds twee ERDish-zinnen over de relaties tussen de twee entiteiten.

  1. Leerling, Klas

  2. Leerling, Stoel

  3. Fototoestel, Foto

  4. Gedicht, Dichter

Oefening 7 (ERD lezen)

  1. Schrijf de ERDish-zinnen op bij onderstaande relaties in het ERD. Let op de richting van de relaties!

  2. Er staan een paar relaties tussen die in werkelijkheid niet kloppen. Schrijf achter iedere zin of de relatie kan of niet kan.

ERD lezen 1

ERD lezen 2

ERD lezen 3

ERD lezen 4

Oefening 8 (ERD tekenen)

Teken ERD’s bij de volgende relaties.

  1. Iedere woonplaats is de geboorteplaats van nul of meer personen. Iedere persoon is geboren in precies één woonplaats.

  2. Iedere kamer herbergt nul of meer gasten. Iedere gast logeert in precies één kamer.

  3. Iedere werknemer werkt op precies één afdeling. Iedere afdeling heeft één of meer werknemers.

  4. Iedere e-mail is gericht aan één of meer personen. Iedere persoon is de geadresseerde van nul of meer e-mails.

  5. Ieder stuk gereedschap heeft precies één prijs. Iedere prijs hoort bij één of meer stukken gereedschap.

  6. Ieder kind heeft precies één moeder. Iedere moeder heeft één of meer kinderen.

  7. Iedere leerling heeft les van één of meer docenten. Iedere docent geeft les aan één of meer leerlingen.

  8. Iedere vingerafdruk behoort tot precies één persoon. Iedere persoon heeft één of meer vingerafdrukken.

Oefening 9 (Overdraagbaarheid)

Geef aan welke van de relaties uit de vorige opdracht niet overdraagbaar zijn. Onderbouw je antwoord.