Het Entity Relationship Diagram (ERD) beschrijft de relaties tussen entiteiten in je database. Het is een visueel overzicht dat laat zien welke tabellen er zijn en hoe ze aan elkaar gekoppeld zijn.
Een ERD beschrijft niet alles: datatypes en constraints staan nog steeds in het data dictionary. Het ERD laat alleen de tabellen, kolommen en relaties zien.
Om een ERD te maken:
1. Teken voor elke entiteit een tabel met de tabelnaam en alle kolomnamen
2. Trek een lijn tussen de kolommen die aan elkaar gekoppeld zijn (foreign key naar primary key)
3. Geef de kardinaliteit aan (1 of N)
Je hebt een ERD en een data dictionary. Welk van de twee vertelt je de datatypes en constraints?
Wat beschrijft een ERD dat een data dictionary niet beschrijft?
Een 1-op-N relatie (ook: one-to-many) betekent dat een element aan de ene kant gekoppeld kan zijn aan meerdere elementen aan de andere kant.
Voorbeelden:
In het ERD teken je:
De N-kant is de tabel die de foreign key heeft (bijv. animals.owner_id verwijst naar owners.id).
Een school heeft klassen en leerlingen. Een leerling zit in een klas, een klas heeft meerdere leerlingen. Welke tabel krijgt de foreign key?
Een webshop heeft klanten en bestellingen. Een klant kan meerdere bestellingen plaatsen. Welke kant is de 1-kant en welke de N-kant?
Waarom staat de foreign key altijd aan de N-kant van een 1-op-N relatie?
Een N-op-N relatie (ook: many-to-many) betekent dat elementen aan beide kanten relaties kunnen hebben met meerdere elementen aan de andere kant.
Voorbeelden:
Een N-op-N relatie kun je niet direct in een database maken. Je hebt een tussentabel (koppeltabel) nodig die de relatie opslaat.
Studenten volgen vakken. Een student kan meerdere vakken volgen en een vak heeft meerdere studenten. Wat voor type relatie is dit?
Je hebt een tabel studenten en een tabel vakken met een N-op-N relatie. Hoe los je dit op in je database?
Zijn er 1-op-1 relaties? En zo ja, hoe ga je ermee om?
Constraints zijn regels die de database afdwingt om je data betrouwbaar te houden.
UNIQUE -- waarden in deze kolom moeten uniek zijn:
ALTER TABLE users ADD CONSTRAINT UNIQUE (username);
NOT NULL -- het veld mag niet leeg zijn:
ALTER TABLE studenten MODIFY voornaam VARCHAR(255) NOT NULL;
AUTO_INCREMENT -- het veld wordt automatisch opgehoogd bij nieuwe rijen:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50)
);
PRIMARY KEY -- combineert UNIQUE en NOT NULL. Identificeert een rij uniek.
Maak een gebruikerstabel met een id dat automatisch oploopt en als primaire sleutel dient, en een e-mailadres dat verplicht en uniek is (max 100 tekens). Tabelnaam: users.
Het studentnummer in de tabel students moet uniek zijn (geen twee studenten met hetzelfde nummer). Voeg deze beperking toe.
Je maakt een kolom de PRIMARY KEY. Welke twee constraints krijg je er automatisch bij?