# Entity-relationshipmodel

Het entity-relationship-model of entity-relationship diagram (ERD) is een model of diagram voor het inzichtelijk maken van een conceptueel datamodel. Het is een visuele weergave van de entiteiten, relaties en regels die gelden of aanwezig zijn in een logisch ontwerp. Deze diagrammen worden gemaakt bij het ontwerpen van een informatiesysteem om inzicht te krijgen in de benodigde informatie en de verbanden tussen de gegevens.
Zo wordt het vaak gebruikt om een visuele weergave te maken van een relationeel model. Het gemaakte diagram kan vervolgens omgezet worden in een databasemodel. Het entity-relationship-model kan dus ook worden gezien als een methodologie voor het ontwerpen van een datamodel en database.
Vaak worden de namen datamodel en ER-diagram verkeerd gebruikt, een ER-diagram is een abstractie terwijl een datamodel een technische uitvoering is. De structuur van tabellen, indexen en constraint in een RDBMS heet een datamodel, al dan niet gevisualiseerd.

## Entity-relationship diagrammen

Er worden verschillende tekenwijzen gebruikt. De praktische (gebruikt door ontwerptools) en de theoretische die omdat ze in leerboeken genesteld zijn, zich hardnekkig laten uitroeien. Zo is het maken van een ER-diagram met 8 of meer entiteiten waarbij de attributen buiten de entiteiten getekend worden, bijna onmogelijk en wordt het doel, van iets complex inzichtelijk te maken, voorbijgeschoten.
    Zie ook de afbeeldingen onderaan voor de weergave van de gebruikte voorbeelden in een ER-diagram.

### Concepten

Een ER-diagram bestaat uit de volgende onderdelen:
* entiteiten: een entiteit kan worden gezien als een object, een concreet of abstract "iets" dat waargenomen kan worden. Voorbeelden hiervan zijn: een auto, een werknemer, een lied, een gebied of een gebeurtenis. Een entiteit heeft een eenduidige naam in het enkelvoud en een kernachtige omschrijving. Als het niet lukt een goede naam of omschrijving te vinden, kan dat een aanduiding zijn dat er een modelleringsfout is gemaakt. Bijvoorbeeld de naam 'auto of fiets' kan er op wijzen dan men eigenlijk bedoelt 'vervoermiddel' of dat men twee sub-entiteiten erbij moet maken, genaamd 'auto' en 'fiets'.
* relaties: een relatie geeft het verband weer tussen twee entiteiten, zoals "een werknemer werkt in een fabriek"; werkt in is hier de relatie tussen de entiteiten werknemer en fabriek. (In de fabriek werkt de werknemer is dezelfde relatie maar dan van fabriek tot werknemer.) Relaties kennen een kardinaliteit (de relatie kent 0,1 of n voorkomens), een optionaliteit (de relatie is verplicht of optioneel, -verplicht heeft een kardinaliteit van een of meer-).
* attributen: een attribuut is een van de eigenschappen van een entiteit. Zo heeft een werknemer (onder andere) een voornaam, optioneel voorvoegsel, een achternaam, een woonplaats en een sofinummer. Attributen kennen een domein (bijvoorbeeld datum, numeriek, alfanumeriek), een optionaliteit (verplicht of optioneel), een naam, een omschrijving. Het domein begrenst de toegestane waarden, voorbeelden alleen 'Ja' en 'Nee' toegestaan, salaris uitsluitend positieve waarden.
* identificaties: een identificatie bestaat uit een minimale set van 1 of meer verplichte attributen waarmee een voorkomen-van-de-entiteit (instantie) uniek geïdentificeerd wordt. De primaire identificatie geldt als basis voor de primaire sleutel van de uit de entiteit te genereren tabeldefinitie. Voorbeeld: Entiteit medewerker in functie tijdvak (Het open tijdvak waarin de medewerker een bepaalde functie bekleedt), heeft als primaire identificatie: de relaties naar zowel medewerker als naar functie, en het medewerker in functie tijdvak-attribuut begindatum in functie.
Elk van deze zaken wordt weergegeven met een bepaald symbool. Een entiteit wordt met een rechthoek, liefst met ronde hoeken om onderscheid te maken met een datamodel, weergegeven, een relatie wordt weergegeven met een lijn, het identificerend attribuut wordt veelal onderstreept weergegeven, en een identificerende relatie wordt veelal met een dwarsstreepje weergegeven. In de rechthoek wordt ten minste de naam van de entiteit vermeld.
Het is ook mogelijk om een relatie tussen een entiteit en zichzelf te hebben. Dit heet wel een recursieve of zelf-refererende relatie. Zo kan een persoon een relatie "getrouwd met" hebben met een andere persoon. Bij een aansluitpunt van de relatie-lijn bij de entiteit wordt dan aangegeven wie met wie getrouwd is.

### Lijnen

De lijnen tussen een relatie en één of meer entiteiten kunnen aangepast worden om de betrokkenheid van de entiteiten bij de relatie weer te geven. Een werknemer kan bijvoorbeeld werken in maximaal 1 fabriek en in een fabriek kunnen 1 of meer werknemers werken. Het kan ook wenselijk zijn om in het ER diagram weer te geven dat een entiteit bij een relatie betrokken moet zijn, bijvoorbeeld "een werknemer werkt in één of meerdere fabrieken". In feite betekent dit ook: er kunnen geen werknemers zijn die niet bij een fabriek werken. Wanneer dit ER diagram vervolgens gebruikt wordt bij het opzetten van een database betekent dit dat er geen werknemers in de database aanwezig kunnen zijn die niet bij een fabriek werken - iets wat tijdens de ontwerpfase al werd weergegeven in het model.
In het model kunnen de volgende type lijnen gebruikt worden om betrokkenheid, in casu de kardinaliteit en de optionaliteit, aan te geven:
* een normale lijn: de entiteit is 0 of meer keer betrokken bij de relatie
* een normale lijn met pijl: de entiteit is 0 of 1 keer betrokken bij de relatie
* een dikke lijn: de entiteit is 1 of meer keer betrokken bij de relatie
* een dikke lijn met pijl: de entiteit is precies 1 keer betrokken bij de relatie

### Onderverdelingen

Een entiteit kan ook worden onderverdeeld in andere entiteiten. Aan een universiteit kan een persoon worden onderverdeeld in de entiteiten student en docent. Deze onderverdeling wordt een IsA hiërarchie genoemd (is a betekent is een; een persoon is een student; een persoon is een docent). In een ER diagram wordt dit aangegeven met een driehoek. Deze onderverdeling hoeft niet volledig te zijn; er kunnen nog andere personen zijn die geen student of docent zijn (bijvoorbeeld administratief medewerkers, personeel, en dergelijke). Ook kan het zijn dat er overlap is tussen de onderverdeelde entiteiten; een persoon kan student en docent tegelijkertijd zijn. Deze zaken worden naast het symbool in het diagram aangeduid met de volgende (Engelse) termen:
* covering: de onderverdeling is volledig ("elke persoon is of student of docent")
* non-covering: tegenovergestelde van covering ("er kunnen nog andere personen zijn die geen student of docent zijn")
* overlapping: er is overlap tussen de onderverdeelde entiteiten ("een persoon kan zowel student als docent zijn")
* non-overlapping: tegenovergestelde van overlapping ("een persoon kan tot slechts één onderverdeling behoren")

## Verschillen in notatie

De gebruikte notatie in ER-diagrammen verschilt. Naast kleine verschillen in bijvoorbeeld het gebruik van het aantal lijnen om het geheel overzichtelijk te houden, worden ook verschillende notaties gebruikt bij de betrokkenheid van entiteiten bij relaties.
Een andere manier om de betrokkenheid van entiteiten bij een relatie weer te geven, is door gebruik te maken van de getallen zelf in plaats van een normale of dikke lijn met of zonder pijl (zie ook hierboven). De getallen geven een onder- en bovengrens van de betrokkenheid:
* normale lijn: 0..* (dit weglaten kan ook)
* normale lijn met pijl: 0..1
* dikke lijn: 1..*
* dikke lijn met pijl: 1..1 (of gewoon 1)

## Meer afbeeldingen

* Een entiteit Persoon met een attribuut als verzameling.
* Elke lijn heeft een eigen attribuut. Deze vorm van noteren kan onoverzichtelijk worden bij het gebruik van veel attributen bij een entiteit
* Een relatie met een entiteit met dezelfde relatie. De pijl geeft aan elk van de relaties (persoon als echtgenoot en als echtgenote) 0 of 1 keer betrokken is bij de entiteit.
* Een IsA hiërarchie. De entiteit Vervoermiddel wordt onderverdeeld in Auto, Trein en Bus. Deze onderverdeling is non-overlapping want een van de onderverdeelde entiteiten kan niet ook tegelijk een andere zijn en non-covering want er kunnen ook nog andere vervoermiddelen bestaan naast deze drie (bijvoorbeeld een vliegtuig).