# Module Database Design L2 # Normaliseren ### Leerdoel In deze module leren we normaliseren. Normaliseren is het opzetten van een goed database design. ### ERD In de praktijk vraag je wat een klant wil. De klant vertelt wat hij wil en jij zet dat om in een ERD. In Database design level 1 heb je al kennis gemaakt met een ERD. Om je kennis op te halen kan je nog een keer naar de uitleg in e video kijken: [https://web.microsoftstream.com/video/c4c62660-1c4f-4c89-b09b-948cf7559c86](https://web.microsoftstream.com/video/c4c62660-1c4f-4c89-b09b-948cf7559c86) ### Waarom normaliseren? Als je goed normaliseert en dus een goed datamodel maakt dan zorg je ervoor dat je gegevens zo worden opgeslagen dat: - gegevens niet in tegenspraak zijn met elkaar - gegevens maar één keer worden opgeslagen - gegevens, maar op een plaats kunnen wijzigen Wat je bijvoorbeeld niet wilt, is dat als je in een database iemand zijn geboortedatum vastlegt en dat je daarnaast ook de leeftijd vastlegt. Over een jaar of meer dan is iemand een jaar ouder en zijn de gegevens met elkaar in tegenspraak. Of stel je hebt de prijs met en zonder BTW opgeslagen. Stel het BTW-tarief wijzigt dan moet je alle prijzen in de database opnieuw berekenen. Een goed database model zorgt ervoor dat dat niet hoeft. Of stel je hebt iemand zijn naam verkeerd gespeld. Als je die aanpast in de database dan wil je dat één keer op één plek doen. Alleen op die manier weet je zeker dat je niets bent vergeten. Zorgen dat gegevens maar één keer worden opgeslagen heet ook wel het voorkomen van redundantie. Dus: voorkomen van redundantie is een het voorkomen van het dubbel vastleggen van gegevens.
Een goed datamodel bevat geen redundantie.
### Hoe maak je een ERD? Elke opgave bestaat uit een "verhaaltje" dit wordt ook wel een case genoemd. Lees de case goed door en bepaal van welke entiteiten je gegevens wilt vastleggen. Bepaal van alle entiteiten *wat* je wilt vastleggen, dit zijn de attributen. Bepaal van alle attributen het datatype (integer, float, date, time, datetime of boolean). Vervolgens bepaal je de relatie tussen de entiteiten en bepaal je de primary keys en foreign keys. Dus de stappen zijn:1. Bepaal van welke entiteiten je gegevens wilt vastleggen in de database. 2. Bepaal van elke entiteit welke gegevens je wilt vastleggen, dit zijn de attributen en bepaal het datatype per attribuut. 3. Bepaal de relaties tussen de entiteiten 4. Bepaal de PK's en FK's. |
Stap 1, maak een lijst Stap 2, splits waar nodig de attributen Stap 3, splits waar nodig in twee entiteiten |
Student | Cursus | Coach | telefoon\_coach |
Kevin Drum | Digitale Vaardigheden, Rekenen, PHP | Ayoub | 06 1221 3268 |
Murvin Drake | PHP, JavaScript | Ayoub | 06 1221 3268 |
John Jones, 1234 | C++ | Ayoub | 06 1221 3268 |
Sally-Jane Jones | HTML, Pyton | Ayoub | 06 1221 3268 |
David (getrouwd) | Rekenen, PHP | Ayoub | 06 1221 3268 |
Murvin Drake | PHP, JavaScript | Samina | 06 2100 3485 |
Murvin Drake | C++ | Samina | 06 2100 3485 |
lant | boek\_id | boek ISBN | Titel | uitgeleend | uitleentermijn | ingeleverd |
Caris Villa | 234189 | 817525766-0 | De boze wollf | 09/06/2021 | 21 | |
Caris Villa | 234288 | 817333566-1 | De lastige wereld | 07/05/2021 | 21 | 14/05/2021 |
Caris Villa | 134585 | 817525766-0 | Op reis met JJ | 28/04/2021 | 21 | 29/04/2021 |
Caris Villa | 232269 | 817528866-3 | Het grote feest | 04/05/2021 | 21 | 25/05/2021 |
Ayana Tucker | 232270 | 817528866-4 | Het grote feest | 29/05/2021 | 35 | 07/06/2021 |
Shola Greig | 134585 | 817525766-0 | Op reis met JJ | 28/05/2021 | 21 |
**Film gegevens** | ||
FilmID | 1999/57 | |
Titel | Bicentienniel Man | |
Productiehuis | Touschstone Pictures | |
Release Data | 17 december 1999 | |
MPAA rating | PG | |
Korte inhoud | In the first decade of the new millenium a new discovery is done..... | |
**Main cast** | **Acteur** | **Personage** |
Robin Williams | Andrew Martin | |
Sam Neil | The Sentinel | |
Loliver Patt | Rupert Burns | |
An Delusion | Elise Stephard | |
... | ||
**Crew** | **Rol** | **Naam** |
Director | Cax Bischop | |
Screen Writer | Nick Kazan | |
Special Effects | Steve Jewel | |
Special Effects | Thor Knight | |
Producer | Mark Gardiff | |
Custume Designer | Elisabeth Grand | |
Custume Designer | Jason Bonne | |
Custume Designer | Carine Elisabeth Studs | |
... |
1. Bepaal de entiteiten. 2. Bepaal de relatie tussen de entiteiten, 1:1, 1:N, of N:M - Voor 1:1 relaties bekijk je of je de entiteiten kan samenvoegen. - Voor N:M relaties maak je een constructie met een koppeltabel. 3. Teken de relaties en zet de harkjes aan de 'meer-kant'. 4. Zet bij elke entiteit een PK (id). 5. Zet bij elk harkje een FK die verwijst naar de PK van de gerelateerde entiteit. 6. Bepaal alle attributen (velden) die je wilt vastleggen. 7. Bepaal alle datatypes, meest voorkomende: *int*, *varchar()*, *date*, en *datetime*. Alleen varchar heeft een maximale lengte. |
Taxibedrijf 'Veilig' wil reserveringen bijhouden. Zij willen vastleggen wie voor welke rit staat ingepland. Zij willen vastleggen welke chaufeur met welke taxi welke rit uitvoert. Van de rit wordt vastgelegd hoe laat die begint, van waar to waar de rit loopt, wat de geschatte afstand is en wat de afgesproken prijs is. Ritten worden van te voren besteld en betaald. Van elke geplande rit wordt vastgelegd wie de klant is. Van de klant wordt naam, email en telefoon vastgelegd. Op die manier kan de klant worden gebeld als er wat is met de geplande rit. | [](https://www.roc.ovh/uploads/images/gallery/2022-01/image-1643187071903.png) |
De school wil bijhouden hoeveel opgaven een student in een week maakt. Alle opgaven moeten in de database staan. De opgave is bestaat uit een text en een vraag. Elke opgave kan één of meerdere malen door een student worden gemaakt. Dit zijn de inzendingen. Elke inzending heeft een inleverdatum, een nakijkdatum, beoordeling (1..10) en een teller die bijhoud de hoeveelste inzending het voor deze student betreft. In de data base worden de namen, studentennummers en groep van de studenten vastgelegd. Tot slot hou je ook namen van de docenten bij omdat elke van elke nagekeken inzending moet worden bijgehouden wie die heeft nagekeken. | [](https://www.roc.ovh/uploads/images/gallery/2022-01/image-1643185921004.png) |
Op Markplaats heb je categorieën, in elke categorie kan een product worden aangeboden. Maak een ERD van een database waaarin alle producten die worden aangeboden worden vastgelegd. Je legt de naam van het product vast, de verkoper, de categorie waarin het staat en de prijs waarvoor het verkocht is. Ook wil je bijhouden hoe lang het product op Markplaats te koop heeft gestaan. Van de verkoper wil je al zijn gegevens vastleggen; naam, adres, email en wachtwoord. Elke advertentie heeft 1 of meer foto's. De foto's worden ook in de database opgenomen. Verder wil je vastleggen wie welk bod heeft uitgebracht op het artikel. Elke gebruiker kan maar een keer één bod op een artikel plaatsen. De foto's krijgen een unieke naam en de alleen deze unieke naam hoeft in de database te worden opgenomen. | [](https://www.roc.ovh/uploads/images/gallery/2022-01/image-1643186975651.png) |
Als verkoper van game PC's wil je een bijhouden welke onderdelen je verkoopt aan wie. Onderdelen zijn verdeeld in categoriën. Zo heb je CPU's, Graphical cards, voedingen, kasten, geheugen, SSD's, moederbord en koeling. De prijs van een artikel kan per dag anders zijn. Je wilt in de database kunnen bijhouden hoe duur een artikel op een bepaalde datum was en je wilt ook vastleggen wat je hebt verkocht aan welke klant op welke datum. Per onderdeel wil je ook vastleggen hoe groot de voorraad is (aantal). | [](https://www.roc.ovh/uploads/images/gallery/2022-01/image-1643187044290.png) |
Fietsenmaker de Jong uit Kortenhoef wil zijn voorraadbeheer verbeteren. De Jongh wil van elke fiets vastleggen welke reparaties er worden uitgevoerd. Hij wil per reparatie aangeven welke onderdelen er worden gebruikt. Zo weet hij precies wanneer hij weer nieuwe onderdelen moet bestellen. Tevens wil hij dit kopellen aan de factuur voor de klant. Dus hij wil voor een klant een reparatiebon kunnen uitdraaien. Op deze bon staan de uitgevoerde reparaties en van elke reparatie de kosten. Bij de kosten van elke reparatie worden de gebruikte onderdelen vermeld. Verder staat er op de bon voor welke fiets de reparatie is uitgevoerd (bijvoorbeeld "Rode Dames Sparta 7 versnellingen"). | [](https://www.roc.ovh/uploads/images/gallery/2022-01/image-1643186893079.png) |
Een examen bestaat uit een aantal werkprocessen. Als elk werkproces van het examen met een voldoende is beoordeeld dan is de examenkandidaat geslaagd voor het examen. Er zijn 4 examens en elk examen heeft een ander aantal werkprocessen. Iedere student moet elk examen halen. Als de student een examen niet haalt dan kan hij een volgende keer een tweede poging doen. Maak een ERD waarin je vastlegd wanneer een examen wordt gehouden (begin- en einddatum) en leg per werkprocess de resultaten vast. Van een student leg je studentnummer, naam en klas vast. Houd ook bij welke poging (eerste, tweede, ...) het examen is. | [](https://www.roc.ovh/uploads/images/gallery/2022-01/image-1643186177308.png) |