Deze website is een hulpmiddel bij P2-K1. De officiële examendocumenten en beoordelingscriteria blijven leidend.
De uitleg helpt je op weg. Lees altijd het examendocument op itslearning goed door en controleer wat er voor jouw opdracht gevraagd wordt.
P2-K1-W3
W3 - Database
Werk met een serverdatabase. Stel rechten in, schrijf query’s en laat zien wat je hebt aangepast.
Wat ga je doen?
- Beschrijf de database en de relaties tussen tabellen.
- Maak gebruikers met verschillende rechten en test die rechten.
- Voer SELECT-, INSERT-, UPDATE- en DELETE-query’s uit.
- Bewaar resultaten, SQL-bestanden, database-export en AI-verantwoording.
Lees altijd het examendocument op itslearning goed door. Lees het onderdeel W3 voordat je aan de database werkt. Controleer welke query’s, rechten en bewijsstukken gevraagd worden. Stel een vraag als iets onduidelijk is.
Klik op een onderwerp om de uitleg te openen.
1. Databaseontwerp
Begin bij de gegevens uit W1. Geef ieder gegeven een logische plaats en voorkom onnodige dubbele opslag.
- department_id · PK
- department_name
- employee_id · PK
- first_name
- last_name
- department_id · FK
- start_date
- active
- account_id · PK
- employee_id · FK
- username
- status
Een primary key (PK) identificeert een rij uniek. Een foreign key (FK) verwijst naar een sleutel in een andere tabel. Zo hoort elke medewerker bij een afdeling en elk account bij een medewerker.
Kies ook datatypes, verplichte velden en unieke waarden. Leg uit waarom je tabellen gescheiden zijn en wat er gebeurt als je een gekoppelde rij wilt verwijderen.
CREATE TABLE departments (
department_id INT PRIMARY KEY,
department_name VARCHAR(100) NOT NULL
);
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
first_name VARCHAR(100) NOT NULL,
last_name VARCHAR(100) NOT NULL,
department_id INT NOT NULL,
start_date DATE NOT NULL,
active BOOLEAN NOT NULL DEFAULT TRUE,
FOREIGN KEY (department_id)
REFERENCES departments(department_id)
);
CREATE TABLE accounts (
account_id INT PRIMARY KEY,
employee_id INT NOT NULL,
username VARCHAR(100) NOT NULL UNIQUE,
status VARCHAR(30) NOT NULL,
FOREIGN KEY (employee_id)
REFERENCES employees(employee_id)
);
W3 mag volgens het invuldocument ook werken met een bestaande database. Beschrijf dan de bestaande structuur en wat je zelf hebt beheerd of aangepast. Voor onze doorlopende casus bouwen we een passende testdatabase.
Vermeld databasenaam, DBMS, doel en opgeslagen gegevens. Maak voor het overzicht een diagram met maximaal vier (belangrijkste) tabellen. Het formulier vraagt per tabel om de tien belangrijkste velden: beschrijf de aanwezige relevante velden met datatype, omschrijving, PK en FK-verwijzing en stem af hoe je minder velden invult.
Database aanpassen en controleren
Het examen vraagt ook om aanpassingen aan velden, tabellen of validatieregels. Kies een aanpassing die past bij jouw casus en leg uit waarom die nodig is.
Voorbeeld: zorg dat een gebruikersnaam uniek moet zijn. Test een nieuwe gebruikersnaam en een dubbele naam. Bewaar de wijziging, de situatie vóór en na en de testresultaten.
Beschrijf ook wijzigingen in gebruikersgegevens en rechten. Je moet kunnen laten zien wat een aanpassing doet.
2. Gebruik een serverdatabase
Gebruik bijvoorbeeld MySQL, MariaDB, PostgreSQL of Microsoft SQL Server. De database draait op een databaseserver waarmee je via een client of applicatie verbinding maakt.
Toon dat je de server kunt bereiken, met een geschikte databasegebruiker kunt verbinden en je eigen database kunt beheren. Noteer serverversie, client, configuratie zonder geheimen en hoe je de testomgeving start.
3. Gebruikers, rollen en rechten
Authenticatie bepaalt wie je bent. Autorisatie bepaalt wat je mag doen. Een gebruiker kan rechten krijgen via een rol: een benoemde verzameling bevoegdheden.
Least privilege: geef alleen de rechten die nodig zijn voor de taak. Gebruik een beheeraccount voor beheer en een beperkter account voor je applicatie.
| Voorbeeldgebruiker / rol | Rechten | Waarom |
|---|---|---|
| app_readonly | Alleen SELECT | Overzichten bekijken |
| app_user | SELECT, INSERT, UPDATE | Registraties lezen, toevoegen en aanpassen |
| db_admin | Beheerrechten op de eigen testdatabase | Tabellen, gebruikers en rechten beheren |
Maak gebruikers en rollen aan met de commando’s van jouw databaseserver. Leg toegekende rechten vast en controleer ze. Applicatierollen en databasegebruikers zijn twee aparte lagen: beschrijf beide waar nodig.
4. Eenvoudige SELECT
SELECT first_name, last_name
FROM employees
WHERE active = 1
ORDER BY last_name;
| Onderdeel | Wat doet het? |
|---|---|
| SELECT | Kiest de kolommen voornaam en achternaam. |
| FROM | Gebruikt de tabel employees. |
| WHERE | Selecteert alleen actieve medewerkers. |
| ORDER BY | Sorteert de resultaten op achternaam. |
Vijf verschillende eenvoudige query’s
Werk minimaal vijf query’s op één tabel uit: alle gegevens, WHERE, ORDER BY, LIMIT/TOP en LIKE. Bewaar per query doel, SQL, aantal resultaatrijen en screenshot. MySQL/MariaDB gebruikt LIMIT; de syntaxis van andere DBMS’en kan afwijken.
-- 1. Alle medewerkers
SELECT * FROM employees;
-- 2. Alleen actieve medewerkers
SELECT first_name, last_name FROM employees WHERE active = 1;
-- 3. Sorteren
SELECT first_name, last_name FROM employees ORDER BY last_name ASC;
-- 4. De eerste vijf op basis van een vaste volgorde
SELECT employee_id, last_name FROM employees ORDER BY employee_id LIMIT 5;
-- 5. Achternamen die met V beginnen (% = nul of meer tekens)
SELECT first_name, last_name FROM employees WHERE last_name LIKE 'V%';
5. Complexe SELECT
JOIN: tabellen combineren
Een JOIN koppelt gerelateerde rijen. Hier toon je de afdelingsnaam naast de medewerker, zonder die naam in iedere medewerkerregel te kopiëren.
SELECT
employees.first_name,
employees.last_name,
departments.department_name
FROM employees
JOIN departments
ON employees.department_id = departments.department_id;
ON beschrijft de relatie. Deze JOIN is een INNER
JOIN: alleen medewerkers met een bijbehorende afdeling komen
in het resultaat.
GROUP BY: per groep samenvatten
Groepeer medewerkers per afdeling en tel hoeveel medewerkers iedere groep bevat. COUNT telt de rijen.
SELECT department_id, COUNT(*) AS aantal_medewerkers
FROM employees
GROUP BY department_id;
Subquery: een query binnen een query
Een subquery is een query binnen een andere query. Dit voorbeeld zoekt medewerkers van de afdeling ICT.
SELECT first_name, last_name
FROM employees
WHERE department_id IN (
SELECT department_id
FROM departments
WHERE department_name = 'ICT'
);
Let op: het formulier noemt twee aantallen
De verplichte instructie aan het begin van hoofdstuk 5 noemt minimaal 5 complexe query’s met INNER JOIN, LEFT JOIN, GROUP BY, HAVING en subquery. De zelfcontrole noemt 4 en heeft geen apart subquery-invulveld. Werk voorlopig alle vijf typen uit en laat je docent bevestigen waar je de subquery toevoegt.
LEFT JOIN: ook zonder account
Een LEFT JOIN toont alle medewerkers, ook zonder gekoppeld account. Bij een medewerker zonder account is username NULL. Voeg fictieve testdata met en zonder account toe om het verschil met INNER JOIN te laten zien.
SELECT e.first_name, e.last_name, a.username
FROM employees AS e
LEFT JOIN accounts AS a ON e.employee_id = a.employee_id;
HAVING: groepen filteren
WHERE filtert rijen vóór groepering. HAVING filtert groepen na aggregatie. Dit voorbeeld toont alleen afdelingen met meer dan één medewerker.
SELECT department_id, COUNT(*) AS aantal_medewerkers
FROM employees
GROUP BY department_id
HAVING COUNT(*) > 1;
Gebruik de bestaande JOIN, GROUP BY en subquery samen met deze twee voorbeelden als uitleg van de vijf typen. Maak zelf passende query’s. Leg bij elke query doel, gekoppelde tabellen, ON-conditie, keuze van JOIN-type, aggregatie en resultaat uit; bewaar screenshots.
6. Gegevens toevoegen met INSERT
INSERT voegt een nieuwe rij toe. Voeg eerst een afdeling toe, daarna een medewerker die naar die afdeling verwijst. Voer dit voorbeeld uit in een lege testdatabase; de IDs moeten nog vrij zijn.
INSERT INTO departments (department_id, department_name)
VALUES (1, 'ICT');
INSERT INTO employees (
employee_id, first_name, last_name,
department_id, start_date, active
)
VALUES (5, 'Sam', 'Voorbeeld', 1, '2026-09-01', 1);
SELECT * FROM employees WHERE employee_id = 5;
De SELECT controleert de toevoeging. Bewaar de situatie vóór en na de INSERT.
Ook meerdere records toevoegen
Het W3-document vraagt minimaal 2 INSERT-query’s: één enkel record en één met meerdere records. Gebruik vrije IDs en een bestaande afdeling.
INSERT INTO employees
(employee_id, first_name, last_name, department_id, start_date, active)
VALUES
(6, 'Noor', 'Test', 1, '2026-09-01', 1),
(7, 'Alex', 'Demo', 1, '2026-09-01', 1);
SELECT * FROM employees WHERE employee_id IN (6, 7);
7. Gegevens aanpassen met UPDATE
Met UPDATE verander je bestaande rijen. Bekijk eerst met SELECT welke rij je wilt aanpassen en controleer daarna het resultaat.
SELECT * FROM employees WHERE employee_id = 5;
UPDATE employees
SET active = 0
WHERE employee_id = 5;
SELECT * FROM employees WHERE employee_id = 5;
Drie UPDATE-varianten
Werk minimaal 3 UPDATE-query’s uit: één veld, meerdere velden en meerdere rijen. Gebruik het eerdere active-voorbeeld voor één veld. Controleer steeds vóór en na met dezelfde SELECT en bewaar screenshots.
-- Meerdere velden in één rij
SELECT * FROM employees WHERE employee_id = 6;
UPDATE employees SET first_name = 'Noor-Test', active = 0
WHERE employee_id = 6;
SELECT * FROM employees WHERE employee_id = 6;
-- Meerdere rijen
SELECT * FROM employees WHERE employee_id IN (6, 7);
UPDATE employees SET active = 0 WHERE employee_id IN (6, 7);
SELECT * FROM employees WHERE employee_id IN (6, 7);
8. Gegevens verwijderen met DELETE
SELECT * FROM employees WHERE employee_id = 5;
DELETE FROM employees
WHERE employee_id = 5;
SELECT * FROM employees WHERE employee_id = 5;
Dit werkt voor de voorbeeldmedewerker zolang er geen accounts naar verwijzen. Een foreign key kan verwijderen blokkeren als er gekoppelde accounts bestaan. Kies en onderbouw hoe je die relaties afhandelt; verwijder niet blind gekoppelde gegevens.
Ook meerdere records verwijderen
Werk minimaal 2 DELETE-query’s uit: één record en meerdere records. Dit tweede voorbeeld gebruikt alleen de fictieve testmedewerkers 6 en 7. Controleer dat er geen gekoppelde accounts zijn.
SELECT * FROM employees WHERE employee_id IN (6, 7);
DELETE FROM employees WHERE employee_id IN (6, 7);
SELECT * FROM employees WHERE employee_id IN (6, 7);
9. Testen en bewijs verzamelen
Noteer per test wat je verwachtte, wat er gebeurde en waarom dit aantoont dat de query of autorisatie werkt. Maak een export of back-up van je eigen testdatabase zodat je de demo kunt herstellen.
Export, logboek en terugblik
Lever een export van de database in. Daarmee kan de beoordelaar de tabellen en testgegevens terugzetten.
Voeg een logboek toe met datum, tijd, activiteit en resultaat. Leg uit hoe je query’s tot stand kwamen, welke bronnen je gebruikte, wat je leerde en wat je volgende keer anders zou doen.
Beschrijf ook je testomgeving en installatie. Geef aan waar je afwijkt van het ontwerp uit W1 en waarom.
AI-verantwoording invullen
Lever bij W3 een aparte AI-verantwoording in. Ook als je geen AI hebt gebruikt.
Download het meest recente AI-formulier op itslearning.
- Vul de scanpagina in: studentnummer, datum, werkproces en of je AI gebruikte.
- Geen AI gebruikt? Kies “Nee” en ga direct naar de eindverklaring in sectie 3.
- Wel AI gebruikt? Vermeld de tool en het model als je dat weet. Vul de overzichtstabel in.
- Beschrijf de belangrijkste AI-momenten: datum, tool, je probleem, de exacte prompt en een korte samenvatting van het antwoord.
- Voeg een screenshot toe waarop jouw vraag en het antwoord zichtbaar zijn. Beschrijf wat je gebruikte, aanpaste of niet gebruikte, welke fouten je vond en hoe je die oploste.
- Wijs het resultaat aan: bestandsnaam, regelnummers of pagina en een fragment van maximaal 15 regels uit je eindproduct.
- Vul de eindverklaring in en onderteken die. Je screenshots moeten echt en onbewerkt zijn. Je moet je eigen werk kunnen uitleggen.
Gebruik zoveel blokken als nodig. Je hoeft de ongebruikte blokken niet in te vullen.
Sla op als P2K1W3_AI-verantwoording_studentnummer.docx.
Het algemene formulier noemt
examencode_AI-verantwoording_studentnummer.docx; de
PvB-informatie geeft bovenstaande naam voor W3.
Eindcheck W3
Lees altijd het examendocument op itslearning goed door. Vergelijk je werk vóór het inleveren met de officiële opdracht en beoordelingscriteria. Alleen deze checklist afvinken is niet voldoende. Stel een vraag als iets onduidelijk is.
Je vinkjes worden lokaal bewaard en gedeeld met de algemene eindcheck.