Prima Planten Revisited

Ik heb de casus nu voor je opgelost. Aan jou de opdracht om het tabellen schema om te zetten in een database realisatie via adminer. Let Op: je hoeft de gegevens niet opnieuw in te voeren. We maken alleen de tabellen, niet de data.

In de eerste opdracht Casus Prima Planten hebben de meesten van jullie helaas enorme ontwerpfouten gemaakt. Laten we eens kijken welke problemen er optreden door een slecht ontwerp database:

  • tabellen worden niet of onjuist gekoppeld
  • de aanmeldingen tabel ontbreekt. Het is geen fysiek voorwerp maar dit ding is wel een eigen entiteit.
  • dezelfde waarden moeten meerdere keren worden ingevoerd wanneer er 1 grote tabel is met meerdere entiteiten (planten, leerlingen, aanmeldingen). Meer werk en de dubbelgangers leiden tot problemen bij updates.

ER-Diagram voor Prima Planten

Dit is een correcte oplossing voor deze casus. Zo teken je een ER-(Entity-Relationship Diagram) met draw.io

  • 3 entiteiten
    • Planten
    • Aanmeldingen
    • Leerlingen
  • 2 relaties:
    • Aanmelding N:1 Leerling
    • Planten 1:N Aanmelding

Belangrijk was de zin: per aanmelding kan 1 leerling maar 1 plant aanvragen. Dan denk jij: hij kan dus wel meerdere aanmeldingen (1:N) doen, ook voor dezelfde plant blijkbaar. De plant kan dus in meerdere aanvragen voorkomen (1:N)

Nu heb je het ER-Diagram dus gekregen als voorbeeld. Later ga je die ook zelf ontwerpen.

Het omzetten naar een tabelschema

Ook in draw.io maak je een schema met welke tabellen hier uit komen. De regels voor eenvoudige tabellen met 1:N relatie is van toepassing:

  • 1:N relatie: foreign key komt in de tabel met de N. Je moet hier vaak echt even over nadenken. Bij elke aanmelding noteren we in de database alleen het nummer (id) van de plant (type) in kwestie.

Alle drie de entiteiten krijgen een eigen tabel. Let op de positie van de Foreign Keys (FK1 en FK2). Dit is het lastigste en belangrijkste aspect van database ontwerp.

Bouw de tabellen in adminer

Je maakt deze 3 tabellen nu een tweede keer. Gooi eerst de bestaande tabellen weg (drop table), zodat je geen potje krijgt.

Noem ze:

  • ppr_leerlingen
  • ppr_aanmeldingen
  • ppr_planten

Zet netjes de INT auto_increment aan voor plant_ID en leerling_nummer bij het maken van de tabellen planten en leerlingen. Als je daarna aanmelding maakt, kun je het type Foreign Key selecteren waar ze nodig zijn.

Oplossing Database -> Database Schema

Eloquent Architect 161

Eloquent Architect 161