# Module Database Design L1

Module database design.  
  
Leer wat een ERD is en hoe dat zich verhoud tot een database. Leer een ERD lezen en aanpassen.

# Wat is een database

Een database is een elektronische verzameling van gegevens. Overal waar er gegevens worden opgeslagen is er een database nodig om die gegevens op te slaan. Je telefoonboek op jouw telefoon is een eenvoudig voorbeeld van een database. Ook alle zoekgegevens die Google gebruikt of alle berichten op Facebook zijn bijvoorbeeld opgeslagen in een database.

### Relationele Database

Een database is software waarmee je gegevens kunt opslaan.  
Er zijn verschillende soorten databases.  
Een veel gebruikte soort is RDBMS: een Relationele Database.

<p class="callout info">RDBMS: **R**elational **D**atabase **M**anagement **S**ystem</p>

MySQL, Oracle, MS SQL Server, MariaDB en Postgress zijn allemaal relationele databases.  
Deze databases werken allemaal ongeveer hetzelfde, zoals hoe gegevens worden opgeslagen en hoe je gegevens kunt bewerken.

### SQL

*Wat een database is.*

SQL, S*tructured query language* is een gestandaardiseerde manier waarmee je gegevens kunt bewerken.  
  
In het werkveld worden de handelingen met gegevens aangeduid met CRUD.

CRUD: **C**reate (invoeren) , **R**ead (lezen/ophalen), **U**pdate (aanpassen) en **D**elete (verwijderen).

### Quiz

##### Vraag 1

Wat is een voorbeeld van een database?

1. Adresboek in jouw telefoon
2. Jouw fotoverzameling in jouw telefoon
3. De presentielijsten in ons schoolsysteem
4. Het Google email systeem
5. Alles wat hier genoemd staat

##### Vraag 2

Wat is een RDBMS?

1. Een database systeem
2. Een database tabel
3. Een programmeertaal om gegevens te kunnen raadplegen
4. Een programmeertaal waarin nog bugs (=fouten) zitten
5. Een nieuwe koffiesoort die wordt gemaakt van Franse druiven

##### Vraag 3

Met welke taal kan je gegevens uit een RDBMS raadplegen?

1. CRUD
2. SQL
3. Postgress
4. SQL Server
5. HTML (vanaf versie 5)

##### Vraag 4

In de één van de vorige modules heb je XAMPP geïnstalleerd. XAMPP bevat ook een RDBMS (zoek dit zelf op).

Welke RDBMS zit in XAMPP?

1. MySQL
2. MariaDB
3. XAMPP DB
4. XDB
5. SQL

#### Vraag 5

Wat is SQL?

1. Een taal voor blinden en slechtzienden
2. Een taal om databases te raadplegen
3. Een ander woord voor RDBMS
4. Een database systeem
5. Een CRUD systeem

#### Vraag 6

Waar staat de U in CRUD voor?

1. Undo
2. Use Case
3. User
4. Update
5. Uncle Sam

### Opdracht 2

Open source betekent dat de programmacode van een systeem wordt gedeeld en dat iedereen het programma vrij (zonder kosten) mag gebruiken. Zo valt OpenOffice onder open source maar moet je voor MS (=Microsoft) Office betalen.

Noem twee RDBMS systemen die open source zijn.

Je kunt de informatie vinden op het internet, bijvoorbeeld onder: [https://towardsdatascience.com/top-10-databases-to-use-in-2021-d7e6a85402ba](https://towardsdatascience.com/top-10-databases-to-use-in-2021-d7e6a85402ba)

\--

# ERD Introductie

### Leerdoelen

- Je weet wat een ERD is
- Je weet wat een entiteit is
- Je weet wat een attribuut is
- Je kan een ERD ontwerpen.

Je gaat oefenen met het maken van een datamodel, dit heet een ERD.

<p class="callout info">Het ERD, het ***Entity Relation Diagram***, is een schematische weergave van het datamodel.</p>

Een ERD is een schematische weergave van entiteiten, attributen, relaties en sleutels.

Waarom is dit belangrijk? Als je een applicatie maakt dan moet je een goed datamodel hebben. Als je dit niet hebt dan kost het later heel veel moeite om iets aan te passen. Maak je een verkeerd ERD dan kan het zijn dat de gegevens in een database niet juist worden opgeslagen of dat er inconsistenties in de database staan. Inconsistenties zijn dingen die elkaar tegenspreken, bijvoorbeeld iemand heeft twee verschillende geboortedatums.

##### Entiteiten

Dit zijn dingen, mensen, of gebeurtenissen waarover je iets wilt vastleggen. Bijvoorbeeld *studenten* (mensen) en *ziektemeldingen* (gebeurtenissen).

##### Attributen

De attributen zijn de eigenschappen van de entiteiten. Bijvoorbeeld de naam van een student of de datum van een ziektemelding.

##### Relaties

Relaties de verbinding tussen de entiteiten. Deze kun je herkennen doordat je een zin kan maken die begint met *iedere* of *elk* en de zin bevat een werkwoord. In de zin moet je ook iets zeggen over de hoeveelheid. Elke relatie kan je van twee kanten beschrijven, voorbeeld:

- - iedere student heeft zich 0, 1 of meer keren ziek gemeld.
    - iedere ziektemelding hoort bij precies één student

##### Sleutels

Sleutels zijn attributen die nodig zijn voor om de relatie te maken. Elke entiteit heeft een uniek id. Voor de eenvoud noemen we die altijd id (type integer). Dit heet de primary key. De foreign key is een verwijzing naar een primary key uit een andere entiteit.

### Opdracht 1

Bekijk deze video: [https://web.microsoftstream.com/video/358c5910-3a80-4a83-943e-2098c4a033c8](https://web.microsoftstream.com/video/358c5910-3a80-4a83-943e-2098c4a033c8)

De Powerpoint die in de video wordt gebruikt staat hier: [https://github.com/Amstelland-Software-Development/DATABASE-DESIGN/blob/master/niveau1/taak01/niv%201%20-%20ERD%20-%20entiteiten.pdf](https://github.com/Amstelland-Software-Development/DATABASE-DESIGN/blob/master/niveau1/taak01/niv%201%20-%20ERD%20-%20entiteiten.pdf)

##### Optioneel

Wil je meer over data types weten, kijk dan naar:

[https://www.linkedin.com/learning/programming-foundations-databases-2/columns-and-data-types?u=84048860](https://www.linkedin.com/learning/programming-foundations-databases-2/columns-and-data-types?u=84048860)

[https://www.linkedin.com/learning/programming-foundations-databases-2/numbers-and-other-types-2?u=84048860](https://www.linkedin.com/learning/programming-foundations-databases-2/numbers-and-other-types-2?u=84048860)

#### Quiz - 6 vragen

De meest vragen kan je pas beantwoorden nadat je de video hebt gezien.

Waarvoor staat de afkorting ERD?

1. Eind Resultaat Diagram
2. Entiteit Relatie Diagram
3. Entity Response Diagram
4. Extra Resultaten Doctrine

Waarvoor gebruik je een ERD?

1. Vastleggen hoe je je data/gegevens gaat vastleggen.
2. Vastleggen naamgeving variabelen
3. Vastleggen welke database je gaat gebruiken
4. Inzicht krijgen in de user interface van de applicatie

De naam van een entiteit .........?

1. begint altijd met een hoofdletter
2. is altijd meervoud
3. is altijd enkelvoud
4. heeft een maximum lengte van 32

In het voorbeeld in de video wordt de sleutel (key) geplaatst in....

1. eerste kolom
2. tweede kolom
3. derde kolom
4. laatste kolom

Welke tool kun je het beste gebruiken voor het maken van een ERD?

1. Google
2. Lucidchart
3. ERD Creator Pro
4. Oscar DB Design

Als je wilt vastleggen hoeveel graden het buiten is, bijvoorbeeld 21,2 graden, welk type gebruik je dan?

1. varchar
2. integer
3. decimal(5,1)
4. decimal(2,0)

### Opdracht 2

Voor deze opdrachten moet je [Lucidchart](https://lucid.app/documents) gebruiken. Maak voor jezelf een account.

Voor het maken van de volgende opdracht kun je gebruik maken van:

[https://www.lucidchart.com/pages/nl/tutorial-database-structuur-en-ontwerp#section\_2](https://www.lucidchart.com/pages/nl/tutorial-database-structuur-en-ontwerp#section_2)

Maak in Lucidchart de entiteit student. Een student heeft een studentnummer, voornaam, achternaam, adres, huisnummer, postcode, woonplaats en geboortedatum. Het studentennummer is de *primary key* en de tabel heeft geen *foreign key*.

Maak de entiteit met alle attributen en bepaal voor elk attribuut het (data)type. Je kiest hierbij tussen de soorten die in de video zijn besproken.

Lever een schermafdruk van de entiteit gemaakt met Lucidchart in.

### Opdracht 3

Een film heeft een naam, een categorie, een uitzenddatum, een leeftijdsgrens.

Maak de entiteit film in Lucidchart, benoem de keys, attributen en data types.

Lever een schermafdruk van de entiteit gemaakt met Lucidchart in.

### Opdracht 4

Maak het ERD wat hieronder staat in Lucidchart en vul aan op de plaats van de puntjes.

[![image-1632336319782.png](https://www.roc.ovh/uploads/images/gallery/2021-09/scaled-1680-/image-1632336319782.png)](https://www.roc.ovh/uploads/images/gallery/2021-09/image-1632336319782.png)

### Opdracht 5

Maak in Lucidchart de entiteit docent. Een docent heeft een personeelsnummer, voornaam, achternaam, datum in dienst, en werkt op een afdeling. De afdeling heeft een nummer en de omschrijving van de afdeling staat in een andere tabel net zoals in de vorige opdracht. Probeer de relatie ook te tekenen tussen de twee entiteiten net als in de vorige opdracht.

### Opdracht 6

In het onderstaande ERD zijn de sleutels/keys en (data)type weggelaten. Kun jij de keys en datatypen bedenken? Maak een nieuw ERD en probeer daarbij de drie kolommen (keys, naam en type) te maken.

[![image-1632336756453.png](https://www.roc.ovh/uploads/images/gallery/2021-09/scaled-1680-/image-1632336756453.png)](https://www.roc.ovh/uploads/images/gallery/2021-09/image-1632336756453.png)

### Opdracht 7

In het onderstaande ERD zijn de sleutels/keys weggelaten. Kun jij de keys bedenken? Maak een nieuw ERD en probeer daarbij de keys in de eerste kolom aan te geven.

[![image-1632336589034.png](https://www.roc.ovh/uploads/images/gallery/2021-09/scaled-1680-/image-1632336589034.png)](https://www.roc.ovh/uploads/images/gallery/2021-09/image-1632336589034.png)

# Relaties en Keys

*Je hebt eerder iets met keys gedaan, maar hoe zit dat nu precies met keys?*

*Ook ga je nu naar relaties kijken.*

<p class="callout info">Let op key = sleutel, dit wordt in de IT-wereld door elkaar gebruikt.</p>

Bekijk de video: [https://web.microsoftstream.com/video/c4c62660-1c4f-4c89-b09b-948cf7559c86](https://web.microsoftstream.com/video/c4c62660-1c4f-4c89-b09b-948cf7559c86)

In de video worden twee zaken uitgelegd. De relaties tussen de entiteiten en de keys.

### Relaties

Een RDBMS is een *relational* database management system, *relational* gaat dus over de *relaties*.

Een entiteit heeft een relatie als er een 'verbinding' is. In de video wordt dit uitgelegd met voorbeelden.

Ken je de opdracht uit de vorige les nog? Daarbij had je een medewerker entiteit en een afdeling. Hier is sprake van een relatie want:

een medewerker werkt op een afdeling en een afdeling heeft 0, 1 of meer werknemers.

Je ziet aan dit voorbeeld dat een relatie altijd twee kanten uit werkt.

### Keys

Keys worden in de video ook uitgelegd In de video wordt gesproken over sleutels. Er zijn twee soorten keys:

##### Primary Key (PK)

Elke entiteit heeft altijd precies één primary key.

Vaak wordt deze als eerst weergegeven. Een primary key moet uniek zijn. Dat betekent dat de key maar één keer mag voorkomen. Jouw studentnummer zou een primary key kunnen zijn. Jouw studentennummer komt namelijk maar één keer voor. Als je een database ontwerpt en je weet niet zeker wat de primary key moet zijn dan kun je altijd een ID als attribuut toevoegen. Dat is dan gewoon een oplopend nummer.

Uitleg: [https://www.linkedin.com/learning/programming-foundations-databases-2/keys-and-unique-values-2?u=84048860](https://www.linkedin.com/learning/programming-foundations-databases-2/keys-and-unique-values-2?u=84048860)

#### Foreign Key (FK)

Een relatie is altijd een relatie tussen een primary key en een foreign key. De primary key is uniek en de foreign key hoeft dat niet te zijn.

[![image-1632337949367.png](https://www.roc.ovh/uploads/images/gallery/2021-09/scaled-1680-/image-1632337949367.png)](https://www.roc.ovh/uploads/images/gallery/2021-09/image-1632337949367.png)

In het bovenstaande plaatje komt elk nummer in de medewerker entiteit maar één keer voor. Maar de FK, afdeling\_id kan wel 10x voorkomen. Als er namelijk 10 medewerkers op een afdeling werken dan hebben zij allemaal hetzelfde afdelings\_id. De afdelings\_id verwijst dan naar de afdeling. In de afdeling komt elke afdeling meer precies één keer voor.

Voor nu kijken we alleen nog maar naar het kraaienpootje in de relatie.

<p class="callout info">Het kraaienpootje staat altijd aan de kant van de FK.</p>

### Opdracht 1

Waar staat PK voor?

1. Proper Key
2. Primary Key
3. Post Key
4. Post Kickoff

### Opdracht 2

Hoe vaak kan er een FK voorkomen in een entiteit?

1. 1 of meer
2. precies 1
3. 0,1 of meer
4. 1 of meer

### Opdracht 3

Hoe vaak kan er een PK voorkomen in een entiteit?

1. 1 of meer
2. precies 1
3. 0,1 of meer
4. 1 of meer

### Opdracht 4

Neem onderstaande entiteiten over in Lucidchart. Zet vervolgens;

- de juiste PK in de entiteit kind en;
- maak de juiste relatie tussen de twee entiteiten.

[![image-1632339409386.png](https://www.roc.ovh/uploads/images/gallery/2021-09/scaled-1680-/image-1632339409386.png)](https://www.roc.ovh/uploads/images/gallery/2021-09/image-1632339409386.png)

### Opdracht 5

Voor een student wil je de volgende attributen vastleggen: studentennummer, voornaam, achternaam, telefoon, klas

Van een klas wil je het volgende vastleggen: klasnummer, aantal studenten, beginjaar, mentor

Maak een ERD in Lucidchart waarin je alle attributen vastlegt. Leg de keys vast (PK en FK).

Teken de relatie en zorg ervoor dat het kraaienpootje aan de juiste kant zit.

Uitleg over relaties in en Lucidchart vind je op: [https://www.lucidchart.com/pages/nl/tutorial-database-structuur-en-ontwerp#section\_2](https://www.lucidchart.com/pages/nl/tutorial-database-structuur-en-ontwerp#section_2)

### Opdracht 6

Een film heeft een relatie met een regisseur.

Een film heeft een naam, een categorie, een uitzenddatum, een leeftijdsgrens.

Een regisseur heeft een voornaam, achternaam, geboortedatum, woonplaats.

Een film wordt door 1 regisseur gemaakt, en de meeste regisseurs maken meerdere films.

1. Maak de 2 entiteiten (met attributen) en teken de relaties.
2. Maak de primary keys en de foreign keys

### Opdracht 7

Op een festival treden bands op.

Een festival heeft een naam, locatie, startdatum, duur, genre.

Een band heeft een naam, soort muziek. In die band zitten spelers.

Een speler heeft een voornaam, achternaam en speelt één instrument.

1. Maak de 3 entiteiten (met attributen) en teken de relaties.
2. Maak de primary keys en de foreign keys

\--

# Van ERD naar Database

*OK, je weet nu wat een ERD is en je kan met Lucidchart een ERD maken. Maar hoe vertaalt een ERD zich naar een database?*

Een ERD bevat entiteiten en attributen.

In een database worden de entiteiten tabellen en de attributen worden velden.

<table border="1" id="bkmrk-erd-rdbms-entiteit-t" style="border-collapse: collapse; width: 67.4074%; height: 94px;"><tbody><tr><td style="width: 33.3333%; background-color: #c0c0c0;">ERD</td><td style="width: 33.3333%; background-color: #c0c0c0;">RDBMS</td></tr><tr><td style="width: 33.3333%;">entiteit</td><td style="width: 33.3333%;">table (tabel)</td></tr><tr><td style="width: 33.3333%;">attribuut</td><td style="width: 33.3333%;">column (kolom)</td></tr></tbody></table>

Kijk nu naar de LinkedIn Learning videos:

[https://www.linkedin.com/learning/programming-foundations-databases-2/understanding-databases-benefits-of-spreadsheets?u=84048860](https://www.linkedin.com/learning/programming-foundations-databases-2/understanding-databases-benefits-of-spreadsheets?u=84048860)

[https://www.linkedin.com/learning/programming-foundations-databases-2/understanding-databases-benefits-of-structured-data?u=84048860](https://www.linkedin.com/learning/programming-foundations-databases-2/understanding-databases-benefits-of-structured-data?u=84048860)

[https://www.linkedin.com/learning/programming-foundations-databases-2/relational-databases-2?resume=false&amp;u=84048860](https://www.linkedin.com/learning/programming-foundations-databases-2/relational-databases-2?resume=false&u=84048860)

### Quiz

De meeste antwoorden op deze vragen zitten 'verstopt' in de video.

#### Vraag 1

In een tabel heb je een veld *klant\_naam* waarin je naam van jouw klant wil vastleggen. De klant wil graag een overzicht gesorteerd op *achternaam*. Wat ga jij veranderen in het database ontwerp?

1. Je maakt van klant\_naam een primary key.
2. Je veranderd klant\_naam in achternaam
3. Je splits de kolom klant\_naam in twee nieuwe kolommen; voor\_naam en achternaam.
4. Je maakt twee tabellen; voor\_naam en achternaam en legt de juiste relatie tussen de tabellen.

#### Vraag 2

Wat kan je in een database instellen?

(meerdere antwoorden mogelijk)

1. Bepaalde regels waaraan de gegevens moeten voldoen (bijvoorbeeld telefoonnummer bestaat uit 10 cijfers).
2. Het maximaal aantal kolommen dat een tabel kan bevatten
3. Het maximaal aantal tabellen waaruit een database mag bestaan.
4. Bepalen wie (welke user) er toegang heeft tot bepaalde gegevens.
5. De structuur waarin de gegevens worden vastgelegd.

#### Vraag 3

In een ERD bestaat er een attribuut met de naam *studentennummer*.

Je maakt een database aan de hand van het ERD.

Wat is de meest waarschijnlijk plaats van het attribuut studentennummer in de database?

1. In de tabel student
2. In de tabel studentennummer
3. In de kolom student\_id
4. In de kolom student\_naam
5. In de kolom klas

### Verdieping - ik wil meer!

Deze cursus is een eerste kennismaking met databases en database design. In de vervolg module (level 2) gaan we verder met de stof. Wil je meer weten, of wil je alles weten dan kun je LinkedIn training [Programming Foundations: Databases](https://www.linkedin.com/learning/programming-foundations-databases-2) volgen.

In level 2 ga je zelf een ERD opstellen aan de hand van een klantwens.

\--