<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Databeheer]]></title><description><![CDATA[Obsidian digital garden]]></description><link>http://github.com/dylang/node-rss</link><image><url>site-lib/media/favicon.png</url><title>Databeheer</title><link></link></image><generator>Webpage HTML Export plugin for Obsidian</generator><lastBuildDate>Mon, 23 Feb 2026 08:54:34 GMT</lastBuildDate><atom:link href="site-lib/rss.xml" rel="self" type="application/rss+xml"/><pubDate>Mon, 23 Feb 2026 08:54:20 GMT</pubDate><ttl>60</ttl><dc:creator></dc:creator><item><title><![CDATA[4.4 - Database aanmaken en DBO kiezen]]></title><description><![CDATA[In deze paragraaf leer je wat een database precies is binnen een LocalDB‑instance, en hoe je er zelf één aanmaakt via DataGrip of via SQL‑code. Tabellen komen pas in hoofdstuk 5, dus hier focussen we enkel op de database zelf en het schema waarin je werkt.Een instance is een mini‑SQL‑server die op jouw computer draait. Een database is een container binnen die instance waarin je gegevensstructuren bewaart.Je kunt het vergelijken met een bibliotheek:Elke database bevat minstens één schema: dbo.Het schema dbo staat voor database owner. Het is het standaard en meest gebruikte schema in SQL Server.
Elke nieuwe database bevat automatisch het schema dbo. Als je geen schema opgeeft, plaatst SQL Server objecten standaard in dbo. Het is het schema waarin bijna alle beginners én veel professionele projecten werken. Het voorkomt naamconflicten en houdt je database overzichtelijk. Het is eenvoudig en duidelijk voor leerlingen. Je hoeft geen extra schema’s aan te maken. Alle voorbeelden en oefeningen zijn gebaseerd op dbo. DataGrip toont objecten in dbo automatisch bovenaan. DataGrip gebruikt standaard het schema dbo, maar het is goed om te weten waar je dit ziet.
Open je database in het Database‑paneel.
Klap de database open.
Je ziet een mapje Schemas.
Daarin staat dbo — dit is het schema waarin je werkt.
Wanneer je later tabellen maakt (hoofdstuk 5), zal DataGrip automatisch:dbo.TabelNaam
gebruiken, tenzij je iets anders instelt. Het is dus niet nodig om de naam 'dbo' voor de tabelnaam te schrijven! Dit is enkel noodzakelijk wanneer je gaat werken met JOINS (zie paragraaf 7.6).Dit is de eenvoudigste manier.
Open DataGrip
Verbind met jouw LocalDB‑instance
Rechtsklik op de instance → New → Database…
Geef een naam op, bijvoorbeeld:
SchoolDB Klik op OK
DataGrip maakt nu automatisch:
de database het standaard schema dbo de systeemtabellen die SQL Server nodig heeft Professioneel wordt een database meestal via SQL‑code aangemaakt. Dat ziet er zo uit:CREATE DATABASE SchoolDB; Open de SQL‑console van jouw LocalDB‑verbinding
Voer het commando hierboven uit
Klik op Run
Vernieuw de lijst met databases
Je ziet nu:
de database SchoolDB het schema dbo binnen die database DataGrip kiest automatisch dbo als standaard schema, maar je kunt dit ook expliciet instellen.
Klik op jouw Data Source (de verbinding)
Kies Properties
Ga naar het tabblad Schemas
Vink dbo aan
Zorg dat andere schema’s niet geselecteerd zijn (tenzij nodig)
Klik op Apply
Vanaf nu:
worden nieuwe objecten automatisch in dbo geplaatst toont DataGrip enkel de schema’s die jij gebruikt blijft je database overzichtelijk Soms wil je opnieuw beginnen. Verwijderen kan via SQL:DROP DATABASE SchoolDB;
Voorwaarden:
De database mag niet in gebruik zijn Je moet verbonden zijn met een andere database (bijv. master) In DataGrip kan het ook via rechtsklik → Drop…In deze paragraaf heb je geleerd:
wat een database is binnen een instance wat het schema dbo is en waarom we het gebruiken hoe je een database aanmaakt via DataGrip hoe je een database aanmaakt via SQL‑code hoe je instelt dat je in dbo werkt hoe je een database kunt verwijderen
]]></description><link>4.-werken-sql-server-localdb/4.4-database-aanmaken-en-dbo-kiezen.html</link><guid isPermaLink="false">4. Werken SQL Server LocalDB/4.4 - Database aanmaken en DBO kiezen.md</guid><pubDate>Mon, 23 Feb 2026 08:43:17 GMT</pubDate></item><item><title><![CDATA[4.3 - Verbinden met LocalDB in JetBrains DataGrip]]></title><description><![CDATA[In deze paragraaf leer je hoe je JetBrains DataGrip gebruikt om verbinding te maken met jouw LocalDB‑instance. Zodra de verbinding werkt, kun je databases aanmaken, tabellen ontwerpen en SQL‑queries uitvoeren. DataGrip fungeert als een krachtige, overzichtelijke interface bovenop jouw LocalDB‑instance.Voor je begint, zorg dat:
jouw LocalDB‑instance bestaat (zie §4.2) de instance Running is je het named pipe‑pad hebt opgezocht via: sqllocaldb.exe info INSTANCE_NAAM
Je hebt dit pad nodig om DataGrip correct te configureren.
Open JetBrains DataGrip
Klik linksboven in het Database‑paneel op +
Kies Microsoft SQL Server
Je maakt nu een nieuwe verbinding aan die DataGrip gebruikt om met jouw LocalDB‑instance te praten.In het configuratievenster vul je de volgende velden in:
Kies Windows Credentials (LocalDB gebruikt automatisch jouw Windows‑account) Laat beide velden leeg (LocalDB gebruikt geen klassieke TCP‑verbinding) Je kunt dit voorlopig leeg laten (DataGrip zal standaard verbinden met master)
LocalDB werkt niet met een IP‑adres of poort, maar met een named pipe. Die pipe heb je opgezocht via:sqllocaldb.exe info INSTANCE_NAAM
Bijvoorbeeld:np:\\.\pipe\LOCALDB#12345\tsql\query
Een named pipe is een speciaal soort communicatiekanaal dat Windows gebruikt om twee programma’s met elkaar te laten praten. In ons geval:
SQL Server LocalDB = de server DataGrip = de client Omdat LocalDB geen klassieke netwerkverbinding gebruikt (dus geen IP‑adres en geen poortnummer), communiceert DataGrip met LocalDB via zo’n named pipe.Een named pipe is als een privé‑telefoonlijn tussen twee programma’s. Alleen DataGrip en jouw LocalDB‑instance kennen het nummer, en niemand anders kan erop inbreken.
Het is veiliger dan een open netwerkpoort Het werkt zonder netwerkconfiguratie Het is sneller voor lokale ontwikkeling Het voorkomt conflicten met andere SQL‑servers op je computer Een typisch pad ziet er zo uit:np:\\.\pipe\LOCALDB#12345\tsql\query np: betekent named pipe \\.\pipe\ is de standaardlocatie voor pipes in Windows LOCALDB#12345 is de unieke naam van jouw instance tsql\query is het kanaal dat SQL‑queries verwerkt Elke keer dat je een instance start, kan de pipe‑naam licht veranderen Daarom vraag je de pipe altijd opnieuw op via: sqllocaldb.exe info INSTANCE_NAAM DataGrip heeft dit pad nodig om te verbinden met jouw instance
Nee. LocalDB gebruikt altijd een dynamisch gegenereerde named pipe. Elke keer dat je de instance start, kan de pipe‑naam veranderen. Daarom moet je het pad altijd opnieuw opvragen via:sqllocaldb.exe info INSTANCE_NAAM
Dit is normaal gedrag van LocalDB en hoort bij het “lightweight” ontwerp.
Klik op Advanced
Zoek het veld Named Pipe
Plak hier het volledige pipe‑pad
DataGrip weet nu exact waar jouw instance draait.Als DataGrip vraagt om de SQL Server‑driver te downloaden:
klik op Download wacht tot de driver geïnstalleerd is Dit is eenmalig!Klik op Test Connection.
Groen → alles werkt, je kunt verbinden Rood → er is een probleem Veelvoorkomende fouten:Wanneer de verbinding werkt:
Klik op OK om de Data Source op te slaan
Open de SQL‑console van jouw nieuwe verbinding
Maak een database aan:
CREATE DATABASE VoorbeeldDB; Vernieuw de lijst met databases in het Database‑paneel
Je ziet nu jouw nieuwe database verschijnen. Vanaf dit punt kun je tabellen aanmaken, relaties definiëren en SQL‑queries uitvoeren.Hoewel je meerdere databases in één instance kunt plaatsen, is het soms overzichtelijker om:
één instance per project te gebruiken of één instance per schooljaar Zo blijft je omgeving netjes gestructureerd.In deze paragraaf heb je geleerd:
hoe je DataGrip instelt om met LocalDB te verbinden hoe je een named pipe gebruikt als verbindingsmethode hoe je Windows Credentials toepast hoe je een nieuwe database aanmaakt via DataGrip hoe je typische verbindingsproblemen oplost Je SQL‑omgeving is nu volledig klaar voor de oefeningen en projecten in de rest van de cursus.]]></description><link>4.-werken-sql-server-localdb/4.3-verbinden-met-localdb-in-jetbrains-datagrip.html</link><guid isPermaLink="false">4. Werken SQL Server LocalDB/4.3 - Verbinden met LocalDB in JetBrains DataGrip.md</guid><pubDate>Thu, 12 Feb 2026 14:34:16 GMT</pubDate></item><item><title><![CDATA[4.1 - Inleiding]]></title><description><![CDATA[In dit hoofdstuk leer je hoe je werkt met de SQL‑omgeving die we in deze cursus gebruiken. Voor alle oefeningen, projecten en evaluaties maken we gebruik van SQL Server LocalDB in combinatie met JetBrains DataGrip als database‑client. Dit hoofdstuk vormt de brug tussen de theoretische SQL‑concepten en de praktische uitvoering ervan op je eigen computer.SQL Server LocalDB is een lichte, ontwikkelaarsvriendelijke versie van Microsoft SQL Server. Ze is speciaal ontworpen om:
snel te installeren weinig systeembronnen te gebruiken lokaal te draaien zonder complexe configuratie volledig compatibel te zijn met SQL Server‑syntax en functionaliteit LocalDB is ideaal voor onderwijs en ontwikkeling omdat elke leerling:
een eigen geïsoleerde SQL‑omgeving heeft geen administratorrechten nodig heeft meerdere instances kan aanmaken voor verschillende projecten dezelfde SQL‑taal en concepten gebruikt als in professionele omgevingen LocalDB werkt met zogenaamde instances: kleine, zelfstandige SQL‑servers die je zelf kunt aanmaken, starten en stoppen.We kiezen bewust voor LocalDB omdat het:Elke leerling werkt in een eigen omgeving. Je kunt niets stukmaken op het netwerk of op andere systemen.Alles wat je hier leert, werkt later ook op:
SQL Server Express SQL Server Standard/Enterprise Azure SQL Database Je kunt:
meerdere instances maken databases aanmaken en verwijderen experimenteren zonder risico DataGrip biedt:
een overzichtelijke interface krachtige query‑tools automatische code‑aanvulling visuele database‑structuren Een instance is een mini‑SQL‑server die op jouw computer draait. Je kunt het zien als een afzonderlijke, geïsoleerde omgeving waarin je één of meerdere databases kunt aanmaken. Elke instance heeft:
een eigen configuratie een eigen opslaglocatie een eigen verbinding (named pipe) een eigen status (Running of Stopped) Je kunt het vergelijken met een virtuele databankserver die je zelf beheert:
Je kunt meerdere instances naast elkaar hebben (bijv. één per project). Instances beïnvloeden elkaar niet. Als er iets misloopt in één instance, blijven de andere onaangeroerd. Je kunt een instance starten, stoppen, verwijderen of opnieuw aanmaken wanneer je wil. Omdat dit je als ontwikkelaar of student maximale flexibiliteit geeft:
Je kunt experimenteren zonder risico. Je kunt een instance volledig “opkuisen” door ze te verwijderen. Je kunt verschillende projecten gescheiden houden. Je hebt geen administratorrechten nodig om een instance te beheren. Een instance is de server. Een database is de inhoud die op die server draait.Of anders gezegd:
Instance De hoogste organisatorische laag. Een instance beheert databases. Je kunt meerdere instances hebben, bijvoorbeeld één per project of per schooljaar. Database Een database bevat alle gegevens en objecten die bij één toepassing of project horen. Binnen één instance kun je meerdere databases hebben. Schema Een schema is een logische map binnen een database. Het helpt om objecten te groeperen. Bijvoorbeeld: alle tabellen voor administratie in schema admin, alle tabellen voor verkoop in schema sales. Tabel De eigenlijke opslag van gegevens. Tabellen bevatten rijen (records) en kolommen (velden).
In deze cursus werk je telkens volgens dezelfde logische stappen:Je maakt een LocalDB‑instance aan waarin je databases zullen draaien. Dit doe je met het programma sqllocaldb.exe.DataGrip gebruikt een named pipe‑verbinding om met jouw LocalDB‑instance te praten.Een instance kan meerdere databases bevatten. Je maakt ze aan via SQL‑commando’s in DataGrip.Vanaf hier begint het echte Databeheer‑werk: DDL, constraints, keys, relaties, enz.Voor dit hoofdstuk heb je nodig:
SQL Server LocalDB (meestal geïnstalleerd via Visual Studio of SQL Server Express) JetBrains DataGrip Windows‑account (we gebruiken Windows Authentication) Toegang tot de opdrachtprompt (cmd of PowerShell) Je hoeft geen extra configuratie te doen: LocalDB werkt out‑of‑the‑box.In de rest van hoofdstuk 4 leer je:
hoe je LocalDB‑instances beheert via sqllocaldb.exe hoe je een nieuwe instance aanmaakt voor je projecten hoe je DataGrip correct instelt om met die instance te verbinden hoe je een database aanmaakt en klaarzet voor gebruik hoe je typische problemen oplost (instance start niet, pipe verandert, …) Dit hoofdstuk vormt de technische basis voor alle SQL‑oefeningen die volgen.]]></description><link>4.-werken-sql-server-localdb/4.1-inleiding.html</link><guid isPermaLink="false">4. Werken SQL Server LocalDB/4.1 - Inleiding.md</guid><pubDate>Thu, 12 Feb 2026 14:18:09 GMT</pubDate></item><item><title><![CDATA[4.2 - Werken met sqllocaldb.exe]]></title><description><![CDATA[In deze paragraaf leer je hoe je SQL Server LocalDB beheert via de opdrachtprompt. LocalDB werkt met zogenaamde instances: kleine, zelfstandige SQL‑servers die je zelf kunt aanmaken, starten, stoppen en verwijderen. Het programma dat we hiervoor gebruiken heet sqllocaldb.exe en wordt standaard mee geïnstalleerd met SQL Server Express of Visual Studio.Alle opdrachten in deze paragraaf voer je uit in Command Prompt (cmd) of PowerShell.Je hoeft niets te installeren of te configureren: zodra LocalDB op je systeem staat, is sqllocaldb.exe beschikbaar in je PATH. Je kunt dus gewoon een opdrachtprompt openen en meteen beginnen.Test dit door:sqllocaldb.exe
Als je een lijst met mogelijke commando’s ziet, werkt alles correct.LocalDB kan meerdere instances bevatten. Om te zien welke er al bestaan, gebruik je:sqllocaldb.exe i
Dit toont een lijst met instance‑namen, bijvoorbeeld:
MSSQLLocalDB (standaardinstance) ProjectsV13 (oudere Visual Studio instance) Instances die je zelf hebt aangemaakt Dit is een handig startpunt om te controleren of je al een instance hebt voor je project.Voor deze cursus maak je best een eigen instance, zodat je oefeningen en projecten netjes gescheiden blijven van andere software.Gebruik:sqllocaldb.exe create INSTANCE_NAAM
Voorbeeld:sqllocaldb.exe create DBbeheer2024
Wat gebeurt er?
Er wordt een nieuwe LocalDB‑instance aangemaakt Deze instance bevat nog geen databases De instance staat nog uit (je moet ze eerst starten) Een instance werkt pas wanneer ze actief is. Starten doe je zo:sqllocaldb.exe start INSTANCE_NAAM
Voorbeeld:sqllocaldb.exe start DBbeheer2025
Als alles goed gaat, krijg je een korte bevestiging. Vanaf nu draait je instance op de achtergrond en kun je ermee verbinden via DataGrip.Om te verbinden met DataGrip heb je het named pipe‑pad nodig. Dat pad is uniek voor elke instance en verandert soms wanneer je de instance opnieuw start.Vraag alle info op met:sqllocaldb.exe info INSTANCE_NAAM
Voorbeeld:sqllocaldb.exe info DBbeheer2025
Je krijgt o.a.:
Version – welke SQL Server‑versie LocalDB gebruikt State – Running of Stopped Last start time Instance pipe name – dit is het pad dat DataGrip nodig heeft Een typisch pipe‑pad ziet er zo uit:np:\\.\pipe\LOCALDB#12345\tsql\query
Dit pad kopieer je later in DataGrip.Je hoeft dit zelden te doen, maar het kan handig zijn bij troubleshooting.sqllocaldb.exe stop INSTANCE_NAAM
Voorbeeld:sqllocaldb.exe stop DBbeheer2025
Alleen doen als je zeker bent dat je de instance niet meer nodig hebt. Een instance verwijderen kan enkel wanneer ze gestopt is.sqllocaldb.exe delete INSTANCE_NAAM
Voorbeeld:sqllocaldb.exe delete DBbeheer2025
Je hebt een typfout gemaakt of de instance bestaat niet. Controleer met:sqllocaldb.exe i
Je probeert te verbinden via DataGrip terwijl de instance uit staat. Start ze:sqllocaldb.exe start INSTANCE_NAAM
LocalDB genereert soms een nieuwe pipe na een herstart. Vraag opnieuw info op:sqllocaldb.exe info INSTANCE_NAAM
Meestal komt dit door:
verkeerde pipe‑naam instance staat niet aan verkeerde authenticatiemethode (we gebruiken Windows Credentials) In deze paragraaf heb je geleerd:
hoe je LocalDB‑instances beheert via sqllocaldb.exe hoe je een nieuwe instance aanmaakt hoe je een instance start en info opvraagt hoe je het named pipe‑pad vindt hoe je typische problemen oplost In de volgende paragraaf verbinden we deze instance met JetBrains DataGrip, zodat je er databases en tabellen in kunt aanmaken.]]></description><link>4.-werken-sql-server-localdb/4.2-werken-met-sqllocaldb.exe.html</link><guid isPermaLink="false">4. Werken SQL Server LocalDB/4.2 - Werken met sqllocaldb.exe.md</guid><pubDate>Thu, 12 Feb 2026 14:14:24 GMT</pubDate></item><item><title><![CDATA[5.3 - ALTER TABLE]]></title><description><![CDATA[Met het ALTER TABLE statement kun je een bestaande tabel wijzigen in SQL Server. Dit is handig als je een kolom wilt toevoegen, verwijderen, hernoemen of de structuur wilt aanpassen.✅ Wat kun je doen met ALTER TABLE?
✔ Kolommen invoegen → Een nieuwe kolom toevoegen.
✔ Kolommen aanpassen → Wijzigen van datatype of eigenschappen.
✔ Kolommen verwijderen → Een bestaande kolom definitief verwijderen.
✔ Constraints beheren → Constraints toevoegen of verwijderen.
✔ Kolomnamen wijzigen → Een bestaande naam aanpassen.Je kunt een nieuwe kolom toevoegen met ALTER TABLE en ADD:ALTER TABLE klanten
ADD telefoonnummer NVARCHAR(15);
✅ Dit voegt de kolom telefoonnummer toe aan de tabel klanten.
✅ Gebruik een geschikt datatype (NVARCHAR(15)) voor telefoonnummers.Wil je meerdere kolommen tegelijk toevoegen? Gebruik ronde haakjes:ALTER TABLE klanten
ADD ( email NVARCHAR(50), geboortedatum DATE, land NVARCHAR(40) DEFAULT 'België'
);
✅ Hier voegen we drie kolommen toe aan klanten, met een standaardwaarde voor land.Als je een bestaande kolom wijzigingen wilt geven (bijv. het datatype aanpassen), gebruik je ALTER COLUMN:ALTER TABLE klanten
ALTER COLUMN telefoonnummer NCHAR(10);
✅ Hier wijzigen we telefoonnummer van een variabele lengte (NVARCHAR) naar een vaste lengte (NCHAR) van 10 tekens.Wil je een defaultwaarde toevoegen aan een kolom? Gebruik ALTER COLUMN samen met een DEFAULT constraint:ALTER TABLE klanten
ADD CONSTRAINT DF_klanten_land DEFAULT 'België' FOR land;
Een kolom definitief verwijderen kan met DROP COLUMN.ALTER TABLE klanten
DROP COLUMN telefoonnummer;
✅ Gebruik DROP COLUMN voorzichtig! Alle gegevens in die kolom gaan verloren.Wil je een constraint verwijderen, zoals een UNIQUE of CHECK constraint? Gebruik DROP CONSTRAINT:ALTER TABLE medewerkers
DROP CONSTRAINT UQ_medewerker_email;
✅ Hier verwijderen we de UNIQUE constraint van de email-kolom.Bij een PRIMARY KEY moet je extra opletten:
🔴 Vreemde sleutels die naar een primaire sleutel verwijzen kunnen breken!Je hebt twee opties:
Handmatig alle gerelateerde vreemde sleutels verwijderen en pas daarna de primaire sleutel verwijderen.
Gebruik CASCADE om automatisch alle gekoppelde sleutels te verwijderen:
ALTER TABLE klanten
DROP PRIMARY KEY CASCADE;
Wil je een nieuwe constraint toevoegen aan een bestaande tabel? Gebruik ADD CONSTRAINT:ALTER TABLE medewerkers
ADD CONSTRAINT CHK_medewerker_leeftijd CHECK (leeftijd &gt;= 18);
✅ Hier zorgen we ervoor dat de leeftijd minimaal 18 moet zijn.Meer uitleg over constraints toevoegen vind je in <a data-href="5.5 - Constraints" href="5.-ddl/5.5-constraints.html" class="internal-link" target="_self" rel="noopener nofollow">5.5 - Constraints</a>!Wil je een kolom hernoemen? Gebruik sp_rename:EXEC sp_rename 'klanten.telefoonnummer', 'mobiel_nummer', 'COLUMN';
✅ Hier wordt telefoonnummer hernoemd naar mobiel_nummer.Meer uitleg over kolomnamen wijzigen vind je op SQL Server Docs.✅ Gebruik ALTER TABLE om tabellen flexibel aan te passen.
✅ Voeg kolommen toe met ADD COLUMN, wijzig ze met ALTER COLUMN en verwijder ze met DROP COLUMN.
✅ Beheer constraints met ADD CONSTRAINT en DROP CONSTRAINT.
✅ Wees voorzichtig bij het verwijderen van een PRIMARY KEY, vooral als er FOREIGN KEYS naar verwijzen.]]></description><link>5.-ddl/5.3-alter-table.html</link><guid isPermaLink="false">5. DDL/5.3 - ALTER TABLE.md</guid><pubDate>Thu, 12 Feb 2026 14:04:46 GMT</pubDate></item><item><title><![CDATA[5.2 - CREATE TABLE]]></title><description><![CDATA[Tabellen vormen de basis van databases. Alle gegevens worden hierin opgeslagen, dus het is belangrijk om te begrijpen hoe je een tabel aanmaakt met CREATE TABLE.In hoofdstuk 2 hebben we geleerd dat een tabel bestaat uit:
✅ Rijen (horizontaal) → Elke rij vertegenwoordigt één item (bijv. een klant).
✅ Kolommen (verticaal) → Elke kolom bevat eigenschappen van dat item (bijv. naam, adres).Wanneer we een tabel maken, moeten we beslissen welke kolommen er zijn en welke datatypes ze krijgen.Voordat je een tabel aanmaakt, moet je nadenken over de volgende aspecten:✔ Naam van de tabel → Duidelijke naam, bij voorkeur in meervoud (KLANTEN i.p.v. KLANT).
✔ Kolommen en datatypes → Welke gegevens wil je opslaan en in welk format?
✔ Constraints → Regels zoals PRIMARY KEY en FOREIGN KEY.
✔ Defaultwaarden → Automatische standaardwaarden indien de gebruiker geen invoer geeft.CREATE TABLE tabelnaam ( kolomnaam gegevenstype [defaultwaarde] [constraint], kolomnaam gegevenstype [defaultwaarde], kolomnaam gegevenstype, kolomnaam gegevenstype [defaultwaarde] [constraint]
);
✅ Begin met CREATE TABLE en geef een duidelijke tabelnaam.
✅ Open een ronde haak (() en definieer elke kolom apart.
✅ Geef eerst de naam van de kolom, dan het datatype.
✅ Optioneel kun je een standaardwaarde (DEFAULT) en beperkingen (PRIMARY KEY, UNIQUE, etc.) toevoegen.Bij het kiezen van een tabelnaam gelden enkele regels:✔ Maximaal 30 tekens.
✔ Moet beginnen met een letter.
✔ Geen spaties, gebruik _ als scheiding (BESTEL_REGEL).
✔ Geen SQL gereserveerde woorden (zoals TABLE, SELECT).✅ Kies een naam die duidelijk de inhoud van de tabel weergeeft.Elke kolom binnen een tabel moet een unieke naam en een datatype hebben.✅ Gebruik NVARCHAR voor tekstgegevens zodat Unicode wordt ondersteund.
✅ Gebruik DECIMAL(p,s) voor financiële waarden (bijv. DECIMAL(5,2) betekent maximaal 5 cijfers waarvan 2 achter de komma).Meer uitleg over datatypes in SQL Server vind je op SQL Server Docs.Je kunt een kolom een standaardwaarde geven met DEFAULT, zodat een waarde automatisch wordt ingevuld als de gebruiker niets opgeeft.CREATE TABLE BESTELLING ( BestelID INT PRIMARY KEY, BestelDatum DATE DEFAULT GETDATE()
);
✅ Hier wordt automatisch de huidige datum ingevuld als geen datum wordt opgegeven.Constraints zijn regels die helpen bij het beheren van gegevensintegriteit.✔ PRIMARY KEY → Unieke identifier voor een rij.
✔ FOREIGN KEY → Verwijst naar een andere tabel.
✔ UNIQUE → Zorgt ervoor dat waarden niet dubbel voorkomen.
✔ CHECK → Beperkt waarden binnen een bepaalde range.
✔ DEFAULT → Geeft een standaardwaarde indien geen invoer wordt gegeven.Meer uitleg over constraints vind je in <a data-href="5.5 - Constraints" href="5.-ddl/5.5-constraints.html" class="internal-link" target="_self" rel="noopener nofollow">5.5 - Constraints</a>!Laten we als voorbeeld een tabel maken genaamd Customer:CREATE TABLE Customer( CustomerID INT PRIMARY KEY, CustomerName NVARCHAR(50), LastName NVARCHAR(50), Country NVARCHAR(50), Age INT CHECK (Age &gt;= 0 AND Age &lt;= 99), Phone INT(10) );
Dit zal in de database de volgende tabel genereren:<br>
<img alt="Screenshot-from-2023-04-05-17-09-24.png" src="media/screenshot-from-2023-04-05-17-09-24.png" target="_self">✅ Tabellen vormen de basis van databases en moeten zorgvuldig worden ontworpen.
✅ Gebruik CREATE TABLE om een tabel aan te maken en definieer kolommen met hun datatypes.
✅ Constraints helpen om gegevensconsistentie te garanderen.
✅ Gebruik duidelijke namen voor tabellen en kolommen om overzicht te behouden.]]></description><link>5.-ddl/5.2-create-table.html</link><guid isPermaLink="false">5. DDL/5.2 - CREATE TABLE.md</guid><pubDate>Thu, 12 Feb 2026 14:04:46 GMT</pubDate><enclosure url="media/screenshot-from-2023-04-05-17-09-24.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/screenshot-from-2023-04-05-17-09-24.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[11.13 - Data Lake]]></title><description><![CDATA[<img alt="Datalake-v4.png" height="389" src="media/datalake-v4.png" target="_self" style="width: 691px; max-width: 100%;">Wanneer we werken met grote hoeveelheden data, kunnen we deze opslaan in verschillende soorten systemen: een SQL-database, een data warehouse of een data lake. Elk van deze systemen heeft een specifiek doel en wordt gebruikt afhankelijk van de behoeften van een organisatie.✅ Waarom is het belangrijk om het verschil te begrijpen?
✔ Helpt bij het kiezen van de juiste opslagmethode → Niet alle data hoeft in een SQL-database te staan.
✔ Optimaliseert prestaties en kosten → Data lakes zijn goedkoper voor grote hoeveelheden ruwe data.
✔ Ondersteunt verschillende soorten analyses → Data warehouses zijn ideaal voor Business Intelligence, terwijl data lakes geschikt zijn voor machine learning.Een SQL-database is een relationele database waarin gegevens worden opgeslagen in gestructureerde tabellen met rijen en kolommen.✅ Kenmerken van een SQL-database:
✔ Gestructureerde data → Gegevens worden opgeslagen in een vast schema.
✔ Snelle transacties → Ideaal voor operationele toepassingen zoals klantbeheer en financiële systemen.
✔ ACID-compliance → Zorgt voor betrouwbare en consistente gegevensverwerking.✅ Voorbeelden van SQL-databases:
✔ Microsoft SQL Server
✔ MySQL
✔ PostgreSQLEen data warehouse is een geoptimaliseerde opslagplaats voor gestructureerde en geanalyseerde data. Het wordt gebruikt voor Business Intelligence en rapportages.✅ Kenmerken van een data warehouse:
✔ Gegevens komen uit meerdere bronnen → Bijvoorbeeld verkoopdata, klantgegevens en marketinginformatie.
✔ Geoptimaliseerd voor analyses → Snelle zoekopdrachten en rapportages.
✔ Data wordt vooraf gestructureerd → Voordat het wordt opgeslagen, wordt het opgeschoond en georganiseerd.✅ Voorbeelden van data warehouses:
✔ Snowflake
✔ Amazon Redshift
✔ Google BigQueryEen data lake is een grote opslagplaats waarin ruwe, ongestructureerde data wordt opgeslagen. Dit kan tekst, afbeeldingen, video’s, sensorgegevens en meer zijn.✅ Kenmerken van een data lake:
✔ Opslag van ruwe data → Data wordt niet vooraf gestructureerd.
✔ Geschikt voor machine learning en AI → Data scientists kunnen direct werken met grote datasets.
✔ Flexibel en schaalbaar → Kan enorme hoeveelheden data opslaan tegen lage kosten.✅ Voorbeelden van data lakes:
✔ Azure Data Lake
✔ Amazon S3
✔ Google Cloud Storage✅ SQL-databases zijn ideaal voor operationele toepassingen met gestructureerde data.
✅ Data warehouses zijn geoptimaliseerd voor Business Intelligence en rapportages.
✅ Data lakes slaan ruwe data op en zijn geschikt voor machine learning en Big Data.
✅ De keuze tussen deze systemen hangt af van de behoeften van een organisatie.]]></description><link>11.-datawarehousing/11.13-data-lake.html</link><guid isPermaLink="false">11. Datawarehousing/11.13 - Data Lake.md</guid><pubDate>Tue, 24 Jun 2025 09:54:10 GMT</pubDate><enclosure url="media/datalake-v4.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/datalake-v4.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Datalake-v4]]></title><description><![CDATA[<img src="media/datalake-v4.png" target="_self">]]></description><link>media/datalake-v4.html</link><guid isPermaLink="false">media/Datalake-v4.png</guid><pubDate>Tue, 24 Jun 2025 09:54:08 GMT</pubDate><enclosure url="media/datalake-v4.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/datalake-v4.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[11.12 - Data Mining]]></title><description><![CDATA[<img alt="ezgif-5a8f9bd7d3259f.jpg" height="358" src="media/ezgif-5a8f9bd7d3259f.jpg" target="_self" style="width: 681px; max-width: 100%;">Data mining is het proces van het ontdekken van patronen, trends en relaties in grote datasets. Dit gebeurt met behulp van statistiek, machine learning en kunstmatige intelligentie. Bedrijven en organisaties gebruiken data mining om voorspellingen te doen, klantgedrag te analyseren en efficiëntere beslissingen te nemen2.✅ Waarom is data mining belangrijk?
✔ Helpt bij het ontdekken van verborgen inzichten → Bijvoorbeeld welke producten vaak samen worden gekocht.
✔ Ondersteunt besluitvorming → Bijvoorbeeld het voorspellen van klantverloop.
✔ Wordt gebruikt in verschillende sectoren → Bijvoorbeeld fraudedetectie in de financiële wereld.Data mining bestaat uit verschillende stappen om ruwe data om te zetten in bruikbare inzichten:1️⃣ Gegevens verzamelen → Data wordt verzameld uit verschillende bronnen, zoals databases, websites en sensoren.
2️⃣ Gegevens voorbereiden → Data wordt opgeschoond, gededupliceerd en gestructureerd.
3️⃣ Patronen ontdekken → Statistische modellen en machine learning-algoritmes analyseren de data.
4️⃣ Voorspellingen maken → De gevonden patronen worden gebruikt om toekomstige trends te voorspellen.
5️⃣ Resultaten interpreteren → De inzichten worden toegepast in bedrijfsstrategieën.Data mining maakt gebruik van verschillende methoden om patronen te ontdekken:✔ Classificatie → Gegevens worden ingedeeld in vooraf bepaalde categorieën (bijv. spamfilters).
✔ Clustering → Gegevens worden gegroepeerd op basis van overeenkomsten (bijv. klantsegmentatie).
✔ Associatieregels → Verbanden tussen datapunten worden ontdekt (bijv. welke producten vaak samen worden gekocht).
✔ Beslissingsbomen → Een model dat voorspellingen doet op basis van een reeks beslissingen.Data mining wordt in veel sectoren toegepast:✔ E-commerce → Webshops analyseren koopgedrag om gepersonaliseerde aanbevelingen te doen.
✔ Gezondheidszorg → Ziekenhuizen gebruiken data mining om ziektepatronen te herkennen en behandelingen te verbeteren.
✔ Financiële sector → Banken detecteren fraude door verdachte transacties te analyseren.
✔ Sociale media → Platforms zoals Facebook en Twitter gebruiken data mining om trends en gebruikersvoorkeuren te identificeren.Power BI biedt verschillende tools om data mining toe te passen:✔ Key Influencers → Identificeert welke factoren invloed hebben op een bepaalde uitkomst.
✔ Clustering → Groepeert gegevens op basis van overeenkomsten.
✔ Anomaly Detection → Spoort afwijkende datapunten op.
✔ AI-gestuurde voorspellingen → Gebruikt machine learning om trends te voorspellen.✅ Data mining helpt bij het ontdekken van patronen en trends in grote datasets.
✅ Technieken zoals classificatie, clustering en associatieregels worden gebruikt.
✅ Data mining wordt toegepast in e-commerce, gezondheidszorg, financiën en sociale media.
✅ Power BI biedt tools zoals Key Influencers en Anomaly Detection voor data mining.]]></description><link>11.-datawarehousing/11.12-data-mining.html</link><guid isPermaLink="false">11. Datawarehousing/11.12 - Data Mining.md</guid><pubDate>Tue, 24 Jun 2025 09:52:38 GMT</pubDate><enclosure url="media/ezgif-5a8f9bd7d3259f.jpg" length="0" type="image/jpeg"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/ezgif-5a8f9bd7d3259f.jpg&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[ezgif-5a8f9bd7d3259f]]></title><description><![CDATA[<img src="media/ezgif-5a8f9bd7d3259f.jpg" target="_self">]]></description><link>media/ezgif-5a8f9bd7d3259f.html</link><guid isPermaLink="false">media/ezgif-5a8f9bd7d3259f.jpg</guid><pubDate>Tue, 24 Jun 2025 09:52:36 GMT</pubDate><enclosure url="media/ezgif-5a8f9bd7d3259f.jpg" length="0" type="image/jpeg"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/ezgif-5a8f9bd7d3259f.jpg&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[11.10 - Visualisaties en DAX in Power BI]]></title><description><![CDATA[<img alt="Power_BI_DAX_14e8e4cdff.png" src="media/power_bi_dax_14e8e4cdff.png" target="_self">Omdat MS SQL Server LocalDB niet rechtstreeks kan worden geïmporteerd in Power BI Desktop, moeten we een tussenstap gebruiken: data exporteren naar Excel en deze vervolgens in Power BI importeren. Dit proces zorgt ervoor dat we alsnog de gegevens kunnen visualiseren en analyseren in de Power BI omgeving.✅ Waarom deze methode gebruiken?
✔ Omzeilt beperkingen van directe koppeling → LocalDB ondersteunt geen directe verbinding in Power BI.
✔ Maakt het eenvoudig om data in Power BI te laden → Excel is een veelgebruikte en geaccepteerde databron.
✔ Maakt interactieve visualisaties mogelijk → In Power BI kunnen dashboards worden gebouwd voor inzichten.We moeten eerst de tabellen uit SQL Server exporteren naar een Excel-bestand.✅ Methode 1: DataGrip-export naar CSV/Excel
✔ Open DataGrip en voer de volgende SQL-query uit om de relevante data te krijgen:SELECT * FROM fact_prestaties;
✔ Klik op exporteren als CSV en sla het bestand op.
✔ Open Excel en importeer het CSV-bestand (via Gegevens &gt; Van tekstbestand).
✔ Sla het bestand op als Excel (.xlsx).✅ Methode 2: SQL Server Management Studio (SSMS)
✔ Gebruik SSMS om een SELECT-query uit te voeren en de resultaten op te slaan als CSV.
✔ Open CSV in Excel en sla het op als XLSX-bestand.Nu de data in Excel staat, kunnen we Power BI Desktop openen en het bestand importeren.✅ Gegevens importeren in Power BI
✔ Open Power BI Desktop.
✔ Klik op Gegevens ophalen → Kies Excel.
✔ Selecteer het Excel-bestand en klik op Openen. ✔ Kies de juiste tabellen en klik op Laden.De data is nu beschikbaar in Power BI!In Power BI kunnen we relaties tussen tabellen definiëren en DAX-formules gebruiken om berekeningen uit te voeren.✅ Relaties maken tussen tabellen
✔ Ga naar Modelweergave en sleep tabellen om relaties te leggen.
✔ Koppel leerlingen aan cijfers en vakdetails aan prestaties.✅ DAX gebruiken voor dynamische berekeningen📌 Basisberekeningen:Gemiddeld_Cijfer = AVERAGE(fact_prestaties[gemiddelde_cijfer])
Totaal_Omzet = SUM(fact_prestaties[aantal_toetsen])
📌 Voorwaardelijke berekeningen (bijv. omzet per vak):Omzet_per_Vak = CALCULATE(SUM(fact_prestaties[aantal_toetsen]), fact_prestaties[vak_id] = 1)
📌 Datum- en tijdfuncties:Huidig_Jaar = YEAR(TODAY())
Omzet_Vorig_Jaar = CALCULATE(SUM(fact_prestaties[aantal_toetsen]), SAMEPERIODLASTYEAR(fact_prestaties[datum]))
📌 Rangschikken van waarden:Ranking_Cijfers = RANKX(ALL(fact_prestaties), fact_prestaties[gemiddelde_cijfer], , DESC, DENSE)
Om duidelijke en bruikbare visualisaties te maken, zijn er een aantal richtlijnen die je kunt volgen:✅ Houd het eenvoudig: Gebruik maximaal drie kleuren per grafiek om het overzichtelijk te houden.
✅ Kies de juiste grafiek:
✔ Staafdiagram → Vergelijkingen tussen categorieën (bijv. omzet per vak).
✔ Lijndiagram → Trends over tijd (bijv. gemiddelde cijfers per schooljaar).
✔ Kaarten → Locatiegegevens (bijv. waar leerlingen wonen).
✔ Treemap → Onderverdeling van percentages (bijv. verdeling van cijfers).
✅ Gebruik interactieve filters: Laat gebruikers hun eigen inzichten filteren op basis van datum, vak of leerling.
✅ Zorg voor een duidelijke titel en labels: Voeg altijd een beschrijvende titel toe aan grafieken en zorg dat assen duidelijk gelabeld zijn.Meer uitleg over data-visualisatie en best practices vind je op Microsoft Power BI Docs.Na het bouwen van de rapporten in Power BI Desktop, kunnen we ze publiceren naar Power BI Online zodat anderen ze kunnen bekijken.✅ Publiceren naar Power BI Online
✔ Klik in Power BI Desktop op Publiceren.
✔ Log in bij Power BI Service (online omgeving).
✔ Kies een werkruimte en klik op Uploaden.
✔ Open Power BI Online en deel het dashboard met collega’s en leerlingen.✅ Omdat SQL Server LocalDB niet direct wordt ondersteund, exporteren we data eerst naar Excel.
✅ Excel-bestanden kunnen eenvoudig worden geïmporteerd in Power BI Desktop.
✅ In Power BI leggen we relaties tussen tabellen en gebruiken we DAX-formules voor analyses.
✅ Bij het bouwen van visualisaties letten we op eenvoud, kleuren en interactieve filters.
✅ Na het bouwen van dashboards kunnen deze worden gepubliceerd naar Power BI Online.]]></description><link>11.-datawarehousing/11.10-visualisaties-en-dax-in-power-bi.html</link><guid isPermaLink="false">11. Datawarehousing/11.10 - Visualisaties en DAX in Power BI.md</guid><pubDate>Tue, 24 Jun 2025 09:49:58 GMT</pubDate><enclosure url="media/power_bi_dax_14e8e4cdff.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/power_bi_dax_14e8e4cdff.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Power_BI_DAX_14e8e4cdff]]></title><description><![CDATA[<img src="media/power_bi_dax_14e8e4cdff.png" target="_self">]]></description><link>media/power_bi_dax_14e8e4cdff.html</link><guid isPermaLink="false">media/Power_BI_DAX_14e8e4cdff.png</guid><pubDate>Tue, 24 Jun 2025 09:49:56 GMT</pubDate><enclosure url="media/power_bi_dax_14e8e4cdff.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/power_bi_dax_14e8e4cdff.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[11.9 - Databeveiliging in een datawarehouse]]></title><description><![CDATA[<img alt="ezgif-59838823b021b6.jpg" height="390" src="media/ezgif-59838823b021b6.jpg" target="_self" style="width: 694px; max-width: 100%;">Wanneer we een datawarehouse bouwen, is databeveiliging een cruciaal onderdeel. Omdat een datawarehouse vaak gevoelige en strategische informatie bevat, moeten we ervoor zorgen dat gegevens veilig blijven, alleen toegankelijk zijn voor geautoriseerde gebruikers en voldoen aan privacywetten zoals GDPR.✅ Waarom is databeveiliging belangrijk?
✔ Voorkomt ongeautoriseerde toegang → Alleen bevoegde gebruikers mogen gevoelige data inzien.
✔ Beschermt tegen datalekken → Gegevens worden versleuteld en beveiligd tegen cyberaanvallen.
✔ Voldoet aan regelgeving → Bijvoorbeeld GDPR in Europa en AVG in België.Om te voorkomen dat ongeautoriseerde gebruikers data kunnen lezen, gebruiken we encryptie in SQL Server.CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'SterkeWachtwoord123!'; CREATE CERTIFICATE CertificaatDatabase
WITH SUBJECT = 'Datawarehouse Beveiliging'; CREATE SYMMETRIC KEY SleutelData
WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE CertificaatDatabase;
✅ Hier creëren we een versleutelde sleutel die wordt gebruikt om gevoelige gegevens te beschermen.Een goede rolgebaseerde toegang zorgt ervoor dat alleen juiste personen bepaalde data kunnen bekijken.✔ Beheerders hebben volledige toegang.
✔ Medewerkers zien alleen gegevens die ze nodig hebben.
✔ Externe gebruikers krijgen beperkte toegang tot specifieke datasets.CREATE ROLE DataAnalist;
GRANT SELECT ON fact_prestaties TO DataAnalist;
✅ Hier geven we de rol 'DataAnalist' alleen leesrechten op prestatiedata.Het is belangrijk om bij te houden wie toegang heeft gehad tot de data en wanneer wijzigingen zijn aangebracht.CREATE SERVER AUDIT AuditDataWarehouse
TO FILE (FILEPATH = 'C:\Logs\AuditLog.sqlaudit'); CREATE DATABASE AUDIT SPECIFICATION AuditSpecificatie
FOR SERVER AUDIT AuditDataWarehouse
ADD (SELECT ON fact_prestaties BY DataAnalist);
✅ Hier loggen we alle SELECT-opdrachten die door DataAnalisten zijn uitgevoerd.Omdat data vaak persoonlijke informatie bevat, moeten we voldoen aan privacywetgeving.✔ Gegevens anonimiseren → Bijvoorbeeld namen vervangen door ID’s.
✔ Minimaliseren van opgeslagen data → Alleen bewaren wat strikt nodig is.
✔ Beperking van toegang tot persoonsgegevens → Bijvoorbeeld encryptie van medische en financiële gegevens.Meer uitleg over privacy en GDPR-compliance vind je op Microsoft Privacy.✅ Encryptie beschermt gevoelige data tegen ongeautoriseerde toegang.
✅ Rolgebaseerde toegang zorgt ervoor dat gebruikers alleen relevante data zien.
✅ Logging en monitoring helpen bij het detecteren van ongewenste toegangspogingen.
✅ Privacywetgeving zoals GDPR moet worden nageleefd om persoonsgegevens te beschermen.]]></description><link>11.-datawarehousing/11.9-databeveiliging-in-een-datawarehouse.html</link><guid isPermaLink="false">11. Datawarehousing/11.9 - Databeveiliging in een datawarehouse.md</guid><pubDate>Tue, 24 Jun 2025 09:44:39 GMT</pubDate><enclosure url="media/ezgif-59838823b021b6.jpg" length="0" type="image/jpeg"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/ezgif-59838823b021b6.jpg&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[ezgif-59838823b021b6]]></title><description><![CDATA[<img src="media/ezgif-59838823b021b6.jpg" target="_self">]]></description><link>media/ezgif-59838823b021b6.html</link><guid isPermaLink="false">media/ezgif-59838823b021b6.jpg</guid><pubDate>Tue, 24 Jun 2025 09:44:37 GMT</pubDate><enclosure url="media/ezgif-59838823b021b6.jpg" length="0" type="image/jpeg"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/ezgif-59838823b021b6.jpg&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[11.7 - Datawarehouse implementeren]]></title><description><![CDATA[Nu we begrijpen hoe een datawarehouse is ontworpen, gaan we kijken hoe je het daadwerkelijk bouwt en implementeert in SQL Server en DataGrip. In deze paragraaf nemen we je mee door de technische stappen om een volledig functioneel datawarehouse op te zetten.✅ Waarom is technische implementatie belangrijk?
✔ Maakt het mogelijk om data correct op te slaan en te beheren.
✔ Ondersteunt snelle analyses en Business Intelligence met Power BI.
✔ Voorkomt fouten en optimaliseert prestaties door een goede structuur.Het eerste wat we doen is een nieuwe database maken waarin we het datawarehouse opbouwen.CREATE DATABASE SchoolDataWarehouse;
✔ Dit creëert een aparte database waarin we alle data gaan opslaan.
✔ We gebruiken SQL Server LocalDB, zodat het lokaal draait en makkelijk toegankelijk is.Eerst de dimensie-tabellen, daarna pas de fact-tabel.✅ Dimension-tabellen: extra context toevoegenCREATE TABLE dim_leerling ( leerling_id INT PRIMARY KEY, naam NVARCHAR(100), geboortedatum DATE
); CREATE TABLE dim_vak ( vak_id INT PRIMARY KEY, vaknaam NVARCHAR(50), docent NVARCHAR(100)
);
✅ Fact-tabel: opslaan van prestatiegegevensCREATE TABLE fact_prestaties ( leerling_id INT, vak_id INT, schooljaar INT, gemiddelde_cijfer DECIMAL(2,1), aantal_toetsen INT, FOREIGN KEY (leerling_id) REFERENCES dim_leerling(leerling_id), FOREIGN KEY (vak_id) REFERENCES dim_vak(vak_id)
);
✔ De fact-tabel bevat de meetwaarden (zoals cijfers per vak per jaar).
✔ De dimensie-tabellen bevatten extra details (zoals leerlingnamen en vakken).Indien je eerst de fact-tabel hebt gemaakt zonder hier vreemde sleutels in te maken, en daarna pas de dimensie-tabellen, moet je nog vreemde sleutels toevoegen. Maar indien je eerst de dimensie-tabellen hebt gemaakt en daarna de fact-tabel met daarin de vreemde sleutels, kun je deze stap overslaan!ALTER TABLE fact_prestaties
ADD CONSTRAINT FK_Leerling FOREIGN KEY (leerling_id) REFERENCES dim_leerling(leerling_id); ALTER TABLE fact_prestaties
ADD CONSTRAINT FK_Vak FOREIGN KEY (vak_id) REFERENCES dim_vak(vak_id);
✔ Dit zorgt ervoor dat de data correct gekoppeld wordt en integriteit bewaakt blijft.
✔ Leerlinggegevens en vakinformatie worden nu correct geassocieerd met prestaties.We gaan nu data importeren in SQL Server, zodat we het kunnen testen in Power BI.✅ Voorbeeld: Een paar testgegevens invoerenINSERT INTO dim_leerling (leerling_id, naam, geboortedatum)
VALUES (1, 'Emma Janssen', '2006-05-12'); INSERT INTO dim_vak (vak_id, vaknaam, docent)
VALUES (1, 'Wiskunde', 'M. Peeters'); INSERT INTO fact_prestaties (leerling_id, vak_id, schooljaar, gemiddelde_cijfer, aantal_toetsen)
VALUES (1, 1, 2024, 7.8, 4);
✔ Hier testen we of de tabellen correct gevuld worden en goed werken.
✔ Als alles werkt, kunnen we de database koppelen aan Power BI!Meer uitleg over data-import in SQL Server vind je op Microsoft Docs.Power BI helpt om de gegevens te visualiseren en te analyseren.✅ Stappen om het datawarehouse in Power BI te gebruiken
✔ Open Power BI Desktop en kies SQL Server als databron.
✔ Selecteer de tabel ‘fact_prestaties’ en dimensies.
✔ Bouw een dashboard met cijfers per vak en per leerling.
✔ Maak een interactieve filter waarmee je specifieke leerlingen kunt bekijken.✅ Een datawarehouse wordt opgebouwd met een duidelijke structuur van fact- en dimensietabellen.
✅ SQL Server en DataGrip worden gebruikt om tabellen te maken en relaties te leggen.
✅ Data wordt geïmporteerd en gekoppeld aan Power BI voor analyse en visualisatie.
✅ Door deze methode kan een organisatie gestructureerde inzichten krijgen over prestaties en trends.]]></description><link>11.-datawarehousing/11.7-datawarehouse-implementeren.html</link><guid isPermaLink="false">11. Datawarehousing/11.7 - Datawarehouse implementeren.md</guid><pubDate>Tue, 24 Jun 2025 09:42:32 GMT</pubDate></item><item><title><![CDATA[11.6 - Datawarehouse-ontwerp]]></title><description><![CDATA[Een goed datawarehouse-ontwerp is essentieel voor snelle en efficiënte gegevensanalyse. Dit hoofdstuk behandelt hoe je een database structureert zodat deze optimaal werkt en klaar is voor gebruik met Power BI en SQL Server.✅ Waarom een goed ontwerp belangrijk is?
✔ Maakt data gemakkelijker te raadplegen → Snellere zoekopdrachten en rapportages.
✔ Voorkomt duplicatie en inefficiëntie → Bespaart opslagruimte en verhoogt de snelheid.
✔ Ondersteunt Business Intelligence en Big Data-analyse → Gebruikt logische verbanden tussen gegevens.Een goed ontworpen datawarehouse heeft duidelijke structuren en maakt gebruik van gestandaardiseerde methoden voor het opslaan en organiseren van data.✔ Splits operationele en analytische data → Dagelijkse data in aparte tabellen bewaren.
✔ Gebruik een Star- of Snowflake-schema → Logische scheiding tussen fact- en dimension-tabellen.
✔ Minimaliseer redundantie → Voorkom dubbele gegevens door normalisatie.
✔ Zorg voor schaalbaarheid → Ontwerp de database zodat deze kan meegroeien met toekomstige data.Wanneer je een datawarehouse ontwerpt, moet je kiezen tussen twee schema’s voor gegevensorganisatie.✔ Star-schema wordt vaak gekozen voor snelle analyses in Power BI.
✔ Snowflake-schema kan nuttig zijn bij zeer grote en complexe datasets.Meer uitleg over Star- en Snowflake-schema’s vind je op SQL Server Docs.<img alt="EDI_StarSchemaDbDiagram.png" height="421" src="media/edi_starschemadbdiagram.png" target="_self" style="width: 427px; max-width: 100%;"><br><img alt="snowflake-schema-120723_0.png" height="479" src="media/snowflake-schema-120723_0.png" target="_self" style="width: 685px; max-width: 100%;">In een datawarehouse is het verstandig en gebruikelijk om eerst de dimensietabellen te creëren, en dan pas de fact-tabel.Waarom?
De fact-tabel bevat foreign keys naar de primary keys in de dimensietabellen. Die foreign keys kunnen pas goed worden gedefinieerd als de primaire sleutels in de dimensies al bestaan. Het voorkomt fouten in je CREATE TABLE-scripts met verwijzingen naar nog-niet-bestaande tabellen. Dit zorgt dus voor:
Integriteitsbewaking vanaf het begin Makkelijker testen van joins en lookups
Stel dat we een datawarehouse voor een school maken om leerlingresultaten en prestaties te analyseren.✅ Stap 1: Dimensietabellen (context)CREATE TABLE dim_leerling ( leerling_id INT PRIMARY KEY, naam NVARCHAR(100), geboortedatum DATE
); CREATE TABLE dim_vak ( vak_id INT PRIMARY KEY, vaknaam NVARCHAR(50), docent NVARCHAR(100)
);
📌 Hier slaan we extra informatie op, zoals leerlingnamen en vakdetails.✅ Stap 2: Fact-tabel (centrale tabel met alle foreign keys)CREATE TABLE fact_prestaties ( leerling_id INT, vak_id INT, schooljaar INT, gemiddelde_cijfer DECIMAL(2,1), aantal_toetsen INT, FOREIGN KEY (leerling_id) REFERENCES dim_leerling(leerling_id), FOREIGN KEY (vak_id) REFERENCES dim_vak(vak_id)
);
📊 Hier slaan we kerngegevens op, zoals cijfers per vak per jaar.Een goed ontworpen datawarehouse kan eenvoudig worden gekoppeld aan Power BI.✔ Stap 1: Open Power BI Desktop en kies “SQL Server” als databron.
✔ Stap 2: Selecteer de fact- en dimensietabellen en laad de data in.
✔ Stap 3: Creëer een relatiemodel tussen de tabellen.
✔ Stap 4: Maak grafieken en tabellen om cijfers per vak per schooljaar te analyseren.✅ Een goed datawarehouse-ontwerp verhoogt snelheid en efficiëntie.
✅ Kies tussen een Star-schema (sneller) of een Snowflake-schema (geavanceerder).
✅ Gebruik SQL Server voor opslag en Power BI voor visualisatie.
✅ Ontwerp tabellen logisch zodat data goed gestructureerd blijft.]]></description><link>11.-datawarehousing/11.6-datawarehouse-ontwerp.html</link><guid isPermaLink="false">11. Datawarehousing/11.6 - Datawarehouse-ontwerp.md</guid><pubDate>Tue, 24 Jun 2025 09:34:28 GMT</pubDate><enclosure url="media/edi_starschemadbdiagram.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/edi_starschemadbdiagram.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[snowflake-schema-120723_0]]></title><description><![CDATA[<img src="media/snowflake-schema-120723_0.png" target="_self">]]></description><link>media/snowflake-schema-120723_0.html</link><guid isPermaLink="false">media/snowflake-schema-120723_0.png</guid><pubDate>Tue, 24 Jun 2025 09:17:36 GMT</pubDate><enclosure url="media/snowflake-schema-120723_0.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/snowflake-schema-120723_0.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[EDI_StarSchemaDbDiagram]]></title><description><![CDATA[<img src="media/edi_starschemadbdiagram.png" target="_self">]]></description><link>media/edi_starschemadbdiagram.html</link><guid isPermaLink="false">media/EDI_StarSchemaDbDiagram.png</guid><pubDate>Tue, 24 Jun 2025 09:16:19 GMT</pubDate><enclosure url="media/edi_starschemadbdiagram.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/edi_starschemadbdiagram.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[11.5 - Het ETL-proces]]></title><description><![CDATA[<img alt="1_vIod6OMc7BxgNxZHwCFISg.png" height="320" src="media/1_viod6omc7bxgnxzhwcfisg.png" target="_self" style="width: 694px; max-width: 100%;">Het ETL-proces (Extract, Transform, Load) is een essentieel onderdeel van datawarehousing. Hiermee halen we gegevens op, schonen ze op en laden ze in een gestructureerde database die klaar is voor analyse en visualisatie in Power BI.✅ Waarom is ETL belangrijk?
✔ Combineert data uit verschillende bronnen → Bijvoorbeeld klantgegevens, verkoopcijfers en marketingdata.
✔ Verwijdert fouten en inconsistenties → Bijvoorbeeld dubbele records en ontbrekende waarden corrigeren.
✔ Maakt data geschikt voor analyses en dashboards → Bijvoorbeeld omzet per maand en productcategorie berekenen.Bij Extract halen we ruwe gegevens op uit verschillende bronnen en slaan ze tijdelijk op in SQL Server.📦 We hebben een CSV-bestand met klantgegevens en een API met verkooptransacties.✔ SQL Server → We maken een staging-tabel om de ruwe data tijdelijk te bewaren.
✔ DataGrip → Hiermee schrijven we SQL-query’s om de data in te laden.CREATE TABLE staging_klanten ( klant_id INT, naam NVARCHAR(100), email NVARCHAR(100), telefoon NVARCHAR(20)
); BULK INSERT staging_klanten
FROM 'C:\data\klanten.csv'
WITH (FORMAT='CSV', FIRSTROW=2);
✅ Hier laden we de klantgegevens vanuit een CSV-bestand in SQL Server.Bij Transform controleren we de data en corrigeren fouten voordat we ze in het datawarehouse laden.DELETE FROM staging_klanten
WHERE email IS NULL; UPDATE staging_klanten
SET email = 'onbekend@example.com'
WHERE email IS NULL;
✅ Hier verwijderen we klanten zonder e-mail en vullen ontbrekende e-mails aan.Nu de data schoon en correct is, verplaatsen we deze naar het datawarehouse zodat ze klaar zijn voor analyse.INSERT INTO dw_klanten (klant_id, naam, email)
SELECT klant_id, naam, email
FROM staging_klanten;
✅ Hier laden we de opgeschoonde data in de definitieve datawarehouse-tabel.Na het ETL-proces kunnen we de data analyseren en visualiseren in Power BI.✔ Data importeren → Verbind Power BI met SQL Server.
✔ Grafieken maken → Bijvoorbeeld een staafdiagram met omzet per maand.
✔ Filters instellen → Bijvoorbeeld omzet per productcategorie bekijken.✅ ETL helpt bij het verzamelen, opschonen en structureren van gegevens.
✅ SQL Server en DataGrip maken het mogelijk om data efficiënt te verwerken.
✅ Power BI wordt gebruikt om inzichten en trends visueel weer te geven.
✅ Door het ETL-proces kunnen bedrijven betere beslissingen nemen op basis van schone en gestructureerde gegevens.]]></description><link>11.-datawarehousing/11.5-het-etl-proces.html</link><guid isPermaLink="false">11. Datawarehousing/11.5 - Het ETL-proces.md</guid><pubDate>Tue, 24 Jun 2025 09:14:01 GMT</pubDate><enclosure url="media/1_viod6omc7bxgnxzhwcfisg.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/1_viod6omc7bxgnxzhwcfisg.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[1_vIod6OMc7BxgNxZHwCFISg]]></title><description><![CDATA[<img src="media/1_viod6omc7bxgnxzhwcfisg.png" target="_self">]]></description><link>media/1_viod6omc7bxgnxzhwcfisg.html</link><guid isPermaLink="false">media/1_vIod6OMc7BxgNxZHwCFISg.png</guid><pubDate>Tue, 24 Jun 2025 09:13:58 GMT</pubDate><enclosure url="media/1_viod6omc7bxgnxzhwcfisg.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/1_viod6omc7bxgnxzhwcfisg.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[11.4 - Opbouw van een Datawarehouse]]></title><description><![CDATA[<img alt="ezgif-5ab474f3b3dde7.jpg" height="405" src="media/ezgif-5ab474f3b3dde7.jpg" target="_self" style="width: 695px; max-width: 100%;">Een datawarehouse is een speciale database waarin grote hoeveelheden gegevens worden verzameld, gestructureerd en geanalyseerd. In tegenstelling tot een gewone operationele database, die wordt gebruikt voor dagelijkse transacties, is een datawarehouse gericht op strategische inzichten en trends over langere perioden.Stel je een groot warenhuis voor:🛒 Dagelijkse winkel (operationele database) → Hier koop je producten direct en krijg je meteen een kassabon. Dit is vergelijkbaar met hoe een normale database werkt: snelle, directe bewerkingen en zoekopdrachten.📦 Distributiecentrum (datawarehouse) → Hier wordt voorraad opgeslagen, gegroepeerd en geanalyseerd. Dit helpt winkels om patronen te herkennen, zoals welke producten seizoensgebonden zijn of welke promoties het best werken.✅ Een datawarehouse helpt bedrijven om:
✔ Trends en patronen in verkoopdata te herkennen.
✔ Gegevens uit verschillende bronnen (marketing, klanten, sales) te combineren.
✔ Sneller strategische beslissingen te nemen.<br><img alt="ezgif-5c79b0e8d6eab5.jpg" height="391" src="media/ezgif-5c79b0e8d6eab5.jpg" target="_self" style="width: 696px; max-width: 100%;">Een datawarehouse wordt opgebouwd in drie lagen, zodat gegevens correct worden opgeslagen en verwerkt.Om gegevens correct in een datawarehouse te laden, zijn er twee methoden:🔹 ETL (Extract → Transform → Load) • Data wordt eerst opgeschoond en vervolgens opgeslagen. • Geschikt als het datawarehouse minder rekenkracht heeft. • Voorbeeld: Een webshop filtert duplicaten uit klantgegevens voordat ze naar het warehouse gaan.🔹 ELT (Extract → Load → Transform) • Data wordt direct geladen en pas later bewerkt. • Werkt goed in krachtige cloudplatforms zoals Azure Synapse. • Voorbeeld: Een sociale media-app verzamelt enorme hoeveelheden gegevens en analyseert deze pas later.Om gegevens snel te kunnen analyseren, worden fact-tabellen en dimension-tabellen gebruikt.✅ Fact-tabel
📊 Bevat meetwaarden, zoals omzet, aantal verkopen.
📈 Vaak groot en groeit dagelijks.✅ Dimension-tabellen
📌 Bevat context, zoals klantgegevens, productinformatie, tijdschema’s.
💡 Helpt bij filters en analyses.🔹 Star-schema → Eén centrale fact-tabel omringd door dimensions. Simpel en snel.
🔹 Snowflake-schema → Dimension-tabellen worden verder opgesplitst. Bespaart opslag, maar query’s worden complexer.Een goed datawarehouse gebruikt SQL Server voor opslag en Power BI voor analyse en visualisatie.✅ Stap 1: Data verzamelen Gebruik DataGrip om een dataset met schoolresultaten in SQL Server te laden.✅ Stap 2: Data opschonen Dubbele namen en ontbrekende cijfers verwijderen met SQL-query’s.✅ Stap 3: Data organiseren Maak een star-schema waarin een fact-tabel met cijfers gekoppeld wordt aan dimensies zoals leerlingen, vakken en schooljaren.✅ Stap 4: Data analyseren Gebruik SQL Server Analysis Services om trends in de resultaten te ontdekken (bijv. welke vakken verbeteren over tijd?).✅ Stap 5: Data visualiseren Gebruik Power BI Desktop om een dashboard te maken met:
📊 Grafiek: Gemiddelde cijfers per vak.
📅 Tijdlijn: Prestatietrends over verschillende jaren.
🧑‍🎓 Filteroptie: Vergelijk resultaten van individuele leerlingen.✅ Een datawarehouse combineert gegevens uit verschillende bronnen voor diepgaande analyses.
✅ ETL (Extract, Transform, Load) en ELT (Extract, Load, Transform) zorgen voor gestructureerde verwerking van data.
✅ Fact-tabellen en dimension-tabellen maken snelle en efficiënte analyses mogelijk.
✅ SQL Server en Power BI werken samen voor opslag, analyse en visualisatie van gegevens.
✅ Leerlingen kunnen zelf experimenteren met een datawarehouse door SQL Server, DataGrip en Power BI te gebruiken!]]></description><link>11.-datawarehousing/11.4-opbouw-van-een-datawarehouse.html</link><guid isPermaLink="false">11. Datawarehousing/11.4 - Opbouw van een Datawarehouse.md</guid><pubDate>Tue, 24 Jun 2025 09:12:26 GMT</pubDate><enclosure url="media/ezgif-5ab474f3b3dde7.jpg" length="0" type="image/jpeg"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/ezgif-5ab474f3b3dde7.jpg&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[ezgif-5c79b0e8d6eab5]]></title><description><![CDATA[<img src="media/ezgif-5c79b0e8d6eab5.jpg" target="_self">]]></description><link>media/ezgif-5c79b0e8d6eab5.html</link><guid isPermaLink="false">media/ezgif-5c79b0e8d6eab5.jpg</guid><pubDate>Tue, 24 Jun 2025 09:12:24 GMT</pubDate><enclosure url="media/ezgif-5c79b0e8d6eab5.jpg" length="0" type="image/jpeg"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/ezgif-5c79b0e8d6eab5.jpg&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[ezgif-5ab474f3b3dde7]]></title><description><![CDATA[<img src="media/ezgif-5ab474f3b3dde7.jpg" target="_self">]]></description><link>media/ezgif-5ab474f3b3dde7.html</link><guid isPermaLink="false">media/ezgif-5ab474f3b3dde7.jpg</guid><pubDate>Tue, 24 Jun 2025 09:11:57 GMT</pubDate><enclosure url="media/ezgif-5ab474f3b3dde7.jpg" length="0" type="image/jpeg"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/ezgif-5ab474f3b3dde7.jpg&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[11.3 - Business Intelligence]]></title><description><![CDATA[<img alt="what-is-business-intelligence-bi.png" height="365" src="media/what-is-business-intelligence-bi.png" target="_self" style="width: 696px; max-width: 100%;">Business Intelligence (BI) is een technologiegedreven proces waarmee bedrijven data analyseren en omzetten in bruikbare inzichten. Deze inzichten helpen bij betere besluitvorming en prestatieverbetering. Denk aan BI als een manier om verborgen patronen en trends in data te ontdekken en te gebruiken voor strategische beslissingen.✅ Waarom BI gebruiken?
✔ Helpt bedrijven bij strategische beslissingen → Bijvoorbeeld voorraadbeheer en personeelsplanning.
✔ Ontdekt patronen en trends in data → Bijvoorbeeld seizoenstrends in verkoopcijfers.
✔ Maakt data toegankelijk en visueel → Bijvoorbeeld interactieve dashboards in Power BI.Stel je hebt een winkel en verzamelt allerlei data:
📊 Hoeveel producten je verkoopt
📈 Welke producten het meest populair zijn
🗓 Op welke dagen de meeste klanten komen✅ Met BI kun je deze data analyseren en ontdekken welke producten je extra moet inkopen en op welke dagen je meer personeel nodig hebt.<br><img alt="business-intelligence-bi-concept.png" height="473" src="media/business-intelligence-bi-concept.png" target="_self" style="width: 690px; max-width: 100%;">✔ Big Data verwijst naar enorme hoeveelheden data die te groot en complex zijn voor traditionele systemen.
✔ BI helpt bedrijven om trends te ontdekken die anders onzichtbaar blijven.
✔ Voorbeeld → Een winkel gebruikt Big Data om te analyseren welke producten in verschillende seizoenen het meest worden verkocht.✔ Een datawarehouse is een centrale opslagplaats voor bedrijfsdata.
✔ Het structureert en schoont gegevens, zodat ze klaar zijn voor analyse.
✔ Voorbeeld → Een bedrijf gebruikt een datawarehouse om verkoopdata van verschillende vestigingen te combineren voor een uitgebreide analyse.SQL Server ondersteunt BI op verschillende manieren:
✔ Data Opslaan → Bewaart ruwe verkoop-, klant- en bedrijfsgegevens.
✔ Data Transformeren → Schoont en combineert gegevens voor analyse.
✔ Data Analyseren → Tools zoals SQL Server Analysis Services (SSAS) helpen bij complexe BI-analyses.✔ Een krachtige IDE voor databasebeheer en SQL-query’s.
✔ Helpt bij het ophalen en manipuleren van data uit databases.
✔ Maakt het beheer van complexe databases eenvoudiger voor data-analisten.Power BI helpt om data visueel inzichtelijk te maken via dashboards en rapporten:
✔ Data Importeren → Kan gegevens uit SQL Server en andere bronnen verwerken.
✔ Data Visualiseren → Creëert grafieken, tabellen en interactieve dashboards.
✔ Interactie → Gebruikers kunnen zelf data verkennen en inzichten verkrijgen.BI in de praktijk:✔ Data Verzamelen → Verkoopdata wordt opgeslagen in SQL Server via DataGrip.
✔ Data Voorbereiden → Data wordt geschoond en gestructureerd in SQL Server.
✔ Data Analyseren → BI-modellen detecteren verkooptrends.
✔ Data Visualiseren → Power BI maakt een dashboard met productpopulariteit en omzet per dag.✅ BI helpt bedrijven betere beslissingen te nemen met data-analyse.
✅ Big Data en datawarehousing maken diepe en uitgebreide analyses mogelijk.
✅ SQL Server en DataGrip ondersteunen het beheer en de verwerking van data.
✅ Power BI maakt data visueel en inzichtelijk via dashboards.]]></description><link>11.-datawarehousing/11.3-business-intelligence.html</link><guid isPermaLink="false">11. Datawarehousing/11.3 - Business Intelligence.md</guid><pubDate>Tue, 24 Jun 2025 09:08:59 GMT</pubDate><enclosure url="media/what-is-business-intelligence-bi.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/what-is-business-intelligence-bi.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[business-intelligence-bi-concept]]></title><description><![CDATA[<img src="media/business-intelligence-bi-concept.png" target="_self">]]></description><link>media/business-intelligence-bi-concept.html</link><guid isPermaLink="false">media/business-intelligence-bi-concept.png</guid><pubDate>Tue, 24 Jun 2025 09:08:56 GMT</pubDate><enclosure url="media/business-intelligence-bi-concept.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/business-intelligence-bi-concept.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[what-is-business-intelligence-bi-1]]></title><description><![CDATA[<img src="media/what-is-business-intelligence-bi-1.png" target="_self">]]></description><link>media/what-is-business-intelligence-bi-1.html</link><guid isPermaLink="false">media/what-is-business-intelligence-bi-1.png</guid><pubDate>Tue, 24 Jun 2025 09:08:49 GMT</pubDate><enclosure url="media/what-is-business-intelligence-bi-1.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/what-is-business-intelligence-bi-1.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[what-is-business-intelligence-bi]]></title><description><![CDATA[<img src="media/what-is-business-intelligence-bi.png" target="_self">]]></description><link>media/what-is-business-intelligence-bi.html</link><guid isPermaLink="false">media/what-is-business-intelligence-bi.png</guid><pubDate>Tue, 24 Jun 2025 09:07:24 GMT</pubDate><enclosure url="media/what-is-business-intelligence-bi.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/what-is-business-intelligence-bi.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[11.2 - Tools]]></title><description><![CDATA[Om effectief te werken met datawarehousing, hebben we niet alleen een dataset nodig, maar ook de juiste softwaretools voor beheer, analyse en visualisatie. Dit schooljaar hebben we al gewerkt met DataGrip en SQL Server LocalDB, en nu voegen we Power BI toe om inzichten beter zichtbaar te maken!✅ Waarom deze tools?
✔ DataGrip &amp; SQL Server → Voor databasebeheer, SQL-query’s en hands-on ervaring.
✔ Power BI → Voor data-analyse en visuele dashboards die inzicht geven.
✔ Perfecte combinatie → Microsoft SQL Server en Power BI werken naadloos samen.✔ Praktische ervaring met SQL → Essentieel voor data-analyse en warehousing.
✔ Databasebeheer → Mogelijkheid om tabellen te maken, beheren en complexe SQL-query’s uit te voeren.DataGrip is een krachtige tool voor databaseontwikkeling, terwijl SQL Server LocalDB een lichtgewicht versie van SQL Server is die perfect is voor lokaal gebruik en testing.✔ Visuele data-analyse → Ideaal voor het maken van interactieve dashboards en rapporten.
✔ Gebruiksvriendelijk → Minder technische SQL-kennis nodig, waardoor het toegankelijk is voor beginners.Power BI helpt bedrijven om gegevens inzichtelijk te maken, patronen te herkennen en strategische beslissingen te nemen op basis van visualisaties.Wij werken met Power BI Desktop, de offline versie die beschikbaar is via de Microsoft Store.Downloaden via Microsoft: [<a data-tooltip-position="top" aria-label="https://www.microsoft.com/nl-nl/power-platform/products/power-bi/desktop" rel="noopener nofollow" class="external-link is-unresolved" href="https://www.microsoft.com/nl-nl/power-platform/products/power-bi/desktop" target="_self">Power BI Desktop | Microsoft Power Platform</a>](Power BI Desktop)✅ DataGrip en SQL Server bieden de basis voor databasebeheer en SQL-query's.
✅ Power BI maakt het eenvoudig om data te visualiseren en diepgaande analyses uit te voeren.
✅ Samen vormen ze een krachtig ecosysteem voor datawarehousing en strategische besluitvorming.]]></description><link>11.-datawarehousing/11.2-tools.html</link><guid isPermaLink="false">11. Datawarehousing/11.2 - Tools.md</guid><pubDate>Tue, 24 Jun 2025 09:05:36 GMT</pubDate></item><item><title><![CDATA[11.1 - Inleiding]]></title><description><![CDATA[Een datawarehouse is een speciale database die wordt gebruikt voor het opslaan en analyseren van grote hoeveelheden gegevens over langere tijd. In tegenstelling tot dagelijkse databases, die bedoeld zijn voor directe operaties, is een datawarehouse geoptimaliseerd voor strategische analyse en besluitvorming.✅ Waarom een datawarehouse gebruiken?
✔ Geschikt voor lange termijn analyse → Helpt bij het ontdekken van patronen en trends.
✔ Combineert data uit verschillende bronnen → Bijvoorbeeld sales, marketing en klantenservice.
✔ Speciaal gebouwd voor snelle data-analyse → Ondersteunt bedrijfsstrategie en besluitvorming.✔ Dagelijkse database → Wordt gebruikt voor operationele taken zoals een klantenbestand of een schooladministratie.
✔ Datawarehouse → Verzamelt data over een lange periode om trends en patronen te analyseren.📩 Normale database → Je stuurt een e-mail naar een vriend en ontvangt een antwoord. Dit staat gewoon in een database.
📊 Datawarehouse → Je verzamelt alle e-mails van een jaar en analyseert hoeveel berichten je ontvangt en verzendt. Dit toont communicatiepatronen en trends.✔ Brengt informatie uit verschillende systemen samen → Sales, marketing en klantenservice worden gecombineerd.
✔ Helpt bij bedrijfsanalyse → Bepaal wat werkt en wat niet op basis van trends.
✔ Versnelt strategische besluitvorming → Directie en managers gebruiken het voor beleid en planning.✅ Een datawarehouse is een speciale database voor lange termijn data-analyse.
✅ Bedrijven gebruiken het om patronen en trends te ontdekken.
✅ Het ondersteunt strategische besluitvorming en combineert gegevens uit meerdere bronnen.]]></description><link>11.-datawarehousing/11.1-inleiding.html</link><guid isPermaLink="false">11. Datawarehousing/11.1 - Inleiding.md</guid><pubDate>Tue, 24 Jun 2025 09:03:10 GMT</pubDate></item><item><title><![CDATA[10.1 - Inleiding]]></title><description><![CDATA[Big Data is een term die verwijst naar enorme hoeveelheden gegevens die worden verzameld, opgeslagen en geanalyseerd. Deze gegevens kunnen afkomstig zijn van sociale media, online transacties, sensoren, medische systemen en vele andere bronnen.✅ Wat maakt Big Data uniek?
✔ Grootte → Er wordt dagelijks een enorme hoeveelheid data gegenereerd.
✔ Snelheid → Gegevens worden razendsnel gegenereerd en verwerkt.
✔ Complexiteit → Data komt in verschillende vormen: gestructureerd (databases) en ongestructureerd (afbeeldingen, video's, tekst).
### 9.1.1 – Waarom is Big Data belangrijk?Big Data is niet alleen belangrijk vanwege de hoeveelheid gegevens, maar vooral vanwege hoe deze data wordt gebruikt.✔ Data-analyse helpt bedrijven bij strategische beslissingen → Bijvoorbeeld gepersonaliseerde aanbevelingen op Netflix.
✔ Overheden en organisaties kunnen trends voorspellen → Bijvoorbeeld verkeersstromen analyseren.
✔ Wetenschappelijke doorbraken worden versneld → Bijvoorbeeld genetisch onderzoek en klimaatmodellen.Vergelijk Big Data met een groot boek vol informatie. Als je slechts één stukje tekst wilt vinden, ga je niet het hele boek doorlezen, maar gebruik je slimme zoekmethoden.✔ Machine learning en AI → Gegevens verwerken en patronen herkennen.
✔ Clouddiensten → Enorme opslagcapaciteit en rekenkracht voor Big Data.
✔ Data mining → Waardevolle informatie halen uit gigantische datasets.<img alt="EE1sWVPWkAA4p0L.jpeg" height="471" src="media/ee1swvpwkaa4p0l.jpeg" target="_self" style="width: 700px; max-width: 100%;">Big Data wordt doorgaans onderverdeeld in de zogenaamde vijf V's: Volume, Velocity, Variety, Veracity en Value.&nbsp;Deze termen zijn van cruciaal belang omdat ze de uitdagingen en mogelijkheden beschrijven die gepaard gaan met het verwerken van grote hoeveelheden gegevens.&nbsp; Volume: Dit verwijst naar de enorme hoeveelheid gegevens die worden verzameld. Het gaat om de grootte van de databanken die kunnen worden gebruikt om deze gegevens op te slaan en te analyseren.&nbsp; Velocity: Dit is de snelheid met wie de gegevens worden verzameld en hoe snel ze moeten worden verwerkt. Het gaat om het vermogen om data in real-time of bijna real-time te verwerken.&nbsp; Variety: Dit verwijst naar de verschillende soorten gegevens die zijn beschikbaar, waaronder georganiseerde data zoals tabellen, ongeorganiseerde data zoals tekst en beeldjes, en semi-organiseerde data zoals XML of JSON2.&nbsp; Veracity: Dit gaat over de nauwkeurigheid en kwaliteit van de gegevens. Het is belangrijk om ervoor te zorgen dat de gegevens waardevol en correct zijn voor het maken van beslissingen.&nbsp; Value: Dit is het waardeproces van de gegevens. Het gaat om het vermogen om de gegevens te analyseren en te interpreteren om waardevolle inzichten te vinden die kunnen worden gebruikt voor besluitvorming. Oftewel: hoeveel (geld) is bepaalde data waard? ✅ Big Data gaat niet alleen om de hoeveelheid gegevens, maar om de waarde die eruit gehaald kan worden.
✅ Door slimme algoritmen kunnen bedrijven en wetenschappers inzichten verkrijgen die anders verborgen blijven.
✅ De groei van data en de opslag ervan evolueert voortdurend.
✅ Big Data wordt doorgaans onderverdeeld in vijf woorden die beginnen met de letter V.]]></description><link>10.-big-data/10.1-inleiding.html</link><guid isPermaLink="false">10. Big Data/10.1 - Inleiding.md</guid><pubDate>Tue, 24 Jun 2025 09:01:15 GMT</pubDate><enclosure url="media/ee1swvpwkaa4p0l.jpeg" length="0" type="image/jpeg"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/ee1swvpwkaa4p0l.jpeg&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[10.6 - Value]]></title><description><![CDATA[<img alt="big-data-to-big-value.png" height="316" src="media/big-data-to-big-value.png" target="_self" style="width: 687px; max-width: 100%;">De vijfde V van Big Data staat voor Value (waarde), oftewel de inzichten en voordelen die we uit gegevens kunnen halen. Het gaat niet alleen om het verzamelen van data, maar vooral om hoe die gegevens worden gebruikt om betere beslissingen te nemen, kosten te besparen en innovatie te stimuleren.✅ Waarom is value belangrijk?
✔ Gegevens helpen bedrijven en organisaties patronen en trends te ontdekken → Bijvoorbeeld klantgedrag of marktontwikkelingen.
✔ Data-analyse kan kosten besparen → Bijvoorbeeld efficiëntere productieprocessen en energiebeheer.
✔ Data maakt innovatie mogelijk → Bijvoorbeeld slimme steden en nieuwe technologieën.Door grote hoeveelheden gegevens te analyseren, kunnen organisaties verborgen trends en patronen ontdekken die anders onzichtbaar blijven.✔ Klantgedrag → Amazon analyseert koopgedrag en doet gepersonaliseerde aanbevelingen, wat leidt tot hogere verkoopcijfers en meer klanttevredenheid.
✔ Gezondheidszorg → Onderzoekers analyseren medische gegevens om patronen in ziektes te ontdekken, wat helpt bij de ontwikkeling van nieuwe behandelingen en medicijnen.Data helpt bedrijven inefficiënties te identificeren, waardoor ze geld kunnen besparen.✔ Productieprocessen → Fabrieken analyseren sensorgegevens om inefficiënties in productie te ontdekken, wat leidt tot lagere productiekosten.
✔ Energiebeheer → Energiebedrijven analyseren slimme metergegevens om energieverbruik te optimaliseren, wat leidt tot lagere kosten en duurzamere distributie.Goede data maakt het mogelijk om betere, geïnformeerde beslissingen te nemen.✔ Financiële Sector → Banken en investeringsmaatschappijen analyseren gegevens om risico’s beter te begrijpen en investeringen te optimaliseren.
✔ Marketing → Bedrijven gebruiken data over klantgedrag en markttrends om effectievere marketingstrategieën te ontwikkelen.Data stimuleert innovatie en nieuwe zakelijke kansen.✔ Productontwikkeling → Bedrijven zoals Apple en Google analyseren gegevens om nieuwe functies en producten te ontwikkelen, gebaseerd op klantgebruik.
✔ Slimme Steden → Steden zoals Singapore gebruiken Big Data om verkeer efficiënter te beheren en openbare diensten te verbeteren.✅ Big Data biedt waarde door betere beslissingen, kostenbesparing en innovatie.
✅ Datagedreven inzichten helpen bedrijven om concurrentievoordeel te behalen.
✅ Data kan niet alleen bestaande processen verbeteren, maar ook nieuwe kansen en technologieën ontdekken.]]></description><link>10.-big-data/10.6-value.html</link><guid isPermaLink="false">10. Big Data/10.6 - Value.md</guid><pubDate>Tue, 24 Jun 2025 08:59:45 GMT</pubDate><enclosure url="media/big-data-to-big-value.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/big-data-to-big-value.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[big-data-to-big-value]]></title><description><![CDATA[<img src="media/big-data-to-big-value.png" target="_self">]]></description><link>media/big-data-to-big-value.html</link><guid isPermaLink="false">media/big-data-to-big-value.png</guid><pubDate>Tue, 24 Jun 2025 08:59:41 GMT</pubDate><enclosure url="media/big-data-to-big-value.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/big-data-to-big-value.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[10.5 - Veracity]]></title><description><![CDATA[<img alt="0_C8lyVlqjWAxKnpQg.png" height="470" src="media/0_c8lyvlqjwaxknpqg.png" target="_self" style="width: 694px; max-width: 100%;">De vierde V van Big Data staat voor Veracity (betrouwbaarheid), oftewel de nauwkeurigheid en kwaliteit van gegevens. In de wereld van Big Data is het cruciaal om ervoor te zorgen dat de gegevens correct en betrouwbaar zijn, omdat slechte data kan leiden tot verkeerde beslissingen en negatieve gevolgen.✅ Waarom is veracity belangrijk?
✔ Niet alle gegevensbronnen zijn even betrouwbaar → Fake news en onjuiste sensordata kunnen de analyses beïnvloeden.
✔ Slechte data kan schadelijke effecten hebben → Bijvoorbeeld verkeerde medische diagnoses of inefficiënte marketingcampagnes.
✔ Gegevens moeten worden geverifieerd en schoongemaakt → Dit zorgt voor accurate en bruikbare data voor analyses.Niet alle gegevens zijn even nauwkeurig. Het is belangrijk om te weten waar data vandaan komt en hoe het is verzameld.✔ Sociale Media → Gegevens van sociale media kunnen waardevol zijn, maar ze bevatten ook veel ruis, zoals spam en fake news. Slimme filteringstechnieken zijn nodig.
✔ Sensoren → Sensorgegevens kunnen variëren in nauwkeurigheid, afhankelijk van de kwaliteit en kalibratie van de sensor. Bijvoorbeeld een temperatuursensor die verkeerde gegevens geeft omdat hij niet goed is ingesteld.De betrouwbaarheid van Big Data hangt af van de nauwkeurigheid, volledigheid en consistentie van gegevens.✔ Medische Gegevens → In de gezondheidszorg is het van levensbelang dat patiëntendossiers correct en compleet zijn. Onjuiste data kan verkeerde diagnoses veroorzaken.
✔ Financiële Gegevens → Voor banken en financiële instellingen is nauwkeurige transactiegegevens nodig om fraude te detecteren en voorkomen.Voordat data bruikbaar is, moet het worden gecontroleerd en opgeschoond.✔ Data Cleaning → Verwijderen van duplicaten, corrigeren van fouten en aanvullen van ontbrekende waarden. Bijvoorbeeld een klantendatabase waarin duplicaten worden verwijderd voor betere analyses.
✔ Validatie → Het controleren van gegevens op juistheid en consistentie. Bijvoorbeeld, controleren of alle e-mailadressen in een dataset correct zijn.Wanneer gegevens onjuist, incompleet of vervuild zijn, kan dit grote problemen veroorzaken.✔ Marketingcampagnes → Als een bedrijf verkeerde klantdata gebruikt, kan de campagne inefficiënt zijn, omdat het de verkeerde doelgroep bereikt.
✔ Gezondheidszorg → Onjuiste medische gegevens kunnen leiden tot verkeerde behandelingen en ernstige gezondheidsrisico’s.✅ Nauwkeurige gegevens vormen de basis voor betrouwbare beslissingen.
✅ In de gezondheidszorg kunnen correcte gegevens levens redden.
✅ In de financiële sector helpen betrouwbare gegevens bij fraudepreventie en risicobeheer.]]></description><link>10.-big-data/10.5-veracity.html</link><guid isPermaLink="false">10. Big Data/10.5 - Veracity.md</guid><pubDate>Tue, 24 Jun 2025 08:57:24 GMT</pubDate><enclosure url="media/0_c8lyvlqjwaxknpqg.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/0_c8lyvlqjwaxknpqg.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[0_C8lyVlqjWAxKnpQg]]></title><description><![CDATA[<img src="media/0_c8lyvlqjwaxknpqg.png" target="_self">]]></description><link>media/0_c8lyvlqjwaxknpqg.html</link><guid isPermaLink="false">media/0_C8lyVlqjWAxKnpQg.png</guid><pubDate>Tue, 24 Jun 2025 08:57:22 GMT</pubDate><enclosure url="media/0_c8lyvlqjwaxknpqg.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/0_c8lyvlqjwaxknpqg.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[10.4 - Variety]]></title><description><![CDATA[<img alt="Data-sources-of-Big-Data.jpg" src="media/data-sources-of-big-data.jpg" target="_self">De derde V van Big Data staat voor Variety (verscheidenheid), oftewel de verschillende soorten gegevens die worden verzameld en verwerkt. Big Data bestaat niet alleen uit nette databases, maar ook uit chaotische, ongestructureerde data zoals sociale media-posts, e-mails en videobeelden.✅ Waarom is variety belangrijk?
✔ Data komt in verschillende structuren en formaten → Niet alle informatie past in een database.
✔ Het combineren van verschillende soorten data biedt betere inzichten → Bijvoorbeeld medische dossiers en MRI-scans samen analyseren.
✔ Slimme technologieën nodig om de diversiteit van gegevens te beheren → Denk aan kunstmatige intelligentie en machine learning.<br><img alt="Types-of-Big-Data-Infographic-1024x536.png" height="362" src="media/types-of-big-data-infographic-1024x536.png" target="_self" style="width: 691px; max-width: 100%;">Gegevens in Big Data kunnen worden onderverdeeld in drie hoofdcategorieën:✔ Beschrijving → Data die netjes in rijen en kolommen staat, zoals in een traditionele database.
✔ Voorbeelden → Een Excel-spreadsheet met klantgegevens (naam, adres, telefoonnummer), een database met productinformatie (product-ID, prijs, voorraad).✔ Beschrijving → Data die geen vaste structuur heeft en moeilijk in een database past.
✔ Voorbeelden → Tekst van e-mails, sociale media-berichten, afbeeldingen, video’s en audio. Bijvoorbeeld, miljoenen foto’s en video’s die dagelijks op Instagram en YouTube worden geüpload.✔ Beschrijving → Data met een zekere structuur, maar niet zo strikt als gestructureerde gegevens. Bevat tags of markers om elementen te scheiden.
✔ Voorbeelden → XML-bestanden, JSON-bestanden, HTML-pagina’s. Bijvoorbeeld, een JSON-bestand met details van een online bestelling (klantnaam, producten, prijzen).Big Data wordt in vele sectoren gebruikt en bestaat daar uit diverse datatypen:✔ Gestructureerd → Productcatalogus met prijzen en voorraadniveaus.
✔ Ongestructureerd → Klantrecensies en feedback.
✔ Semi-gestructureerd → Logbestanden van websitebezoeken in JSON-formaat.✔ Gestructureerd → Gebruikersprofielen met naam, leeftijd, locatie.
✔ Ongestructureerd → Berichten, foto’s en video’s die gebruikers plaatsen.
✔ Semi-gestructureerd → API-responses van platforms in JSON/XML.✔ Gestructureerd → Patiëntendossiers met medische geschiedenis en testresultaten.
✔ Ongestructureerd → Artsennotities, MRI-scans, röntgenfoto’s.
✔ Semi-gestructureerd → Elektronische medische dossiers (EMR) met gemengde data.✅ Het omgaan met verschillende soorten gegevens geeft een vollediger beeld van situaties.
✅ Medische experts kunnen betere diagnoses stellen door gestructureerde bloedtestdata te combineren met ongestructureerde artsennotities.
✅ Marketingteams kunnen gepersonaliseerde campagnes maken door gestructureerde klantdata te combineren met sociale media-activiteiten.]]></description><link>10.-big-data/10.4-variety.html</link><guid isPermaLink="false">10. Big Data/10.4 - Variety.md</guid><pubDate>Tue, 24 Jun 2025 08:56:34 GMT</pubDate><enclosure url="media/data-sources-of-big-data.jpg" length="0" type="image/jpeg"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/data-sources-of-big-data.jpg&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Types-of-Big-Data-Infographic-1024x536]]></title><description><![CDATA[<img src="media/types-of-big-data-infographic-1024x536.png" target="_self">]]></description><link>media/types-of-big-data-infographic-1024x536.html</link><guid isPermaLink="false">media/Types-of-Big-Data-Infographic-1024x536.png</guid><pubDate>Tue, 24 Jun 2025 08:56:31 GMT</pubDate><enclosure url="media/types-of-big-data-infographic-1024x536.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/types-of-big-data-infographic-1024x536.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Data-sources-of-Big-Data]]></title><description><![CDATA[<img src="media/data-sources-of-big-data.jpg" target="_self">]]></description><link>media/data-sources-of-big-data.html</link><guid isPermaLink="false">media/Data-sources-of-Big-Data.jpg</guid><pubDate>Tue, 24 Jun 2025 08:56:12 GMT</pubDate><enclosure url="media/data-sources-of-big-data.jpg" length="0" type="image/jpeg"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/data-sources-of-big-data.jpg&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[1_8QDJDlRmlb3Zo5gupANH5Q]]></title><description><![CDATA[<img src="media/1_8qdjdlrmlb3zo5gupanh5q.jpg" target="_self">]]></description><link>media/1_8qdjdlrmlb3zo5gupanh5q.html</link><guid isPermaLink="false">media/1_8QDJDlRmlb3Zo5gupANH5Q.jpg</guid><pubDate>Tue, 24 Jun 2025 08:51:03 GMT</pubDate><enclosure url="media/1_8qdjdlrmlb3zo5gupanh5q.jpg" length="0" type="image/jpeg"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/1_8qdjdlrmlb3zo5gupanh5q.jpg&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[10.3 - Velocity]]></title><description><![CDATA[<img alt="435722_1_En_3_Fig1_HTML.png" src="media/435722_1_en_3_fig1_html.png" target="_self">De tweede V van Big Data staat voor Velocity (snelheid), oftewel de snelheid waarmee gegevens worden gegenereerd, verzameld en verwerkt. In een wereld waar data constant wordt geproduceerd, is real-time verwerking cruciaal voor bedrijven en organisaties om snel beslissingen te nemen.✅ Waarom is velocity belangrijk?
✔ Data wordt razendsnel gegenereerd → Bijvoorbeeld miljoenen financiële transacties per seconde.
✔ Real-time verwerking helpt bij snelle beslissingen → Denk aan navigatiesystemen die direct de beste route berekenen.
✔ Streaming data vereist onmiddellijke analyse → Bijvoorbeeld sociale media-reacties en sensorgegevens.Wanneer snelheid cruciaal is, moeten gegevens direct worden verwerkt zodra ze beschikbaar zijn.✔ Financiële Markten → Beurzen verwerken miljoenen transacties per seconde. Real-time data-analyse helpt handelaren bij snelle beslissingen.
✔ Sociale Media → Platforms zoals Twitter en Facebook moeten onmiddellijk reageren op likes, reacties en berichten, zodat gebruikers een vloeiende ervaring hebben.Sommige gegevens stromen voortdurend binnen en moeten direct worden verwerkt, zonder vertraging.✔ Internet of Things (IoT) → Slimme apparaten zoals thermostaten en beveiligingscamera’s sturen continu gegevens naar servers. Dit zorgt ervoor dat de temperatuur automatisch wordt aangepast of verdachte activiteiten onmiddellijk worden gedetecteerd.
✔ Navigatiesystemen → GPS-systemen in auto’s verzamelen continu locatie- en snelheidsgegevens. Hierdoor kan in real-time de beste route worden berekend en kunnen verkeersupdates worden gedeeld.Traditionele systemen werkten vaak met batchverwerking, waarbij gegevens op vaste tijden werden geanalyseerd. Big Data vereist echter real-time verwerking.✔ Batchverwerking → Een supermarkt verzamelt en analyseert aan het einde van de dag alle verkoopgegevens om voorraadniveaus bij te werken.
✔ Real-time verwerking → Een online winkel zoals Amazon reageert direct op klantgedrag en toont aanbevelingen op basis van recente zoekopdrachten en aankopen.✅ Snelle gegevensverwerking stelt bedrijven in staat om direct te reageren op veranderingen.
✅ Gezondheidszorg kan real-time gegevens gebruiken om noodsituaties te herkennen en sneller in te grijpen.
✅ Marketingteams gebruiken real-time data om gepersonaliseerde aanbiedingen te doen aan klanten terwijl ze nog actief zijn.]]></description><link>10.-big-data/10.3-velocity.html</link><guid isPermaLink="false">10. Big Data/10.3 - Velocity.md</guid><pubDate>Tue, 24 Jun 2025 07:47:54 GMT</pubDate><enclosure url="media/435722_1_en_3_fig1_html.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/435722_1_en_3_fig1_html.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[435722_1_En_3_Fig1_HTML]]></title><description><![CDATA[<img src="media/435722_1_en_3_fig1_html.png" target="_self">]]></description><link>media/435722_1_en_3_fig1_html.html</link><guid isPermaLink="false">media/435722_1_En_3_Fig1_HTML.png</guid><pubDate>Tue, 24 Jun 2025 07:47:54 GMT</pubDate><enclosure url="media/435722_1_en_3_fig1_html.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/435722_1_en_3_fig1_html.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[10.2 - Volume]]></title><description><![CDATA[De eerste V van Big Data staat voor Volume, oftewel de enorme hoeveelheid gegevens die dagelijks wordt gegenereerd. Deze data is zo groot dat traditionele systemen niet voldoende capaciteit hebben om ze efficiënt te verwerken.✅ Waarom is volume belangrijk?
✔ Exponentiële groei van data → Van megabytes naar zetabytes in enkele decennia.
✔ Nieuwe technologieën nodig om data op te slaan en te verwerken → Denk aan cloudoplossingen en geavanceerde datacenters.
✔ Data-analyse helpt bedrijven en wetenschappers patronen te ontdekken → Gebruikt in onderzoek, klantgedrag en gezondheidszorg.De hoeveelheid data groeit razendsnel en komt uit verschillende bronnen:✔ Sociale Media → Platforms zoals Facebook, Twitter en Instagram genereren dagelijks miljarden berichten, foto’s en video’s. Bijvoorbeeld, Facebook verwerkt meer dan 500 terabytes aan gegevens per dag.
✔ E-commerce → Websites zoals Amazon en Alibaba verwerken dagelijks miljoenen transacties, waarbij elke transactie gegevens genereert over producten, klanten en betalingen.
✔ Internet of Things (IoT) → Slimme apparaten zoals thermostaten, zelfrijdende auto’s en wearables verzamelen continu gegevens. Een autonome auto kan per dag terabytes aan data produceren via sensoren en camera’s.<img alt="Growth-of-data-Statista.jpg" src="media/growth-of-data-statista.jpg" target="_self">
Op bovenstaande afbeelding zien we gigantische groei aan data wereldwijd, gemeten in zettabytes. En dit aantal zal alleen maar blijven stijgen. Eén ZB is ongeveer gelijk aan 1.000.000.000 TB! Grote hoeveelheden data moeten efficiënt worden opgeslagen en snelle toegang hebben.🏢 Grote bedrijven zoals Google, Microsoft en Amazon hebben gigantische datacenters verspreid over de wereld. Deze faciliteiten bevatten duizenden servers, die samenwerken om data op te slaan en te verwerken.☁ Veel bedrijven maken gebruik van cloudopslagdiensten zoals Amazon Web Services (AWS) en Microsoft Azure. Dit biedt flexibiliteit, hoge capaciteit en schaalbaarheid zonder dat fysieke servers nodig zijn.✔ Wetenschappelijk Onderzoek → De Large Hadron Collider bij CERN genereert 1 petabyte aan gegevens per dag tijdens experimenten met elementaire deeltjes.
✔ Gezondheidszorg → Ziekenhuizen en medische centra verzamelen enorme hoeveelheden gegevens zoals medische scans, genetische data en patiëntendossiers om nieuwe behandelingen te ontwikkelen.
✔ Financiële Sector → Banken verwerken dagelijks miljoenen transacties, die worden geanalyseerd voor fraudedetectie, risicobeheer en klantrelaties.✅ Het omgaan met gigantische hoeveelheden data is cruciaal om waardevolle inzichten te krijgen.
✅ Bedrijven en onderzoekers kunnen patronen en trends ontdekken die anders verborgen zouden blijven.
✅ Big Data helpt bedrijven beter te begrijpen wat klanten willen en versnelt wetenschappelijk onderzoek.]]></description><link>10.-big-data/10.2-volume.html</link><guid isPermaLink="false">10. Big Data/10.2 - Volume.md</guid><pubDate>Tue, 24 Jun 2025 07:40:17 GMT</pubDate><enclosure url="media/growth-of-data-statista.jpg" length="0" type="image/jpeg"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/growth-of-data-statista.jpg&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Growth-of-data-Statista]]></title><description><![CDATA[<img src="media/growth-of-data-statista.jpg" target="_self">]]></description><link>media/growth-of-data-statista.html</link><guid isPermaLink="false">media/Growth-of-data-Statista.jpg</guid><pubDate>Tue, 24 Jun 2025 07:35:44 GMT</pubDate><enclosure url="media/growth-of-data-statista.jpg" length="0" type="image/jpeg"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/growth-of-data-statista.jpg&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[EE1sWVPWkAA4p0L]]></title><description><![CDATA[<img src="media/ee1swvpwkaa4p0l.jpeg" target="_self">]]></description><link>media/ee1swvpwkaa4p0l.html</link><guid isPermaLink="false">media/EE1sWVPWkAA4p0L.jpeg</guid><pubDate>Tue, 24 Jun 2025 07:34:11 GMT</pubDate><enclosure url="media/ee1swvpwkaa4p0l.jpeg" length="0" type="image/jpeg"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/ee1swvpwkaa4p0l.jpeg&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[9.5 - 3NV]]></title><description><![CDATA[In de derde normaalvorm (3NV) splitsen we gegevens af die niet afhankelijk zijn van een primaire sleutel, maar die afgeleid zijn van een ander attribuut. Dit helpt om de database nog verder te structureren en onafhankelijke gegevens correct te scheiden.✅ Waarom 3NV gebruiken?
✔ Voorkomt indirecte afhankelijkheden → Gegevens worden alleen opgeslagen waar ze logisch thuishoren.
✔ Maakt updates eenvoudiger → Voorkomt inconsistenties bij het wijzigen van records.
✔ Creëert een duidelijke databasestructuur → Tabellen krijgen een heldere, logische indeling.🎯 Stap 1: Identificeer gegevens die niet direct afhankelijk zijn van een sleutel maar een ander attribuut nodig hebben.
🎯 Stap 2: Verplaats deze gegevens naar een nieuwe tabel en voeg een sleutel toe waarop ze afhankelijk zijn.
🎯 Stap 3: Geef logische namen aan de tabellen.Bij 2NV hadden we drie tabellen:(bestelnummer, datum, klantnummer, klantnaam)
(bestelnummer, productnummer, aantal, korting)
(productnummer, omschrijving, prijs)
🎯 Wat nu gesplitst moet worden in 3NV? De kolom klantnaam in de bestellingen-tabel is niet afhankelijk van bestelnummer, maar van klantnummer.
✅ We verplaatsen deze naar een aparte tabel voor klanten!(bestelnummer, datum, klantnummer)
✅ Hier bewaren we alleen gegevens die direct bij de bestelling horen.(bestelnummer, productnummer, aantal, korting)
(artikelnummer, omschrijving, prijs)
(klantnummer, klantnaam)
✅ Hier bewaren we klantgegevens, onafhankelijk van bestellingen.Voor een duidelijke database geven we logische namen aan de tabellen:
✔ BESTELLINGEN → Bevat bestelgegevens.
✔ BESTEL_REGELS → Bevat welke producten in een bestelling zitten.
✔ PRODUCTEN → Bevat productinformatie.
✔ KLANTEN → Bevat klantgegevens.Met deze structuur zijn alle gegevens correct gesplitst en klaar voor verdere optimalisatie.Nu we alle gegevens correct hebben gesplitst, maken we een schematische weergave van de relaties tussen de tabellen en een Entity-Relationship Diagram (ERD). Dit helpt om de kardinaliteit tussen tabellen te bepalen, zoals:
✔ Eén bestelling bevat meerdere bestelregels.
✔ Een artikel kan in meerdere bestellingen voorkomen.
✔ Een klant kan meerdere bestellingen plaatsen.<img alt="3NV.drawio.png" src="media/3nv.drawio.png" target="_self">✅ In 3NV splitsen we onafhankelijke gegevens in aparte tabellen.
✅ Dit voorkomt indirecte afhankelijkheden en maakt updates eenvoudiger.
✅ We geven tabellen logische namen en maken een ERD om relaties visueel te tonen.]]></description><link>9.-normalisatie/9.5-3nv.html</link><guid isPermaLink="false">9. Normalisatie/9.5 - 3NV.md</guid><pubDate>Tue, 24 Jun 2025 07:27:55 GMT</pubDate><enclosure url="media/3nv.drawio.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/3nv.drawio.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[3NV.drawio]]></title><description><![CDATA[<img src="media/3nv.drawio.png" target="_self">]]></description><link>media/3nv.drawio.html</link><guid isPermaLink="false">media/3NV.drawio.png</guid><pubDate>Tue, 24 Jun 2025 07:27:54 GMT</pubDate><enclosure url="media/3nv.drawio.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/3nv.drawio.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[9.4 - 2NV]]></title><description><![CDATA[In de tweede normaalvorm (2NV) splitsen we gegevens af die slechts afhankelijk zijn van één sleutel, in plaats van de samengestelde sleutel. Dit helpt om de database logischer en efficiënter te maken.✅ Waarom 2NV gebruiken?
✔ Scheidt gedeeltelijk afhankelijke attributen → Voorkomt dubbele opslag en inconsistentie.
✔ Maakt de database overzichtelijker → Structureert data beter, waardoor zoekopdrachten sneller worden.
✔ Voorbereiding op verdere normalisatie → Creëert een solide basis voor de derde normaalvorm.In 1NV hebben we de repeterende groep (RG) afgesplitst. Nu splitsen we gegevens die afhankelijk zijn van slechts één attribuut, zodat ze in een aparte tabel komen.🎯 Stap 1: Identificeer welke gegevens in de RG afhankelijk zijn van slechts één kolom.
🎯 Stap 2: Verplaats deze gegevens naar een nieuwe tabel, inclusief de sleutel waarop ze afhankelijk zijn.Bij 1NV hadden we twee tabellen:(bestelnummer, datum, klantnummer, klantnaam)
(bestelnummer, productnummer, omschrijving, prijs, aantal, korting)
🎯 Wat nu gesplitst moet worden in 2NV? De kolommen omschrijving en prijs zijn alleen afhankelijk van artikelnummer, niet van bestelnummer.✅ We verplaatsen deze naar een aparte tabel voor producten!(bestelnummer, datum, klantnummer, klantnaam)
(bestelnummer, productnummer, aantal, korting)
✅ Hier bewaren we alleen gegevens die specifiek bij een bestelling horen.(productnummer, omschrijving, prijs)
✅ Hier bewaren we gegevens die bij het product zelf horen, onafhankelijk van bestellingen.✅ In 2NV splitsen we gegevens af die afhankelijk zijn van slechts één sleutel.
✅ Productgegevens worden verplaatst naar een aparte tabel.
✅ Dit voorkomt herhaling en maakt de database sneller en overzichtelijker.]]></description><link>9.-normalisatie/9.4-2nv.html</link><guid isPermaLink="false">9. Normalisatie/9.4 - 2NV.md</guid><pubDate>Tue, 24 Jun 2025 07:23:32 GMT</pubDate></item><item><title><![CDATA[9.3 - 1NV]]></title><description><![CDATA[In de eerste normaalvorm (1NV) splitsen we repeterende groepen (RG) af, zodat gegevens correct worden gestructureerd. Dit voorkomt herhaling en inconsistentie binnen een tabel.✅ Waarom 1NV gebruiken?
✔ Elimineert repeterende groepen → Voorkomt dubbele gegevens.
✔ Maakt records unieker → Zorgt voor heldere identificatie van gegevens.
✔ Voorbereiding op verdere normalisatie → Biedt een solide basis voor de tweede normaalvorm.Bij 0NV hebben we alle gegevens geïnventariseerd. In 1NV splitsen we de repeterende groep (RG) af.(bestelnummer, datum, klantnummer, klantnaam, RG (productnummer, omschrijving, prijs, aantal, korting))
🎯 Stap 1: De RG verwijderen uit 0NV en afzonderlijk opschrijven.
🎯 Stap 2: De primaire sleutel van de RG identificeren (productnummer).
🎯 Stap 3: De primaire sleutel onderstrepen en bovenaan plaatsen.
🎯 Stap 4: De primaire sleutel van 0NV (bestelnummer) toevoegen aan de RG.Na de afsplitsing van de RG, krijgen we twee tabellen:(bestelnummer, datum, klantnummer, klantnaam)
✅ Hier bewaren we alleen de hoofdgegevens.(bestelnummer, productnummer, omschrijving, prijs, aantal, korting)
✅ De RG bevat nu artikelgegevens gekoppeld aan een uniek bestelnummer.Omdat artikelgegevens gekoppeld zijn aan een bestelnummer, krijgen we een samengestelde sleutel:✔ bestelnummer → Primaire sleutel van de hoofdgegevens.
✔ productnummer → Primaire sleutel van de RG.Samen vormen deze een unieke combinatie die voorkomt dat artikelen verkeerd worden gekoppeld.✅ In 1NV splitsen we repeterende groepen af in aparte tabellen.
✅ Dit voorkomt duplicatie en inconsistente gegevens.
✅ Een samengestelde sleutel koppelt records op een unieke manier.]]></description><link>9.-normalisatie/9.3-1nv.html</link><guid isPermaLink="false">9. Normalisatie/9.3 - 1NV.md</guid><pubDate>Tue, 24 Jun 2025 07:22:59 GMT</pubDate></item><item><title><![CDATA[9.2 - 0NV]]></title><description><![CDATA[De nulde normaalvorm (0NV) is de eerste stap in het normalisatieproces. Hier inventariseren we alle gegevens en bepalen de primaire sleutel, zonder ze nog op te splitsen in meerdere tabellen.✅ Waarom 0NV gebruiken?
✔ Benoemt alle relevante gegevens → Geeft een duidelijk overzicht van wat er in de database moet worden opgenomen.
✔ Identificeert de primaire sleutel → Bepaalt hoe records uniek worden geïdentificeerd.
✔ Helpt bij het herkennen van herhalende gegevens → Bereidt ons voor op verdere normalisatie.Laten we een voorbeeldfactuur analyseren en omzetten naar 0NV.In deze fase zetten we alle relevante gegevens onder elkaar en identificeren de primaire sleutel. We plaatsen herhalende groepen (repeating groups of RG) tussen haakjes.(bestelnummer, datum, klantnummer, klantnaam, RG (productnummer, omschrijving, prijs, aantal, korting))
✔ Primaire sleutel → bestelnummer (onderstreept).
✔ Herhalende gegevens → productnummer, omschrijving, prijs, aantal, korting (RG).✔ Overtollige gegevens weglaten → Bedrijfsnaam, vaste teksten en berekende waarden zoals totaalbedrag.
✔ Processengegevens niet opslaan → Bijvoorbeeld totaalbedrag = aantal * prijs, want dit kan later worden berekend.
✔ Gegevens duidelijk scheiden → Elke relevante informatie wordt op een aparte regel gezet.
✔ Primaire sleutel onderstrepen → Dit identificeert unieke records in de tabel.
✔ Herhalende groepen (RG) markeren → Dit helpt bij de volgende normalisatiestappen.✅ 0NV is de eerste stap naar een goed gestructureerde database.
✅ Hier benoemen we alle gegevens en identificeren de primaire sleutel.
✅ Herhalende groepen worden gemarkeerd als voorbereiding op verdere normalisatie.
✅ Overtollige of berekenbare waarden worden weggelaten.]]></description><link>9.-normalisatie/9.2-0nv.html</link><guid isPermaLink="false">9. Normalisatie/9.2 - 0NV.md</guid><pubDate>Tue, 24 Jun 2025 07:21:30 GMT</pubDate></item><item><title><![CDATA[9.1 - Inleiding]]></title><description><![CDATA[Normalisatie is een proces in relationele databases waarbij gegevens worden gestructureerd om redundantie te minimaliseren en integriteit te waarborgen. Dit resulteert in een efficiëntere opslag en betere gegevensconsistentie.✅ Waarom normalisatie gebruiken?
✔ Voorkomt dubbele gegevens → Bespaart opslag en voorkomt fouten.
✔ Maakt gegevens flexibeler → Makkelijker aanpassen en opvragen.
✔ Verbetert gegevensintegriteit → Minder kans op inconsistente gegevens.
✔ Organiseert data in logische groepen → Maakt de database eenvoudiger te begrijpen en beheren.Bekijk onderstaand voorbeeld. Wat gaat hier mis?✅ Problemen in de tabel:
Dubbele informatie (Naam en Adres verschijnen meermaals).
Gegevens zijn niet volledig gescheiden (verzekeringen en hypotheken staan door elkaar).
Updates zijn lastig (Verandering in een adres moet op meerdere plekken worden aangepast).
Het normalisatieproces is uitgewerkt door E.F. Codd (1923–2003) en is essentieel voor relationele databases.Normalisatie bestaat uit verschillende normaalvormen, die stap voor stap de structuur verbeteren en redundantie verminderen:✅ 0NV – Inventariseren van attributen
✅ 1NV – Splits repeterende groepen af
✅ 2NV – Splits gedeeltelijk afhankelijke attributen af
✅ 3NV – Splits onafhankelijke attributen afVerder heb je:
✔ BCNV – Boyce-Codd normaalvorm
✔ 4NV – Vierde normaalvorm
✔ 5NV – Vijfde normaalvorm⚠ Voor deze cursus werken we tot en met de derde normaalvorm (3NV), omdat dit in de meeste databases voldoende is.✅ Normalisatie helpt gegevens efficiënter op te slaan en te beheren.
✅ Het voorkomt fouten en inconsistenties door redundantie te minimaliseren.
✅ We werken in deze cursus tot en met de derde normaalvorm (3NV).]]></description><link>9.-normalisatie/9.1-inleiding.html</link><guid isPermaLink="false">9. Normalisatie/9.1 - Inleiding.md</guid><pubDate>Tue, 24 Jun 2025 06:54:11 GMT</pubDate></item><item><title><![CDATA[7.6 - Tabellen combineren met JOIN]]></title><description><![CDATA[Het JOIN-statement wordt gebruikt om gegevens uit meerdere tabellen te combineren op basis van een gemeenschappelijke kolom. Dit is essentieel in relationele databases, waar gegevens vaak verspreid zijn over verschillende tabellen.✅ Waarom JOIN gebruiken?
✔ Combineer gegevens uit meerdere tabellen → Bijvoorbeeld klanten en hun bestellingen.
✔ Vermijd dubbele data → Houd tabellen gestructureerd en efficiënt.
✔ Maak complexe zoekopdrachten mogelijk → Haal relevante informatie uit verschillende bronnen.<img alt="sql-server-join.png" height="468" src="media/sql-server-join.png" target="_self" style="width: 677px; max-width: 100%;">Een JOIN verbindt twee tabellen via een gemeenschappelijke kolom.SELECT klanten.naam, bestellingen.bestel_id
FROM klanten
JOIN bestellingen ON klanten.klant_id = bestellingen.klant_id;
✅ Hier combineren we de klanten- en bestellingen-tabel op basis van klant_id.
Zoek naar relaties in de data Bijvoorbeeld: bestellingen heeft een kolom klant_id, en die verwijst naar klanten.klant_id. → Hier is klant_id dus de gemeenschappelijke kolom. Gebruik je datamodel of ERD als leidraad Een ERD laat relaties tussen tabellen zien. De pijlen (en sleutel-iconen) wijzen je direct naar de juiste kolommen om op te joinen. Check de datatypes en waarden Beide kolommen moeten hetzelfde datatype hebben (bijv. allebei INT). En: de waarden moeten overeenkomen. Geen zinvolle join als je klant_id aan product_id koppelt Let op naamgeving (maar dat is geen vereiste) Soms heten kolommen in beide tabellen exact hetzelfde (film_id in film én film_id in filmacteur). Soms niet: medewerker_id in medewerkers tegenover verantwoordelijke_id in een andere tabel. De primary key uit de hoofdtabel Die overeenkomt met een foreign key in de gekoppelde tabel
<br><img alt="img_inner_join.png" src="media/img_inner_join.png" target="_self">Een INNER JOIN haalt alleen de rijen op die in beide tabellen een overeenkomst hebben. Alleen de rijen waarbij die kolom in beide tabellen exact dezelfde waarde heeft, worden opgenomen in het resultaat. Dat is ook te zien in het Venn-diagram hierbovenDe algemene syntax is als volgt:SELECT kolommen
FROM tabel1
INNER JOIN tabel2 ON tabel1.kolom = tabel2.kolom;
Deze ON-clausule specificeert de join-conditie. Je kunt hier ook meerdere voorwaarden combineren met AND of OR.SELECT klanten.naam, bestellingen.bestel_id
FROM klanten
INNER JOIN bestellingen ON klanten.klant_id = bestellingen.klant_id;
✅ Hier krijgen we alleen klanten die daadwerkelijk een bestelling hebben geplaatst.⚠ Klanten zonder bestellingen worden niet weergegeven!<br><img alt="img_left_join.png" src="media/img_left_join.png" target="_self">Een LEFT JOIN haalt alle rijen uit de linker tabel op, zelfs als er geen overeenkomst is in de rechter tabel.De algemene syntax:SELECT kolommen
FROM linkertabel
LEFT JOIN rechtertabel ON join-conditie;
De linkertabel is dus leidend: je verliest geen rijen van deze kant, ook niet als er geen match is.
Wanneer er geen overeenkomst is in de rechtertabel, vult SQL Server de kolommen van die tabel in met NULL. Zo behoud je de rijen van links, zonder geforceerde waarden.
Klanten zonder bestellingen tonen Gebruikers zonder profiel Artikelen zonder reacties Projecten zonder toegewezen taken Met een LEFT JOIN krijg je dus ook de "lege" gevallen te zien—dat is goed voor rapportages, controles en dashboards.SELECT klanten.naam, bestellingen.bestel_id
FROM klanten
LEFT JOIN bestellingen ON klanten.klant_id = bestellingen.klant_id;
✅ Hier krijgen we alle klanten, inclusief degenen zonder bestellingen.⚠ Klanten zonder bestellingen krijgen NULL bij bestel_id.<br><img alt="img_right_join.png" src="media/img_right_join.png" target="_self">Een RIGHT JOIN haalt alle rijen uit de rechter tabel op, zelfs als er geen overeenkomst is in de linker tabel. Als er geen match is in de linkertabel, dan worden de kolommen van de linkerkant ingevuld met NULL.De algemene syntax:SELECT kolommen
FROM linkertabel
RIGHT JOIN rechtertabel ON join-conditie; Wanneer je zeker wilt zijn dat alle rijen uit de tweede (rechter) tabel getoond worden, ook als er geen match is. Bijvoorbeeld om alle bestellingen te tonen, ook die van klanten die misschien per ongeluk verwijderd zijn uit de klanten-tabel.
SELECT klanten.naam, bestellingen.bestel_id
FROM klanten
RIGHT JOIN bestellingen ON klanten.klant_id = bestellingen.klant_id;
✅ Hier krijgen we alle bestellingen, inclusief die zonder gekoppelde klant.⚠ Bestellingen zonder gekoppelde klant krijgen NULL bij naam.Functioneel doen LEFT JOIN en RIGHT JOIN hetzelfde, zolang je de volgorde van de tabellen aanpast.
Een LEFT JOIN haalt alle rijen uit de linkertabel, ook als er géén match is in de rechtertabel. Een RIGHT JOIN haalt alle rijen uit de rechtertabel, ook als er géén match is in de linkertabel. Het verschil zit dus puur in de positie van je hoofdgegevens in de query.
-- Met LEFT JOIN
SELECT * FROM klanten
LEFT JOIN bestellingen ON klanten.klant_id = bestellingen.klant_id; -- Met RIGHT JOIN (omgedraaide volgorde)
SELECT * FROM bestellingen
RIGHT JOIN klanten ON klanten.klant_id = bestellingen.klant_id;
In beide gevallen krijg je alle klanten, inclusief klanten zonder bestellingen.
Gebruik LEFT JOIN als je logischerwijs je “hoofdtabel” links zet. Bijvoorbeeld: “alle klanten met eventueel hun bestellingen”. Gebruik RIGHT JOIN als je denkt vanuit de rechterkant of werkt met een vaste query-structuur waarin de rechtertabel leidend moet blijven. In de praktijk zie je LEFT JOIN veel vaker dan RIGHT JOIN, vooral omdat mensen van links naar rechts lezen en het logisch voelt om de hoofdgegevens als eerste te schrijven.
<br><img alt="img_full_outer_join.png" src="media/img_full_outer_join.png" target="_self">Een FULL JOIN haalt alle rijen uit beide tabellen op, zelfs als er geen overeenkomst is. In sommige SQL-dialecten wordt FULL OUTER JOIN gebruikt, maar dat is exact hetzelfde! In SQL Server gebruiken we de verkorte versie FULL JOIN.De algemene syntax:SELECT kolommen
FROM tabel1
FULL JOIN tabel2 ON join-conditie;
Bij FULL JOIN maakt het niet uit wie links of rechts staat—beide zijden zijn volledig zichtbaar.
Als er geen overeenkomst is in de rechtertabel, worden die kolommen NULL (zoals bij een LEFT JOIN). Als er geen overeenkomst is in de linkertabel, worden díe kolommen NULL (zoals bij een RIGHT JOIN). Als je een volledige lijst van gegevens uit beide tabellen wilt analyseren. Voor rapportages of controlelijsten waarbij het van belang is om te zien: welke items géén koppeling hebben, én welke wel. Bijvoorbeeld:
Klanten mét en zonder bestellingen Bestellingen mét en zonder klant Artikelen mét en zonder voorraad
SELECT klanten.naam, bestellingen.bestel_id
FROM klanten
FULL JOIN bestellingen ON klanten.klant_id = bestellingen.klant_id;
✅ Hier krijgen we alle klanten en alle bestellingen, zelfs als er geen match is.⚠ Zowel klanten zonder bestellingen als bestellingen zonder klant worden weergegeven.✅ Gebruik INNER JOIN als je alleen overeenkomsten wilt zien.
✅ Gebruik LEFT JOIN als je alle rijen uit de linker tabel wilt behouden.
✅ Gebruik RIGHT JOIN als je alle rijen uit de rechter tabel wilt behouden.
✅ Gebruik FULL JOIN als je alle rijen uit beide tabellen wilt zien.]]></description><link>7.-select/7.6-tabellen-combineren-met-join.html</link><guid isPermaLink="false">7. SELECT/7.6 - Tabellen combineren met JOIN.md</guid><pubDate>Tue, 24 Jun 2025 06:50:29 GMT</pubDate><enclosure url="media/sql-server-join.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/sql-server-join.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[8.3 - ALTER SEQUENCE]]></title><description><![CDATA[Met het ALTER SEQUENCE-statement kun je een bestaande sequence wijzigen zonder een nieuwe te maken. Dit is handig als je bijvoorbeeld de startwaarde wilt aanpassen, de stapgrootte wilt veranderen, of wilt bepalen of de sequence opnieuw moet beginnen bij het maximum.✅ Waarom ALTER SEQUENCE gebruiken?
✔ Pas een sequence aan zonder deze opnieuw te maken → Behoud bestaande records.
✔ Verander de stapgrootte of limieten → Flexibiliteit bij groeiende datasets.
✔ Herstart een sequence indien nodig → Reset waarden zonder de structuur te verliezen.ALTER SEQUENCE sequencenaam
RESTART WITH nieuwe_startwaarde
INCREMENT BY nieuwe_stapgrootte
MINVALUE nieuwe_minwaarde
MAXVALUE nieuwe_maxwaarde
CYCLE | NO CYCLE;
✅ Hier kunnen we een bestaande sequence aanpassen met nieuwe instellingen.Wil je een sequence opnieuw laten beginnen bij een bepaalde waarde?ALTER SEQUENCE klant_seq
RESTART WITH 1;
✅ Hier resetten we klant_seq zodat de volgende waarde weer 1 wordt.Wil je de stapgrootte van een sequence aanpassen?ALTER SEQUENCE bestelnummer_seq
INCREMENT BY 5;
✅ Hier wordt bestelnummer_seq verhoogd met 5 bij elke nieuwe waarde.Wil je een sequence begrenzen binnen nieuwe minimum- en maximumwaarden?ALTER SEQUENCE factuur_seq
MINVALUE 500
MAXVALUE 9999;
✅ Hier kan de sequence niet lager dan 500 of hoger dan 9999 worden.Wil je bepalen of een sequence opnieuw moet beginnen bij het maximum?ALTER SEQUENCE order_seq
NO CYCLE;
✅ Hier stopt de sequence zodra de maximumwaarde is bereikt.✅ Gebruik ALTER SEQUENCE om een sequence aan te passen zonder deze opnieuw te maken.
✅ Gebruik RESTART WITH om een sequence opnieuw te laten beginnen bij een bepaalde waarde.
✅ Pas INCREMENT BY aan om de stapgrootte te veranderen.
✅ Gebruik MINVALUE en MAXVALUE om limieten te stellen.
✅ Gebruik CYCLE om te bepalen of de sequence opnieuw begint bij het maximum.]]></description><link>8.-sequences/8.3-alter-sequence.html</link><guid isPermaLink="false">8. Sequences/8.3 - ALTER SEQUENCE.md</guid><pubDate>Sun, 22 Jun 2025 13:47:25 GMT</pubDate></item><item><title><![CDATA[8.2 - CREATE SEQUENCE]]></title><description><![CDATA[Met het CREATE SEQUENCE-statement kun je een reeks van unieke getallen genereren, die vaak worden gebruikt voor primaire sleutels, factuurnummers, ordernummers of andere automatische nummering.✅ Waarom CREATE SEQUENCE gebruiken?
✔ Biedt controle over nummering → Je kunt starten met een specifieke waarde en de stapgrootte instellen.
✔ Kan gebruikt worden over meerdere tabellen → In tegenstelling tot IDENTITY, dat per tabel werkt.
✔ Voorkomt handmatig invoeren → Nummering gebeurt automatisch zonder dat gebruikers eraan hoeven te denken.CREATE SEQUENCE sequencenaam
START WITH beginwaarde
INCREMENT BY stapgrootte
MINVALUE minwaarde
MAXVALUE maxwaarde
CYCLE | NO CYCLE;
✅ Hier definiëren we een sequence met verschillende parameters.Wil je een sequence beginnen bij 1 en telkens met 1 verhogen?CREATE SEQUENCE klant_seq
START WITH 1
INCREMENT BY 1
NO CYCLE;
✅ Hier begint de sequence bij 1 en wordt telkens met 1 verhoogd zonder opnieuw te starten.Om de volgende waarde uit een sequence te halen, gebruik je NEXT VALUE FOR.INSERT INTO klanten (klant_id, naam)
VALUES (NEXT VALUE FOR klant_seq, 'Janssen');
✅ Hier krijgt klant Janssen een automatisch gegenereerde klant_id.Wil je een sequence tussen een minimale en maximale waarde instellen?CREATE SEQUENCE factuur_seq
START WITH 1000
INCREMENT BY 10
MINVALUE 1000
MAXVALUE 9999
NO CYCLE;
✅ Hier begint de sequence bij 1000 en loopt tot 9999, waarbij elke stap 10 is.Wil je dat een sequence opnieuw begint bij de startwaarde zodra de maximumwaarde is bereikt? Gebruik CYCLE.CREATE SEQUENCE bestelnummer_seq
START WITH 1
INCREMENT BY 1
MAXVALUE 100
CYCLE;
✅ Hier begint de sequence opnieuw bij 1 nadat 100 is bereikt.✅ Gebruik CREATE SEQUENCE om automatische nummering te genereren.
✅ Gebruik NEXT VALUE FOR om een nieuwe waarde uit de sequence te halen.
✅ Gebruik MINVALUE en MAXVALUE om limieten in te stellen.
✅ Gebruik CYCLE als de sequence opnieuw moet starten na het maximum.]]></description><link>8.-sequences/8.2-create-sequence.html</link><guid isPermaLink="false">8. Sequences/8.2 - CREATE SEQUENCE.md</guid><pubDate>Sun, 22 Jun 2025 13:46:50 GMT</pubDate></item><item><title><![CDATA[7.8 - Unieke waarden met DISTINCT]]></title><description><![CDATA[Het DISTINCT-statement wordt gebruikt om duplicaten te verwijderen uit een dataset, zodat alleen unieke waarden worden weergegeven. Dit is handig wanneer je bijvoorbeeld een lijst wilt krijgen van unieke klanten, productcategorieën of locaties.✅ Waarom DISTINCT gebruiken?
✔ Voorkomt dubbele gegevens → Bijvoorbeeld een lijst met unieke steden uit een klantentabel.
✔ Maakt zoekopdrachten efficiënter → Bespaart geheugen en maakt resultaten overzichtelijker.
✔ Werkt in combinatie met andere SQL-functies → Zoals ORDER BY, JOIN en GROUP BY.Wil je alleen unieke waarden ophalen uit een kolom? Gebruik DISTINCT.SELECT DISTINCT stad
FROM klanten;
✅ Hier krijgen we een lijst van steden, zonder duplicaten.✅ Zonder DISTINCT: Antwerpen komt twee keer voor. ✅ Met DISTINCT: We krijgen alleen Antwerpen en Brussel.Wil je unieke combinaties van twee of meer kolommen?SELECT DISTINCT stad, land
FROM klanten;
✅ Hier krijgen we unieke combinaties van stad en land.✅ Hier zien we dat Antwerpen, België en Antwerpen, Nederland afzonderlijke records zijn.Wil je een lijst van unieke waarden, gesorteerd?SELECT DISTINCT stad
FROM klanten
ORDER BY stad ASC;
✅ Hier krijgen we een lijst van unieke steden, alfabetisch gesorteerd.Wil je tellen hoeveel unieke waarden er zijn? Gebruik COUNT(DISTINCT kolomnaam).SELECT COUNT(DISTINCT stad) AS aantal_unieke_steden
FROM klanten;
✅ Hier tellen we hoeveel verschillende steden er in de dataset voorkomen.✅ Gebruik DISTINCT om dubbele waarden te verwijderen uit query-resultaten.
✅ Je kunt DISTINCT toepassen op één of meerdere kolommen.
✅ Combineer DISTINCT met ORDER BY om unieke waarden gesorteerd weer te geven.
✅ Gebruik COUNT(DISTINCT) om unieke records te tellen.]]></description><link>7.-select/7.8-unieke-waarden-met-distinct.html</link><guid isPermaLink="false">7. SELECT/7.8 - Unieke waarden met DISTINCT.md</guid><pubDate>Sun, 22 Jun 2025 13:43:40 GMT</pubDate></item><item><title><![CDATA[7.7 - Subquery’s en SELECT binnen SELECT]]></title><description><![CDATA[Een subquery is een query binnen een andere query, oftewel een geneste SQL-opdracht. Dit wordt vaak gebruikt om complexe gegevensopdrachten op een efficiënte manier uit te voeren.✅ Waarom subquery’s gebruiken?
✔ Maakt complexere zoekopdrachten mogelijk → Bijvoorbeeld de hoogste verkoop per regio.
✔ Voorkomt dubbele queries → Alles wordt in één SELECT uitgevoerd.
✔ Kan gebruikt worden in WHERE, FROM en HAVING → Flexibiliteit bij data-analyse.Een subquery wordt vaak gebruikt om een waarde op te halen die wordt gebruikt als filter in een WHERE-clausule.SELECT naam, salaris
FROM medewerkers
WHERE salaris &gt; (SELECT AVG(salaris) FROM medewerkers);
✅ Hier halen we alle medewerkers op die meer verdienen dan het gemiddelde salaris van alle medewerkers.Wil je een tussenresultaat als een tijdelijke tabel gebruiken? Plaats een SELECT binnen FROM.SELECT afdeling, gemiddeld_salaris
FROM ( SELECT afdeling, AVG(salaris) AS gemiddeld_salaris FROM medewerkers GROUP BY afdeling
) AS afdeling_salarissen;
✅ Hier maken we een tijdelijke tabel (afdeling_salarissen) die gemiddeld salaris per afdeling bevat.Wil je een groep filteren op basis van een subquery? Gebruik HAVING.SELECT afdeling, AVG(salaris) AS gemiddeld_salaris
FROM medewerkers
GROUP BY afdeling
HAVING AVG(salaris) &gt; (SELECT AVG(salaris) FROM medewerkers);
✅ Hier tonen we alleen afdelingen waar het gemiddelde salaris hoger is dan het algemene bedrijfsgemiddelde.Een gekoppelde subquery gebruikt gegevens uit de buitenste query.SELECT naam, afdeling, salaris
FROM medewerkers m1
WHERE salaris = ( SELECT MAX(salaris) FROM medewerkers m2 WHERE m1.afdeling = m2.afdeling
);
✅ Hier halen we de medewerkers op die het hoogste salaris in hun afdeling hebben.✅ Gebruik subquery’s om complexe zoekopdrachten binnen één statement uit te voeren.
✅ Subquery’s kunnen gebruikt worden binnen WHERE, FROM en HAVING.
✅ Gekoppelde subquery’s gebruiken gegevens uit de buitenste query voor dynamische filtering.]]></description><link>7.-select/7.7-subquery’s-en-select-binnen-select.html</link><guid isPermaLink="false">7. SELECT/7.7 - Subquery’s en SELECT binnen SELECT.md</guid><pubDate>Sun, 22 Jun 2025 13:42:54 GMT</pubDate></item><item><title><![CDATA[img_full_outer_join]]></title><description><![CDATA[<img src="media/img_full_outer_join.png" target="_self">]]></description><link>media/img_full_outer_join.html</link><guid isPermaLink="false">media/img_full_outer_join.png</guid><pubDate>Sun, 22 Jun 2025 13:02:56 GMT</pubDate><enclosure url="media/img_full_outer_join.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/img_full_outer_join.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[img_right_join]]></title><description><![CDATA[<img src="media/img_right_join.png" target="_self">]]></description><link>media/img_right_join.html</link><guid isPermaLink="false">media/img_right_join.png</guid><pubDate>Sun, 22 Jun 2025 13:01:56 GMT</pubDate><enclosure url="media/img_right_join.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/img_right_join.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[img_left_join]]></title><description><![CDATA[<img src="media/img_left_join.png" target="_self">]]></description><link>media/img_left_join.html</link><guid isPermaLink="false">media/img_left_join.png</guid><pubDate>Sun, 22 Jun 2025 13:01:24 GMT</pubDate><enclosure url="media/img_left_join.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/img_left_join.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[img_inner_join]]></title><description><![CDATA[<img src="media/img_inner_join.png" target="_self">]]></description><link>media/img_inner_join.html</link><guid isPermaLink="false">media/img_inner_join.png</guid><pubDate>Sun, 22 Jun 2025 13:01:04 GMT</pubDate><enclosure url="media/img_inner_join.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/img_inner_join.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[sql-server-join]]></title><description><![CDATA[<img src="media/sql-server-join.png" target="_self">]]></description><link>media/sql-server-join.html</link><guid isPermaLink="false">media/sql-server-join.png</guid><pubDate>Sun, 22 Jun 2025 13:00:12 GMT</pubDate><enclosure url="media/sql-server-join.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/sql-server-join.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[7.5 - Groeperen met GROUP BY]]></title><description><![CDATA[Het GROUP BY-statement wordt gebruikt om gegevens per categorie te groeperen en aggregaties uit te voeren, zoals het tellen van records, het berekenen van totalen, gemiddelden en minimum- of maximumwaarden.✅ Waarom GROUP BY gebruiken?
✔ Analyseer data per groep → Bijvoorbeeld het totale aantal bestellingen per klant.
✔ Combineer met aggregatiefuncties → Gebruik COUNT, SUM, AVG, MIN, MAX.
✔ Maak overzichtelijke rapporten → Bijvoorbeeld omzet per regio of gemiddelde salarissen per functie.Als je de aantallen per groep wilt berekenen, gebruik je COUNT(*):SELECT klant_id, COUNT(*) AS aantal_bestellingen
FROM bestellingen
GROUP BY klant_id;
✅ Hier tellen we hoeveel bestellingen elke klant heeft geplaatst.Wil je weten hoeveel records er in een groep zitten? Gebruik COUNT(*).SELECT afdeling, COUNT(*) AS aantal_medewerkers
FROM medewerkers
GROUP BY afdeling;
✅ Hier tellen we hoeveel medewerkers er per afdeling zijn.Wil je het totaal van een kolom berekenen? Gebruik SUM().SELECT productcategorie, SUM(omzet) AS totale_omzet
FROM verkoop
GROUP BY productcategorie;
✅ Hier berekenen we de totale omzet per productcategorie.Wil je het gemiddelde van een kolom berekenen? Gebruik AVG().SELECT functie, AVG(salaris) AS gemiddeld_salaris
FROM medewerkers
GROUP BY functie;
✅ Hier berekenen we het gemiddelde salaris per functie.Wil je de laagste en hoogste waarde in een groep vinden? Gebruik MIN() en MAX().SELECT afdeling, MIN(salaris) AS laagste_salaris, MAX(salaris) AS hoogste_salaris
FROM medewerkers
GROUP BY afdeling;
✅ Hier berekenen we het laagste en hoogste salaris per afdeling.Wil je op meerdere niveaus groeperen? Voeg extra kolommen toe aan GROUP BY.SELECT jaar, regio, SUM(omzet) AS totaal_omzet
FROM verkoop
GROUP BY jaar, regio;
✅ Hier berekenen we de totale omzet per regio, gegroepeerd per jaar.Wil je alleen groepen tonen die aan een bepaalde voorwaarde voldoen? Gebruik HAVING.SELECT categorie, AVG(prijs) AS gemiddelde_prijs
FROM producten
GROUP BY categorie
HAVING AVG(prijs) &gt; 100;
✅ Hier filteren we de gegroepeerde resultaten en tonen alleen categorieën met een hoge gemiddelde prijs.✅ Gebruik GROUP BY om gegevens per categorie te groeperen.
✅ Gebruik COUNT om rijen te tellen, SUM om totalen te berekenen, AVG voor gemiddelden, en MIN/MAX voor minimum- en maximumwaarden.
✅ Groeperen kan op één of meerdere kolommen tegelijk.
✅ Gebruik HAVING om alleen relevante groepen te tonen.]]></description><link>7.-select/7.5-groeperen-met-group-by.html</link><guid isPermaLink="false">7. SELECT/7.5 - Groeperen met GROUP BY.md</guid><pubDate>Sun, 22 Jun 2025 12:54:42 GMT</pubDate></item><item><title><![CDATA[7.4 - Sorteren met ORDER BY]]></title><description><![CDATA[Het ORDER BY-statement wordt gebruikt om de resultaten van een SELECT-query te sorteren op een logische en overzichtelijke manier.✅ Waarom ORDER BY gebruiken?
✔ Maakt zoekresultaten overzichtelijk → Sorteer gegevens op naam, datum of prijs.
✔ Zorgt voor logische volgorde → Bijvoorbeeld oplopend of aflopend.
✔ Combineer met andere SQL-functies → Werkt goed samen met WHERE, GROUP BY en LIMIT.SELECT * FROM klanten
ORDER BY naam;
✅ Hier sorteren we alle klanten alfabetisch op naam.
✅ De standaard sorteervolgorde is oplopend (ASC).Wil je specifiek oplopend of aflopend sorteren? Gebruik ASC of DESC.SELECT * FROM producten
ORDER BY prijs ASC;
✅ Hier sorteren we de producten van goedkoopste naar duurste.SELECT * FROM producten
ORDER BY prijs DESC;
✅ Hier sorteren we de producten van duurste naar goedkoopste.Wil je eerst sorteren op één kolom en daarna op een andere?SELECT * FROM klanten
ORDER BY land ASC, naam ASC;
✅ Hier sorteren we eerst op land (België, Nederland, enz.) en daarna op naam binnen elk land.Wil je gegevens sorteren op basis van een berekening?SELECT naam, salaris, salaris * 1.1 AS NieuwSalaris
FROM medewerkers
ORDER BY NieuwSalaris DESC;
✅ Hier tonen we de medewerkers gesorteerd op hun nieuwe (berekende) salaris.✅ Gebruik ORDER BY om zoekresultaten logisch te sorteren.
✅ Gebruik ASC voor oplopende volgorde en DESC voor aflopende volgorde.
✅ Je kunt sorteren op meerdere kolommen tegelijk.
✅ Sorteren kan ook op berekende waarden binnen een SELECT-query.]]></description><link>7.-select/7.4-sorteren-met-order-by.html</link><guid isPermaLink="false">7. SELECT/7.4 - Sorteren met ORDER BY.md</guid><pubDate>Sun, 22 Jun 2025 12:52:47 GMT</pubDate></item><item><title><![CDATA[7.3 - Filters met WHERE]]></title><description><![CDATA[Het WHERE-statement wordt gebruikt om specifieke gegevens op te vragen uit een tabel. Hiermee kunnen we filteren op bepaalde voorwaarden, zoals een specifieke naam, datum, of een reeks waarden.✅ Waarom WHERE gebruiken?
✔ Haal alleen de relevante gegevens op → Vermijd onnodige data en verbeter prestaties.
✔ Maak zoekopdrachten dynamischer → Filter resultaten op basis van een conditie.
✔ Combineer met andere SQL-commando’s → Gebruik WHERE samen met ORDER BY, GROUP BY en JOIN.SELECT * FROM klanten
WHERE land = 'België';
✅ Hier halen we alleen klanten op die zich in België bevinden.Je kunt verschillende operatoren gebruiken om gegevens te filteren:Met LIKE kun je zoekpatronen gebruiken:SELECT * FROM klanten
WHERE naam LIKE 'J%';
✅ Hier halen we alle klanten op waarvan de naam begint met J.Wil je meerdere filters toepassen? Gebruik AND of OR.SELECT * FROM klanten
WHERE land = 'België' AND leeftijd &gt; 30;
✅ Hier halen we alleen klanten op die uit België komen én ouder zijn dan 30.SELECT * FROM klanten
WHERE land = 'België' OR land = 'Nederland';
✅ Hier halen we klanten op die uit België óf Nederland komen.Wil je zoeken binnen een bepaald bereik? Gebruik BETWEEN of IN.SELECT * FROM medewerkers
WHERE salaris BETWEEN 2000 AND 5000;
✅ Hier halen we alle medewerkers op met een salaris tussen 2000 en 5000.SELECT * FROM klanten
WHERE stad IN ('Brussel', 'Antwerpen', 'Gent');
✅ Hier halen we alleen klanten op die uit deze drie steden komen.✅ Gebruik WHERE om gegevens efficiënt te filteren.
✅ Vergelijkingsoperatoren zoals =, &gt;, &lt;, LIKE, en BETWEEN helpen bij specifieke zoekopdrachten.
✅ Meerdere filters combineren met AND en OR.
✅ Gebruik IN en BETWEEN om reeksen van waarden op te halen.]]></description><link>7.-select/7.3-filters-met-where.html</link><guid isPermaLink="false">7. SELECT/7.3 - Filters met WHERE.md</guid><pubDate>Sun, 22 Jun 2025 12:49:42 GMT</pubDate></item><item><title><![CDATA[7.2 - Basisgebruik van SELECT]]></title><description><![CDATA[Het SELECT-statement is de kern van SQL en wordt gebruikt om gegevens op te halen uit tabellen. Het stelt ons in staat om specifieke informatie te bekijken zonder de onderliggende data te veranderen.✅ Waarom SELECT gebruiken?
✔ Vraag gegevens op uit een tabel → Haal specifieke kolommen of volledige rijen op.
✔ Werk alleen met de benodigde data → Vermijd het opvragen van onnodige gegevens.
✔ Combineer en presenteer data → Voer berekeningen uit en formatteer resultaten.Met SELECT * kun je alle kolommen uit een tabel opvragen:SELECT * FROM klanten;
✅ Hier worden alle klanten en hun volledige gegevens opgehaald uit de tabel klanten.
⚠ Gebruik SELECT * alleen als je écht alle kolommen nodig hebt, anders kan het de prestaties negatief beïnvloeden!Wil je alleen bepaalde kolommen ophalen? Noem ze dan expliciet:SELECT naam, email FROM klanten;
✅ Hier halen we alleen de naam en email op, en laten we andere kolommen achterwege.Aliasen helpen om kolomnamen duidelijker te maken in de output.SELECT naam AS KlantNaam, email AS ContactEmail FROM klanten;
✅ Hier tonen we de kolom naam als KlantNaam en email als ContactEmail.Je kunt berekeningen uitvoeren tijdens het ophalen van gegevens.SELECT productnaam, prijs, prijs * 1.21 AS PrijsMetBTW FROM producten;
✅ Hier berekenen we de prijs inclusief BTW in de query.✅ Gebruik SELECT om gegevens op te vragen zonder ze te wijzigen.
✅ Vraag alleen de kolommen op die je nodig hebt voor betere prestaties.
✅ Gebruik aliasen (AS) voor duidelijkere kolomnamen in de output.
✅ Voer berekeningen uit in een query om data direct te verwerken.]]></description><link>7.-select/7.2-basisgebruik-van-select.html</link><guid isPermaLink="false">7. SELECT/7.2 - Basisgebruik van SELECT.md</guid><pubDate>Sun, 22 Jun 2025 12:42:16 GMT</pubDate></item><item><title><![CDATA[6.5 - COMMIT, ROLLBACK en TRUNCATE]]></title><description><![CDATA[SQL Server biedt verschillende manieren om wijzigingen in een database te beheren. Met COMMIT, ROLLBACK en TRUNCATE kunnen we wijzigingen bevestigen, terugdraaien of tabellen leegmaken.✅ Waarom zijn deze statements belangrijk?
✔ Zorgen voor controle en veiligheid over databasewijzigingen.
✔ Voorkomen dat foute of ongewenste wijzigingen permanent worden opgeslagen.
✔ Helpen bij het beheren van grote datasets en efficiëntie.Wat belangrijk is om te weten: je hoeft in SQL Server niet altijd expliciet een COMMIT te doen zoals in bijvoorbeeld Oracle SQL—maar het hangt af van hoe je transacties schrijft. In 5.5.1 gaan we hier dieper op in.Met COMMIT worden alle wijzigingen definitief opgeslagen in de database. Zie het als een "opslaan" of "save"-functie binnen SQL.COMMIT;
✅ Na een COMMIT worden alle wijzigingen definitief en kunnen ze niet meer teruggedraaid worden.
✅ Gebruik COMMIT voorzichtig, vooral bij grote wijzigingen.MAAR!! In SQL Server is het in de meeste gevallen, zeker voor onze lessen, niet nodig om nog expliciet een COMMIT te schrijven! Dat heeft namelijk te maken met het feit dat SQL Server voor de meeste bewerkingen een autocommit uitvoert, in tegenstelling tot bijvoorbeeld Oracle SQL. Hieronder geven drie soorten bewerkingen wanneer je wel of geen COMMIT moet schrijven:
1. Impliciete transacties (standaardgedrag): In SQL Server worden standaard veel bewerkingen direct doorgevoerd (autocommit). Elke INSERT, UPDATE, DELETE, enz. is dus een zelfstandige transactie die automatisch wordt gecommit zodra de query succesvol is uitgevoerd. Je hoeft dus geen expliciete COMMIT te schrijven! Voor vrijwel elke opdracht en oefening die wij gaan doen, hoef je dus geen expliciete COMMIT te schrijven. Het enige nadeel is dat je geen ROLLBACK kunt gebruiken.
Bijvoorbeeld:UPDATE Rekening SET Saldo = Saldo - 100 WHERE KlantID = 1; -- direct committed! 2. Expliciete transacties (jij beheert de controle): Als je BEGIN TRANSACTION gebruikt, dan start je een expliciete transactie. Vanaf dat moment moet je die zelf afsluiten met een COMMIT of een ROLLBACK, net als in bijvoorbeeld Oracle. Je gebruikt BEGIN TRANSACTION als je wil aangeven: vanaf dit punt wil ik een grote groep bewerking bij elkaar houden. Wanner het COMMIT statement wordt uitgevoerd, worden de wijzigingen definitief. In dit geval kun je wel een ROLLBACK doen als er iets fout is gegaan.
Bijvoorbeeld:BEGIN TRANSACTION;
UPDATE Bestelling SET Totaal = 0 WHERE BestelID = 10;
COMMIT; 3. Instelling IMPLICIT_TRANSACTIONS: Als je dit aanzet, dan start SQL Server automatisch een transactie bij bepaalde statements (zoals SELECT, INSERT, DELETE, enz.). In dat geval moet je alsnog zelf een COMMIT doen om de wijziging door te voeren, zelfs zonder expliciete BEGIN TRANSACTION.
Je activeert het zo:SET IMPLICIT_TRANSACTIONS ON;
Oracle heeft altijd een transactie aanstaan. Je moet daar altijd expliciet COMMIT of ROLLBACK doen, anders blijven wijzigingen hangen in je sessie. SQL Server is dus iets vergevingsgezinder als je het simpel houdt en geen transactions start.BEGIN TRANSACTION;
UPDATE medewerkers SET salaris = salaris * 1.1 WHERE afdeling = 'Verkoop';
COMMIT;
✅ Hier wordt de loonsverhoging toegepast en met COMMIT definitief opgeslagen.Met ROLLBACK kunnen alle wijzigingen sinds de laatste COMMIT ongedaan worden gemaakt. Dit is handig als er een fout is gemaakt in een transactie.ROLLBACK;
✅ Hiermee worden alle wijzigingen teruggedraaid tot de laatste COMMIT.
✅ Alleen mogelijk als de transactie nog niet is bevestigd met COMMIT.BEGIN TRANSACTION;
UPDATE medewerkers SET salaris = salaris * 2 WHERE functie = 'Junior';
ROLLBACK;
✅ Hier wordt de transactie teruggedraaid omdat het salaris verkeerd is berekend.Met TRUNCATE kunnen alle rijen uit een tabel in één keer worden verwijderd. Dit is veel sneller dan DELETE en kan niet ongedaan worden gemaakt met ROLLBACK.TRUNCATE TABLE tabelnaam;
✅ Hier worden alle gegevens uit tabelnaam definitief verwijderd.
⚠ Dit is onherroepelijk, dus gebruik dit statement voorzichtig!TRUNCATE TABLE logboek;
✅ Alle gegevens worden in één keer verwijderd zonder dat de tabel zelf verdwijnt.✅ Gebruik DELETE als je slechts enkele rijen wilt verwijderen.
✅ Gebruik TRUNCATE als je een tabel volledig wilt legen voor een nieuwe dataset.✅ Gebruik COMMIT om wijzigingen definitief op te slaan.
✅ Gebruik ROLLBACK om wijzigingen terug te draaien als er een fout is gemaakt.
✅ Gebruik TRUNCATE om alle rijen uit een tabel te verwijderen (onherroepelijk!).
✅ Kies zorgvuldig tussen DELETE (specifieke rijen) en TRUNCATE (alles verwijderen).]]></description><link>6.-dml/6.5-commit,-rollback-en-truncate.html</link><guid isPermaLink="false">6. DML/6.5 - COMMIT, ROLLBACK en TRUNCATE.md</guid><pubDate>Sun, 22 Jun 2025 12:38:04 GMT</pubDate></item><item><title><![CDATA[6.4 - DELETE]]></title><description><![CDATA[Met het DELETE statement verwijder je specifieke rijen uit een tabel. Dit kan handig zijn bij het opschonen van gegevens, het verwijderen van een afgesloten account of het verwijderen van een afdeling die niet meer bestaat.✅ Waarom DELETE gebruiken?
✔ Verwijdert specifieke records zonder de tabelstructuur te wijzigen.
✔ Maakt ruimte vrij in de database en verbetert efficiëntie.DELETE FROM tabelnaam
WHERE conditie;
✅ Hiermee wordt een rij verwijderd uit tabelnaam, mits deze voldoet aan de WHERE-conditie.
⚠ LET OP: Als je WHERE weglaat, worden ALLE rijen in de tabel verwijderd!DELETE FROM afdelingen
WHERE afd_nr = 3;
✅ Hier verwijderen we de afdeling met afd_nr = 3 zonder de hele tabel te wissen.Wil je meerdere rijen verwijderen die aan een bepaalde voorwaarde voldoen?DELETE FROM medewerkers
WHERE functie = 'Tijdelijk';
✅ Hier worden alle medewerkers met een tijdelijke functie verwijderd.Als een tabel verwijzingen heeft naar andere tabellen via FOREIGN KEY, dan kan het zijn dat een rij niet direct verwijderd kan worden.DELETE FROM projecten
WHERE afd_nr = 3;
✅ Hier verwijderen we eerst alle projecten die aan afdeling 3 gekoppeld zijn.DELETE FROM afdelingen
WHERE afd_nr = 3;
✅ Nu is het veilig om de afdeling te verwijderen zonder de database te breken.Wil je dat alle gerelateerde rijen automatisch worden verwijderd als je een rij in een parent-tabel verwijdert? Gebruik DELETE CASCADE.ALTER TABLE projecten
ADD CONSTRAINT FK_Afdeling FOREIGN KEY (afd_nr) REFERENCES afdelingen(afd_nr) ON DELETE CASCADE;
✅ Hier worden automatisch alle projecten verwijderd als een afdeling wordt verwijderd.✅ Gebruik DELETE om specifieke rijen te verwijderen.
✅ Altijd een WHERE-conditie toevoegen om te voorkomen dat alle rijen verdwijnen!
✅ Relaties tussen tabellen kunnen het verwijderen blokkeren → verwijder eerst gerelateerde gegevens.
✅ Gebruik DELETE CASCADE om gekoppelde gegevens automatisch te verwijderen.]]></description><link>6.-dml/6.4-delete.html</link><guid isPermaLink="false">6. DML/6.4 - DELETE.md</guid><pubDate>Sun, 22 Jun 2025 12:24:44 GMT</pubDate></item><item><title><![CDATA[6.3 - UPDATE]]></title><description><![CDATA[Met het UPDATE statement kun je gegevens in een bestaande rij wijzigen in een SQL-tabel. Dit is handig wanneer je bijvoorbeeld een naam wilt aanpassen, een adres wilt bijwerken of een salarisverhoging wilt doorvoeren.✅ Waarom UPDATE gebruiken?
✔ Corrigeer fouten → Werk een verkeerde invoer bij zonder een nieuwe rij toe te voegen.
✔ Houd gegevens actueel → Bijvoorbeeld na een adreswijziging of na een loonsverhoging.UPDATE tabelnaam
SET kolomnaam = nieuweWaarde
WHERE conditie;
✅ Met UPDATE geef je de tabelnaam op en wijzig je de waarde van een kolom.
✅ Met WHERE geef je een conditie aan, zodat alleen specifieke rijen worden gewijzigd.UPDATE medewerkers
SET achternaam = 'Targaryen'
WHERE rr_nr = 123456789;
✅ Hier krijgt de medewerker met rijksregisternummer 123456789 een nieuwe achternaam.
✅ Het WHERE-statement voorkomt dat alle rijen per ongeluk gewijzigd worden.Je kunt meerdere kolommen tegelijk updaten door ze te scheiden met een komma:UPDATE medewerkers
SET achternaam = 'Targaryen', salaris = salaris * 1.1
WHERE rr_nr = 123456789;
✅ Hier wijzigen we de achternaam en geven we de medewerker een loonsverhoging van 10%.Wil je berekeningen uitvoeren binnen een UPDATE-statement? Dat kan!UPDATE medewerkers
SET salaris = salaris * 1.1
WHERE rr_nr = 234765890;
✅ Hier verhogen we het salaris van de medewerker met 10% door salaris * 1.1 te berekenen.Als je geen WHERE-conditie gebruikt, worden alle rijen in de tabel gewijzigd!UPDATE medewerkers
SET salaris = salaris * 1.1;
⚠ Dit zou alle medewerkers in de database een loonsverhoging van 10% geven!
✅ Gebruik altijd WHERE tenzij je zeker weet dat de wijziging voor alle rijen moet gelden.✅ Gebruik UPDATE om gegevens te wijzigen zonder nieuwe rijen toe te voegen.
✅ Altijd een WHERE-statement gebruiken om gerichte aanpassingen te doen.
✅ Meerdere kolommen tegelijk wijzigen met een komma (SET kolom1 = waarde1, kolom2 = waarde2).
✅ Je kunt berekeningen toepassen in een UPDATE, zoals een loonsverhoging (SET salaris = salaris * 1.1).]]></description><link>6.-dml/6.3-update.html</link><guid isPermaLink="false">6. DML/6.3 - UPDATE.md</guid><pubDate>Sun, 22 Jun 2025 12:23:47 GMT</pubDate></item><item><title><![CDATA[6.2 - INSERT INTO]]></title><description><![CDATA[Met het INSERT INTO statement voegen we nieuwe rijen toe aan een tabel. Dit statement wordt gebruikt om gegevens op te slaan en is één van de meest gebruikte DML-commando’s in SQL.✅ Waarom INSERT INTO en niet gewoon INSERT?
✔ Er zijn verschillende SQL-dialecten, sommige verplichten INSERT INTO.
✔ INSERT INTO maakt de intentie duidelijker en zorgt voor consistente syntax.INSERT INTO tabelnaam
VALUES (waarde1, waarde2, waarde3);
✅ Hier voegen we een nieuwe rij toe aan tabelnaam, waarbij alle kolommen worden ingevuld.INSERT INTO tabelnaam (kolom1, kolom2)
VALUES (waarde1, waarde2);
✅ Hier geven we alleen waarden op voor kolom1 en kolom2, andere kolommen blijven leeg of krijgen een defaultwaarde.✔ Numerieke waarden (INT, DECIMAL) zonder aanhalingstekens
✔ Tekst- en datumwaarden (NVARCHAR, DATE) tussen enkele aanhalingstekens
✔ De volgorde van waarden moet exact overeenkomen met de kolommen
✔ Kolommen met NOT NULL moeten altijd een waarde krijgen
✔ Kolommen met UNIQUE moeten altijd unieke waarden hebbenINSERT INTO klanten (KlantID, Naam, Geboortedatum, Land)
VALUES (1, 'Janssen', '1989-09-06', 'Nederland');
✅ Hier voegen we een klant toe met een unieke KlantID en correcte datatypes.Dit komt er dan zo uit te zien in de tabel:SQL Server ondersteunt het invoegen van meerdere rijen in één statement:INSERT INTO klanten (KlantID, Naam, Land)
VALUES (1, 'Janssen', 'Nederland'), (2, 'Peeters', 'België'), (3, 'De Vries', 'Nederland');
✅ Dit is efficiënter dan drie aparte INSERT INTO statements.
⚠ SQL Server ondersteunt geen directe invoer in meerdere tabellen tegelijk.Stel we maken een tabel Student aangemaakt met volgende SQL-code:CREATE TABLE Student ( studentnummer INT PRIMARY KEY, naam NVARCHAR(50), adres NVARCHAR(100), telefoon NVARCHAR(15), leeftijd INT );
Dan kunnen we met het volgende statement ineens meerdere studenten invoeren:INSERT INTO Student (studentnummer, naam, adres, telefoon, leeftijd) VALUES (1, 'John Cena', 'Smackdownlaan 3', 'XXXXXXXXXX', 18), (2, 'Hulk Hogan', 'Rawstraat 6', 'XXXXXXXXXX', 18), (3, 'Kane', 'Wrestlemaniastraat 8', 'XXXXXXXXXX', 20), (4, 'The Rock', 'Rock Bottom 1', 'XXXXXXXXXX', 18);
Dit zal vervolgens deze tabel opleveren:Wil je gegevens van een bestaande tabel kopiëren naar een nieuwe tabel? Gebruik INSERT INTO ... SELECT.INSERT INTO klanten_backup
SELECT * FROM klanten;
✅ Hier wordt de volledige klanten-tabel gekopieerd naar klanten_backup.INSERT INTO klanten_backup (KlantID, Naam)
SELECT KlantID, Naam FROM klanten;
✅ Hier worden alleen de KlantID en Naam overgenomen.✅ INSERT INTO voegt nieuwe rijen toe aan een tabel.
✅ Gebruik VALUES om gegevens in te voegen, met correcte datatypes.
✅ Batch-invoer met meerdere rijen in één statement is mogelijk.
✅ Je kunt gegevens kopiëren uit een andere tabel met INSERT INTO ... SELECT.]]></description><link>6.-dml/6.2-insert-into.html</link><guid isPermaLink="false">6. DML/6.2 - INSERT INTO.md</guid><pubDate>Sun, 22 Jun 2025 12:22:34 GMT</pubDate></item><item><title><![CDATA[6.1 - Inleiding]]></title><description><![CDATA[In dit hoofdstuk gaan we werken met DML (Data Manipulation Language), een onderdeel van SQL dat gebruikt wordt om gegevens in een database te beheren.✅ Wat kun je doen met DML?
✔ Rijen toevoegen (INSERT INTO) → Nieuwe records aanmaken.
✔ Rijen aanpassen (UPDATE) → Gegevens in bestaande records wijzigen.
✔ Rijen verwijderen (DELETE) → Records uit een tabel verwijderen.Aangezien we werken met relationele databases, spelen parent- en child-tabellen een belangrijke rol:
✅ Parent-tabel → Bevat een primaire sleutel (PRIMARY KEY).
✅ Child-tabel → Bevat een vreemde sleutel (FOREIGN KEY) die verwijst naar de parent-tabel.Hieronder een beknopt overzicht van hoe DML werkt met deze sleutelrelaties:✔ INSERT INTO → Hoe voegen we een nieuwe rij toe?
✔ UPDATE → Hoe wijzigen we gegevens in een bestaande rij?
✔ DELETE → Hoe verwijderen we gegevens en hoe werkt dit met relaties?✅ DML wordt gebruikt om gegevens in tabellen te beheren.
✅ INSERT, UPDATE en DELETE zijn de drie kernstatements.
✅ Relationele databases hebben parent- en child-tabellen, dus verwijzingen moeten correct worden beheerd.]]></description><link>6.-dml/6.1-inleiding.html</link><guid isPermaLink="false">6. DML/6.1 - Inleiding.md</guid><pubDate>Sun, 22 Jun 2025 12:11:42 GMT</pubDate></item><item><title><![CDATA[5.6 - Index]]></title><description><![CDATA[Een index in een database werkt als een inhoudsopgave in een boek: het helpt om snel de juiste gegevens te vinden, zonder dat de hele tabel moet worden doorzocht.✅ Waarom gebruiken we indexen?
✔ Sneller zoeken → SQL Server kan gericht zoeken in plaats van een volledige tabel te scannen.
✔ Efficiëntie → Maakt werken met grote datasets sneller.SQL Server heeft verschillende soorten indexen, afhankelijk van hoe gegevens worden opgeslagen en opgezocht.✅ Clustered vs. Nonclustered
✔ Clustered: De tabel zelf is gesorteerd → Maximaal één per tabel.
✔ Nonclustered: De tabel blijft hetzelfde, maar er wordt een aparte index gemaakt → Meerdere mogelijk per tabel.Je kunt een index aanmaken met CREATE INDEX:CREATE INDEX idx_achternaam
ON medewerkers (achternaam);
✅ Hier maken we een index op de kolom achternaam, zodat SQL Server sneller medewerkers kan vinden op achternaam.Wil je een UNIQUE index zodat geen dubbele waarden mogelijk zijn?CREATE UNIQUE INDEX idx_email
ON klanten (email);
✅ Hier garanderen we dat e-mailadressen uniek zijn binnen de klanten-tabel.Hoewel indexen het zoeken sneller maken, kunnen ze ook nadelen hebben:⚠ Langzamere updates → Als een rij wordt gewijzigd, moet SQL Server alle indexen bijwerken.
⚠ Extra opslagruimte → Een index gebruikt extra ruimte op de schijf.✅ Gebruik indexen verstandig! Alleen op kolommen waarop vaak wordt gezocht.SQL Server gebruikt automatisch de beste beschikbare index bij zoekopdrachten. Maar hoe weet je zeker dat SQL Server een index gebruikt?
Explain Plan uitvoeren → Klik met de rechtermuisknop op een SQL-statement en kies "Explain Plan".
Visualisatie van het Execution Plan → Klik op "Show Diagram" om een visueel overzicht te krijgen.
Flame Graph genereren → Klik op "Flame Graph" om de kosten van een zoekopdracht te analyseren.
✅ Deze tools helpen je om te controleren of SQL Server een index gebruikt in je query.✅ Indexen maken zoekopdrachten sneller, zoals een inhoudsopgave in een boek.
✅ Gebruik CREATE INDEX om een index aan te maken.
✅ Gebruik UNIQUE INDEX om duplicaten te voorkomen.
✅ SQL Server gebruikt automatisch indexen, maar ze kunnen updates vertragen en opslag innemen.
✅ Controleer het gebruik van indexen met een Query Execution Plan in DataGrip.]]></description><link>5.-ddl/5.6-index.html</link><guid isPermaLink="false">5. DDL/5.6 - Index.md</guid><pubDate>Sun, 22 Jun 2025 12:09:37 GMT</pubDate></item><item><title><![CDATA[5.5 - Constraints]]></title><description><![CDATA[Constraints (vrij vertaald naar het Nederlands: beperkingen) zijn speciale regels die je aan kolommen en tabellen kunt meegeven om de kwaliteit van de gegevens te bewaken.✅ Waarom constraints gebruiken?
Voorkomen foute of inconsistente gegevens in de database.
Zorgen ervoor dat bepaalde waarden altijd correct worden ingevuld.
Helpen bij het beheren van relaties tussen tabellen.
✔ Kolom constraints → Beperking op een enkele kolom (bijv. NOT NULL).
✔ Tabel constraints → Beperking op meerdere kolommen of de hele tabel (bijv. FOREIGN KEY).✅ Een PRIMARY KEY maakt elke rij uniek en zorgt ervoor dat er geen dubbele gegevens ontstaan.
✅ Een PRIMARY KEY wordt automatisch ook UNIQUE en NOT NULL.CREATE TABLE Werknemers ( WerknemerID INT PRIMARY KEY, Achternaam NVARCHAR(255) NOT NULL, Voornaam NVARCHAR(255)
);
✅ Hier maakt WerknemerID elke rij uniek en verplicht een waarde.CREATE TABLE Werknemers ( WerknemerID INT, Achternaam NVARCHAR(255), Voornaam NVARCHAR(255), CONSTRAINT PK_Werknemers PRIMARY KEY (WerknemerID)
);
✅ Hier geven we de constraint de naam PK_Werknemers.✅ Met NOT NULL zorg je ervoor dat een kolom altijd een waarde moet hebben.CREATE TABLE Werknemers ( WerknemerID INT, Achternaam NVARCHAR(255) NOT NULL, Voornaam NVARCHAR(255), CONSTRAINT PK_WerknemerID PRIMARY KEY (WerknemerID)
);
✅ Hier moet Achternaam altijd ingevuld zijn wanneer een nieuwe rij wordt toegevoegd.✅ Met CHECK kun je een bepaalde regel aan een kolom koppelen (bijv. een minimumsalaris).CREATE TABLE Medewerkers ( MedewerkerID INT PRIMARY KEY, Salaris DECIMAL(7,2) CONSTRAINT CK_Salaris CHECK (Salaris &lt;= 25000)
);
✅ Hier kan niemand een salaris hoger dan 25000 invoeren.CREATE TABLE Medewerkers ( MedewerkerID INT PRIMARY KEY, Leeftijd INT CONSTRAINT CK_Leeftijd CHECK (Leeftijd &gt;= 18)
);
✅ Hier kan niemand jonger dan 18 ingevoerd worden.CREATE TABLE Medewerkers ( MedewerkerID INT PRIMARY KEY, Leeftijd INT CONSTRAINT CK_Leeftijd CHECK (Leeftijd &gt;= 0 AND Leeftijd &lt;= 99)
);
✅ Hier moet de leeftijd tussen 0 en 99 liggen.Je kunt overigens meerdere voorwaarden toevoegen door meerdere AND te schrijven.✅ Met UNIQUE zorg je ervoor dat alle waarden in een kolom uniek zijn.CREATE TABLE Burgers ( BurgerID INT PRIMARY KEY, Identiteitskaart NCHAR(9) CONSTRAINT UQ_Identiteitskaart UNIQUE
);
✅ Hier mogen geen dubbele identiteitskaartnummers worden opgeslagen.✅ Een FOREIGN KEY verbindt een kolom met een PRIMARY KEY in een andere tabel.CREATE TABLE Orders ( OrderID INT PRIMARY KEY, OrderNumber INT NOT NULL, PersonID INT FOREIGN KEY REFERENCES Persons(ID)
);
✅ Hier garanderen we dat PersonID verwijst naar een bestaand ID in Persons.✅ Met DEFAULT stel je een standaardwaarde in als de gebruiker niets invult.CREATE TABLE Klanten ( KlantID INT PRIMARY KEY, Naam NVARCHAR(50), Land NVARCHAR(40) DEFAULT 'België'
);
✅ Hier wordt België automatisch ingevuld als geen land wordt opgegeven.✅ Constraints helpen de kwaliteit en consistentie van gegevens te bewaken.
✅ Gebruik PRIMARY KEY om elke rij uniek te maken.
✅ Gebruik NOT NULL om ervoor te zorgen dat een kolom altijd een waarde heeft.
✅ Gebruik CHECK om regels zoals minimumsalaris of leeftijd toe te passen.
✅ Gebruik UNIQUE om dubbele gegevens te voorkomen.
✅ Gebruik FOREIGN KEY om relaties tussen tabellen te leggen.
✅ Gebruik DEFAULT om een standaardwaarde in te stellen.]]></description><link>5.-ddl/5.5-constraints.html</link><guid isPermaLink="false">5. DDL/5.5 - Constraints.md</guid><pubDate>Sun, 22 Jun 2025 12:08:18 GMT</pubDate></item><item><title><![CDATA[5.4 - DROP TABLE]]></title><description><![CDATA[Met het DROP TABLE statement kun je een volledige tabel verwijderen in SQL Server. Dit betekent dat alle kolommen, rijen en gegevens permanent verdwijnen, dus wees voorzichtig bij het uitvoeren van deze actie!✅ Wat gebeurt er bij DROP TABLE?
✔ De tabel verdwijnt volledig uit de database.
✔ Alle gegevens in de tabel worden permanent verwijderd.
✔ Alle constraints die aan de tabel zijn gekoppeld (zoals FOREIGN KEY verwijzingen) moeten eerst worden verwijderd.DROP TABLE tabel_naam;
✅ Hiermee verwijder je de tabel definitief uit de database.⚠️ Let op! Als andere tabellen verwijzen naar een PRIMARY KEY in deze tabel via een FOREIGN KEY, moet je die verwijzingen eerst verwijderen voordat je de tabel kunt droppen.Om te controleren welke constraints er zijn, kun je de volgende query gebruiken:SELECT OBJECT_NAME(constraint_object_id) AS constraint_naam, OBJECT_NAME(parent_object_id) AS tabel_naam FROM sys.foreign_key_columns WHERE parent_object_id = OBJECT_ID('tabel_naam');
✅ Vervang tabel_naam door de echte tabelnaam om de constraints te vinden.Gebruik dan ALTER TABLE om constraints te verwijderen:ALTER TABLE tabel_naam DROP CONSTRAINT constraint_naam;
✅ Pas nadat alle constraints verwijderd zijn, kun je de tabel droppen.Wil je alle gekoppelde constraints automatisch verwijderen wanneer je een tabel dropt? Gebruik CASCADE:ALTER TABLE tabel_naam DROP CONSTRAINT constraint_naam CASCADE;
✅ Hiermee verwijder je zowel de constraint als alle gekoppelde verwijzingen in één keer.Wil je alle gekoppelde vreemde sleutels in één keer verwijderen en daarna de tabel droppen?DROP TABLE tabel_naam CASCADE;
✅ Hiermee verwijder je de tabel inclusief alle gerelateerde constraints en sleutels.✅ DROP TABLE verwijdert een tabel volledig uit de database, inclusief alle rijen en kolommen.
✅ Controleer eerst of er FOREIGN KEY constraints zijn die naar de tabel verwijzen.
✅ Verwijder constraints handmatig met ALTER TABLE DROP CONSTRAINT, of automatisch met CASCADE.]]></description><link>5.-ddl/5.4-drop-table.html</link><guid isPermaLink="false">5. DDL/5.4 - DROP TABLE.md</guid><pubDate>Sun, 22 Jun 2025 12:03:12 GMT</pubDate></item><item><title><![CDATA[Screenshot-from-2023-04-05-17-09-24]]></title><description><![CDATA[<img src="media/screenshot-from-2023-04-05-17-09-24.png" target="_self">]]></description><link>media/screenshot-from-2023-04-05-17-09-24.html</link><guid isPermaLink="false">media/Screenshot-from-2023-04-05-17-09-24.png</guid><pubDate>Sun, 22 Jun 2025 11:56:26 GMT</pubDate><enclosure url="media/screenshot-from-2023-04-05-17-09-24.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/screenshot-from-2023-04-05-17-09-24.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[5.1 - Inleiding]]></title><description><![CDATA[DDL staat voor Data Definition Language en is een onderdeel van SQL dat gebruikt wordt om databasestructuren te definiëren en beheren.✅ Wat kun je doen met DDL?
Tabellen aanmaken (CREATE TABLE) → Hiermee definieer je de structuur van een nieuwe tabel.
Tabellen wijzigen (ALTER TABLE) → Toevoegen, wijzigen of verwijderen van kolommen en constraints.
Tabellen verwijderen (DROP TABLE) → Definitief verwijderen van een tabel en alle bijbehorende gegevens.
Constraints instellen → Beperkingen zoals PRIMARY KEY, FOREIGN KEY, UNIQUE, en CHECK.
Indexen beheren → Optimaliseren van zoekopdrachten in de database.
✅ DDL bepaalt de structuur van een database → Alle tabellen, relaties en beperkingen worden via DDL ingesteld.
✅ Zorgt voor gegevensintegriteit → Constraints zoals PRIMARY KEY en FOREIGN KEY helpen fouten voorkomen.
✅ Helpt databaseprestaties te optimaliseren → Goed ontworpen indexen zorgen ervoor dat zoekopdrachten sneller worden uitgevoerd.In de komende paragrafen gaan we dieper in op:
✔ CREATE TABLE → Hoe maak je een nieuwe tabel?
✔ ALTER TABLE → Hoe pas je een bestaande tabel aan?
✔ DROP TABLE → Hoe verwijder je een tabel veilig?
✔ Constraints → Welke regels kun je instellen voor databeheer?
✔ Indexen → Hoe zorg je voor snelle zoekopdrachten in grote datasets?✅ DDL is het fundament van een database en bepaalt de structuur.
✅ We gebruiken DDL om tabellen aan te maken, te beheren en te optimaliseren.
✅ Dit hoofdstuk behandelt alle belangrijke DDL-opdrachten zoals CREATE TABLE, ALTER TABLE en DROP TABLE.]]></description><link>5.-ddl/5.1-inleiding.html</link><guid isPermaLink="false">5. DDL/5.1 - Inleiding.md</guid><pubDate>Sun, 22 Jun 2025 10:57:12 GMT</pubDate></item><item><title><![CDATA[3.7 - Datatypes]]></title><description><![CDATA[Een datatype (gegevenstype) bepaalt welke soort gegevens in een kolom van een tabel mogen worden opgeslagen. SQL Server heeft veel verschillende datatypes, maar we focussen op de meest gebruikte: nchar, nvarchar, int, decimal en date.✅ Waarom zijn datatypes belangrijk?
Voorkomt fouten → Zorgt ervoor dat een kolom alleen geldige waarden accepteert.
Optimaliseert opslagruimte → Elk datatype gebruikt een specifieke hoeveelheid geheugen.
Maakt berekeningen mogelijk → Numerieke en datumspecifieke datatypes laten berekeningen toe.
Deze datatypes worden gebruikt om tekst en alfanumerieke waarden op te slaan.Achter een datatype zie je soms haakjes met een n (n) staan. Hier moet je dus zelf een getal typen om aan te geven hoeveel tekens er maximaal mogen staan.✅ Gebruik nvarchar als standaard voor tekstwaarden → Ondersteunt alle tekens, ook speciale.
✅ Gebruik nchar als de lengte altijd hetzelfde is, zoals landcodes (NL, BE).Numerieke datatypes worden gebruikt voor getallen en berekeningen.✅ Gebruik int voor hele getallen en decimal(p,s) voor nauwkeurige berekeningen.
✅ Gebruik money voor prijzen en valuta-waarden.Het gebruik van decimal(p,s) heeft iets meer uitleg nodig:
p = Precision (precisie): Het totale aantal cijfers dat je mag opslaan, zowel links als rechts van de komma. Dit getal mag tussen 1 en 38 liggen. s = Scale (schaal): Het aantal cijfers ná de komma. s moet liggen tussen 0 en p. Totale precisie = 7 cijfers Daarvan zijn 2 cijfers na de komma Dus: maximaal 5 cijfers vóór de komma Je kunt hiermee waarden opslaan tussen -99999.99 en 99999.99 Omdat decimal(p,s) exacte berekeningen uitvoert, en dus ideaal is voor:
Financiële data (zonder afrondingsfouten) Belastingberekeningen Wetenschappelijke toepassingen met vaste precisie Dat in tegenstelling tot bijvoorbeeld float, die benaderingen met zwevende komma opslaat — en daar kunnen afrondingsfouten optreden.Datum- en tijdsdatatypes worden gebruikt om tijdgegevens te beheren.✅ Gebruik datetime2 voor de meest nauwkeurige tijdsberekeningen.
✅ Gebruik date als alleen de datum belangrijk is, zonder tijdstip.Bij het kiezen van een datatype let je op:
✅ Precieze data-opslag → Gebruik decimal(18,2) voor geldbedragen, niet float.
✅ Ruimtebesparing → Gebruik tinyint als een kolom alleen kleine waarden bevat.
✅ Unicode-ondersteuning → Gebruik nvarchar als je internationale tekens wilt opslaan.
✅ Datumbeheer → Gebruik datetime2 voor de hoogste nauwkeurigheid.Meer uitleg over datatypes optimaliseren vind je op JetBrains Docs.✅ Tekstwaarden gebruiken nvarchar, tenzij vaste lengte nodig is (nchar).
✅ Gebruik decimal(p,s) voor financiële waarden en money voor geldbedragen.
✅ Datumgegevens opslaan in date of datetime2 voor precisie.
✅ Elk datatype heeft voordelen en beperkingen → Kies zorgvuldig voor efficiënte opslag!]]></description><link>3.-werking-relationele-database/3.7-datatypes.html</link><guid isPermaLink="false">3. Werking relationele database/3.7 - Datatypes.md</guid><pubDate>Sun, 22 Jun 2025 10:52:13 GMT</pubDate></item><item><title><![CDATA[3.5 - ERD]]></title><description><![CDATA[Een Entity-Relationship Diagram is een tekening waarmee je – vóór je tabellen aanmaakt – vastlegt:
Welke dingen ( entiteiten ) je wil bijhouden.
Welke eigenschappen ( attributen ) die dingen hebben.
Hoe de dingen met elkaar verbonden zijn ( relaties ).
In welke hoeveelheden ze aan elkaar gekoppeld worden ( kardinaliteit ).
<img alt="ecommerce-database-diagram-2.png" src="media/ecommerce-database-diagram-2.png" target="_self">
Tip: lees de zin altijd in twee richtingen: &gt; “Een klant plaatst 0..n bestellingen” én “Een bestelling hoort bij precies 1 klant”.
Een alternatief voor bovenstaande weergave van kardinaliteit, is de zogenaamde kraaienpootnotatie (crow's foot notation):
We pakken eerst een schoolvoorbeeld (LEERLING–KLAS–LERAREN) en daarna extra voorbeelden.
Schrijf alle “dingen” op losse papiertjes: LEERLING, KLAS, LERAAR, VAK, PUNT.
LEERLING – KLAS
LERAAR – KLAS (mentor)
LERAAR – VAK
LEERLING – PUNT – VAK (veel-op-veel via tussentabel PUNT)
KLAS 1 ……&lt; LEERLING (1..n)
KLAS 0..n……&gt; 1 LERAAR (mentor, 0..n klassen per leraar)
LERAAR 1 ……&lt; VAK (1..n)
LEERLING 1 ……&lt; PUNT &gt;……1 VAK (veel-op-veel opgelost)
“Een klas bevat één of meer leerlingen.” ✓
“Een leraar kan geen of meer klassen mentoren.” ✓
“Een punt hoort bij exact één leerling en exact één vak.” ✓Voeg datatypen, NOT NULL, indexen toe en laat een klasgenoot je ERD navertellen. Als hij/zij struikelt, voeg labels of kardinaliteit toe tot het glashelder is.LEZER 1……&lt;0..n ONTLENING &gt;……1 BOEK
Zinnen:
• Eén lezer kan nul, één of veel ontleningen hebben.
• Eén ontlening hoort bij precies één boek.
• Eén boek kan nul, één of veel ontleningen opleveren.KLANT 1……&lt;0..n BESTELLING
BESTELLING 1……&lt;1..n BESTELREGEL
BESTELREGEL n..1……1 PRODUCT
Extra: als een product in meerdere categorieën mag zitten, gebruik je een tussentabel PRODUCT_CATEGORIE met kardinaliteit M:N.TEAM 1……&lt;0..n SPELER
TEAM 1……&lt;0..n WEDSTRIJD &gt;0..n……1 TEAM (thuis/uit)
WEDSTRIJD 1……&lt;1 SCORE (uitslag)
Een goede ERD is een databaserecept: je ziet wat je bewaart, hoeveel er van elk ding bestaat en hoe alles samenhangt.
Met de notaties 0..1 | 1 | 1..n | 0..n hou je het overzicht simpel én eenduidig – perfect voor de schoolbanken én later in het werkveld.]]></description><link>3.-werking-relationele-database/3.5-erd.html</link><guid isPermaLink="false">3. Werking relationele database/3.5 - ERD.md</guid><pubDate>Sun, 22 Jun 2025 09:08:28 GMT</pubDate><enclosure url="media/ecommerce-database-diagram-2.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/ecommerce-database-diagram-2.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[ecommerce-database-diagram-2]]></title><description><![CDATA[<img src="media/ecommerce-database-diagram-2.png" target="_self">]]></description><link>media/ecommerce-database-diagram-2.html</link><guid isPermaLink="false">media/ecommerce-database-diagram-2.png</guid><pubDate>Sun, 22 Jun 2025 09:08:26 GMT</pubDate><enclosure url="media/ecommerce-database-diagram-2.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/ecommerce-database-diagram-2.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[3.6 - Tussentabellen]]></title><description><![CDATA[In een relationele database kunnen entiteiten soms een veel-op-veel (M:N) relatie hebben. Dit betekent dat meerdere records in tabel A gekoppeld kunnen zijn aan meerdere records in tabel B. SQL ondersteunt geen directe M:N-relaties tussen tabellen, dus we gebruiken een tussentabel (ook wel associatieve tabel, join-table of bridge table genoemd) om deze relatie op te vangen.Een veel-op-veel relatie kan niet rechtstreeks worden geïmplementeerd omdat databases geen dubbele koppelingen tussen twee tabellen kunnen bijhouden zonder een tussenstap. Een tussentabel lost dit op door:✅ Relaties tussen twee entiteiten correct op te slaan.
✅ Redundantie en inconsistentie te voorkomen.
✅ Extra attributen toe te voegen aan de relatie (bijvoorbeeld datum van een koppeling).<img alt="QZbNs.png" src="media/qzbns.png" target="_self">
Op bovenstaande afbeelding zien we drie tabellen. In de tabel User staat primaire sleutel user_id en in tabel Activity staat primaire sleutel activity_id. Zonder tussentabel User_Activity zou een user slechts één activity kunnen doen! Als we namelijk in de tabel User een vreemde sleutel naar activity_id maken, en we weten dat we slechts één waarde in een cel kunnen schrijven, dan er per user ook maar één activity worden gedaan... Daarom hebben we voor dit soort relaties een tussentabel nodig: User_Activity. Deze tussentabel bevat geen primaire sleutel en bestaat verder uit twee vreemde sleutels die verwijzen naar de andere primaire sleutels.Laten we een schooldatabase nemen. Een leerling kan meerdere vakken volgen en een vak kan door meerdere leerlingen gevolgd worden. Dit is een M:N-relatie.✅ Elke leerling kan meerdere vakken volgen en elk vak heeft meerdere leerlingen.Omdat een directe M:N-relatie niet mogelijk is, maken we een tussentabel LEERLINGVAK:✅ Hier krijgen we een unieke koppeling tussen een leerling en een vak.
✅ Extra gegevens zoals inschrijfdatum kunnen worden toegevoegd.SQL-code om de tussentabel te maken:CREATE TABLE LEERLINGVAK ( LeerlingID INT, VakCode INT, InschrijfDatum DATE, PRIMARY KEY (LeerlingID, VakCode), FOREIGN KEY (LeerlingID) REFERENCES LEERLING(LeerlingID), FOREIGN KEY (VakCode) REFERENCES VAK(VakCode)
);
<br><img alt="Copilot_20250622_110221.png" height="428" src="media/copilot_20250622_110221.png" target="_self" style="width: 428px; max-width: 100%;">Een bestelling kan meerdere producten bevatten en een product kan in meerdere bestellingen voorkomen.✅ Maak een tussentabel BESTELREGEL om de relatie vast te leggen:SQL-code voor BESTELREGEL:CREATE TABLE BESTELREGEL ( BestelID INT, ProductID INT, Aantal INT, TotaalPrijs DECIMAL(10,2), PRIMARY KEY (BestelID, ProductID), FOREIGN KEY (BestelID) REFERENCES BESTELLING(BestelID), FOREIGN KEY (ProductID) REFERENCES PRODUCT(ProductID)
);
<br><img alt="Copilot_20250622_110603.png" height="304" src="media/copilot_20250622_110603.png" target="_self" style="width: 456px; max-width: 100%;">In een database voor films en acteurs geldt:
✅ Een acteur speelt in meerdere films en een film heeft meerdere acteurs.✅ Maak een tussentabel FILMACTEUR om de relatie vast te leggen:SQL-code voor FILMACTEUR:CREATE TABLE FILMACTEUR ( FilmID INT, ActeurID INT, RolNaam NVARCHAR(100), PRIMARY KEY (FilmID, ActeurID), FOREIGN KEY (FilmID) REFERENCES FILM(FilmID), FOREIGN KEY (ActeurID) REFERENCES ACTEUR(ActeurID)
);
✅ Tussentabellen zijn essentieel om M:N-relaties correct te beheren.
✅ Ze voorkomen inconsistenties en helpen extra gegevens bij te houden.
✅ Gebruik PRIMARY KEY (KolomA, KolomB) om unieke koppelingen te garanderen.
✅ Altijd FOREIGN KEY-relaties leggen naar de originele tabellen.]]></description><link>3.-werking-relationele-database/3.6-tussentabellen.html</link><guid isPermaLink="false">3. Werking relationele database/3.6 - Tussentabellen.md</guid><pubDate>Sun, 22 Jun 2025 09:06:19 GMT</pubDate><enclosure url="media/qzbns.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/qzbns.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Copilot_20250622_110603]]></title><description><![CDATA[<img src="media/copilot_20250622_110603.png" target="_self">]]></description><link>media/copilot_20250622_110603.html</link><guid isPermaLink="false">media/Copilot_20250622_110603.png</guid><pubDate>Sun, 22 Jun 2025 09:06:15 GMT</pubDate><enclosure url="media/copilot_20250622_110603.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/copilot_20250622_110603.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Copilot_20250622_110221]]></title><description><![CDATA[<img src="media/copilot_20250622_110221.png" target="_self">]]></description><link>media/copilot_20250622_110221.html</link><guid isPermaLink="false">media/Copilot_20250622_110221.png</guid><pubDate>Sun, 22 Jun 2025 09:02:46 GMT</pubDate><enclosure url="media/copilot_20250622_110221.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/copilot_20250622_110221.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[QZbNs]]></title><description><![CDATA[<img src="media/qzbns.png" target="_self">]]></description><link>media/qzbns.html</link><guid isPermaLink="false">media/QZbNs.png</guid><pubDate>Sun, 22 Jun 2025 08:50:03 GMT</pubDate><enclosure url="media/qzbns.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/qzbns.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[ecommerce-database-diagram-1]]></title><description><![CDATA[<img src="media/ecommerce-database-diagram-1.png" target="_self">]]></description><link>media/ecommerce-database-diagram-1.html</link><guid isPermaLink="false">media/ecommerce-database-diagram-1.png</guid><pubDate>Sun, 22 Jun 2025 07:54:01 GMT</pubDate><enclosure url="media/ecommerce-database-diagram-1.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/ecommerce-database-diagram-1.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[ecommerce-database-diagram]]></title><description><![CDATA[<img src="media/ecommerce-database-diagram.png" target="_self">]]></description><link>media/ecommerce-database-diagram.html</link><guid isPermaLink="false">media/ecommerce-database-diagram.png</guid><pubDate>Sun, 22 Jun 2025 07:53:51 GMT</pubDate><enclosure url="media/ecommerce-database-diagram.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/ecommerce-database-diagram.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[3.4 - USER en Schema]]></title><description><![CDATA[Binnen een database spelen users (gebruikers) en schema's een belangrijke rol bij het beheren van gegevens en toegangsrechten.✅ Waarom zijn users en schema's belangrijk?
Users bepalen wie toegang heeft tot de database en welke acties ze mogen uitvoeren.
Een schema helpt bij het organiseren van database-objecten zoals tabellen, views en procedures.
✅ Een user in SQL Server is een gebruiker die toegang heeft tot de database en bepaalde rechten kan hebben.✅ Voorbeeld: Een nieuwe user aanmaken in SQL ServerCREATE LOGIN Maes WITH PASSWORD = 'SterkWachtwoord';
CREATE USER Maes FOR LOGIN Maes;
✅ Hier maken we een login aan (Maes) en koppelen deze aan een user binnen de database.✅ Een schema (spreek op z'n Engels uit: skiema) in SQL Server is een container waarin database-objecten zoals tabellen en views worden georganiseerd.✅ Voorbeeld: Een schema aanmaken en een tabel erin plaatsenCREATE SCHEMA Verhuur;
CREATE TABLE Verhuur.Klanten ( KlantID INT PRIMARY KEY, Naam NVARCHAR(100), Adres NVARCHAR(255)
);
✅ Hier maken we het schema Verhuur en voegen we een tabel Klanten toe.✅ Schema’s helpen bij:✅ Users in SQL Server bepalen wie toegang heeft tot de database en welke rechten ze hebben.
✅ Schema's organiseren database-objecten zoals tabellen en views.
✅ Schema's zorgen voor betere beveiliging en efficiëntere databasebeheer.]]></description><link>3.-werking-relationele-database/3.4-user-en-schema.html</link><guid isPermaLink="false">3. Werking relationele database/3.4 - USER en Schema.md</guid><pubDate>Sun, 22 Jun 2025 07:22:45 GMT</pubDate></item><item><title><![CDATA[3.3 - Sleutels]]></title><description><![CDATA[Binnen een relationele database spelen sleutels (keys) een cruciale rol bij het identificeren van records en het leggen van relaties tussen tabellen.✅ Waarom sleutels gebruiken?
Zorgen voor unieke identificatie van records binnen een tabel.
Voorkomen dat dubbele gegevens worden opgeslagen.
Helpen bij het koppelen van gegevens tussen verschillende tabellen.
✅ Een primaire sleutel identificeert records in een tabel op unieke wijze.De primaire sleutel is de belangrijkste kolom uit een tabel. Meestal is dit een kolom die bijvoorbeeld een medewerkersnummers, studentnummer, ordernummer, rijksregisternummer, ... bevat.
Overigens hoeft een tabel niet perse een primaire sleutel te bevatten. Er zijn ook tabellen zonder sleutels of tabellen die bestaan uit meerdere vreemde sleutels.✅ Hier voldoet de kolom PROJ_NR aan alle criteria voor een primaire sleutel.<img alt="unnamed.gif" src="media/unnamed.gif" target="_self">
Op bovenstaande afbeelding zien we kolom StudentId. Dit is een perfecte kandidaat om als primaire sleutel aan te duiden. Deze kolom voldoet namelijk aan alle voorwaarden.✅ Een vreemde sleutel verwijst naar de primaire sleutel van een andere tabel.
✅ Hierdoor ontstaat een relatie tussen tabellen.| Tabel AFDELINGEN || Tabel PROJECTEN |✅ Hier fungeert AFD_NR in de tabel PROJECTEN als vreemde sleutel die verwijst naar de primaire sleutel AFD_NR in AFDELINGEN.<br><img alt="8-overzicht-sql-keys.png" height="221" src="media/8-overzicht-sql-keys.png" target="_self" style="width: 666px; max-width: 100%;">
Op bovenstaande afbeelding zien we twee tabellen. In de tabel movies staat primaire sleutel kolom id. In de tabel roles verwijzen we middels een vreemde sleutels kolom movie_id naar de primaire sleutel kolom id in de tabel movies.✅ Sleutels zorgen voor:✅ Een primaire sleutel identificeert records uniek en mag geen NULL-waarden bevatten.
✅ Een vreemde sleutel verwijst naar een primaire sleutel in een andere tabel en creëert relaties tussen gegevens.
✅ Sleutels helpen bij dataconsistentie, efficiëntie en het koppelen van tabellen in een relationele database.]]></description><link>3.-werking-relationele-database/3.3-sleutels.html</link><guid isPermaLink="false">3. Werking relationele database/3.3 - Sleutels.md</guid><pubDate>Sun, 22 Jun 2025 07:17:55 GMT</pubDate><enclosure url="media/unnamed.gif" length="0" type="image/gif"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/unnamed.gif&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[unnamed]]></title><description><![CDATA[<img src="media/unnamed.gif" target="_self">]]></description><link>media/unnamed.html</link><guid isPermaLink="false">media/unnamed.gif</guid><pubDate>Sun, 22 Jun 2025 07:13:58 GMT</pubDate><enclosure url="media/unnamed.gif" length="0" type="image/gif"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/unnamed.gif&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[8-overzicht-sql-keys]]></title><description><![CDATA[<img src="media/8-overzicht-sql-keys.png" target="_self">]]></description><link>media/8-overzicht-sql-keys.html</link><guid isPermaLink="false">media/8-overzicht-sql-keys.png</guid><pubDate>Sun, 22 Jun 2025 07:09:06 GMT</pubDate><enclosure url="media/8-overzicht-sql-keys.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/8-overzicht-sql-keys.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[3.2 - Soorten gebruikers]]></title><description><![CDATA[Binnen een database kunnen verschillende gebruikersrollen worden ingesteld, afhankelijk van hun toegangsrechten en verantwoordelijkheden. Elke gebruiker, oftewel 'user', heeft een unieke identiteit in het systeem.✅ Waarom verschillende gebruikersrollen?
Biedt beveiliging door alleen bepaalde gebruikers toegang te geven tot kritieke functies.
Voorkomt dat eindgebruikers per ongeluk gegevens wijzigen of verwijderen.
Maakt het beheer efficiënter, vooral in grotere organisaties.
✅ De DBA is de eindverantwoordelijke voor de database en zorgt voor:✅ De DA beheert de gegevens en controleert hun integriteit.✅ In kleinere bedrijven kan de DBA ook de rol van DA op zich nemen.✅ Een database-programmeur schrijft scripts en queries om gegevens op te halen en te bewerken.✅ In kleine bedrijven kan de DBA ook als programmeur optreden.✅ Eindgebruikers hebben beperkte toegang en kunnen alleen gegevens opvragen.✅ Databases hebben verschillende gebruikersrollen om beveiliging en efficiëntie te waarborgen.
✅ De DBA beheert de structuur, de DA controleert de data, en de programmeur schrijft query's.
✅ Eindgebruikers kunnen gegevens raadplegen zonder wijzigingen aan de database te maken.]]></description><link>3.-werking-relationele-database/3.2-soorten-gebruikers.html</link><guid isPermaLink="false">3. Werking relationele database/3.2 - Soorten gebruikers.md</guid><pubDate>Sun, 22 Jun 2025 07:02:49 GMT</pubDate></item><item><title><![CDATA[3.1 - Inleiding]]></title><description><![CDATA[Een database is een gestructureerde verzameling gegevens die wordt beheerd via een Relational Database Management System (RDBMS).✅ Wat is een database?
Een model voor gestructureerde gegevensopslag.
Bestaat uit tabellen die gegevens bevatten.
Gegevens binnen tabellen zijn gerelateerd via relaties, waardoor we spreken van een relationele database.
Een RDBMS is de software die een database beheert, organiseert en gebruikt.✅ Wij werken met Microsoft SQL Server RDBMS, een lokale databaseomgeving waarmee we relationele databases kunnen beheren.Binnen een relationele database worden verschillende termen gebruikt om tabellen en gegevens te structureren:✅ Een relationele tabel volgt bepaalde regels:✅ Voordelen van Microsoft SQL Server:
Gebruiksvriendelijk en goed geïntegreerd in Windows-systemen.
Ondersteuning voor relationele databases en krachtige SQL-functionaliteiten.
Mogelijkheid om databases lokaal te hosten met SQL Server LocalDB.
✅ Een RDBMS beheert databases en maakt gegevensopslag en -beheer mogelijk.
✅ Relationele databases structureren gegevens in tabellen met kolommen en rijen.
✅ Microsoft SQL Server biedt een krachtige manier om databases te beheren en te beveiligen.]]></description><link>3.-werking-relationele-database/3.1-inleiding.html</link><guid isPermaLink="false">3. Werking relationele database/3.1 - Inleiding.md</guid><pubDate>Sun, 22 Jun 2025 07:00:59 GMT</pubDate></item><item><title><![CDATA[1.2 - Relationele databases]]></title><description><![CDATA[Een database is een geïntegreerde verzameling gegevens die kan worden gemanipuleerd door meerdere gebruikers en voldoet aan de informatiebehoeften van een organisatie.✅ Wat bevat een database?
Gegevens → De daadwerkelijke informatie, zoals klantgegevens, producten of transacties.
Metagegevens → De structuur van de database, zoals tabelnamen, kolomtypes en relaties tussen gegevens.
<img alt="OGImage-RelationalDatabase_166844.png" height="312" src="media/ogimage-relationaldatabase_166844.png" target="_self" style="width: 554px; max-width: 100%;">✅ Bedrijven hebben altijd behoefte aan informatie, maar deze is niet altijd direct beschikbaar.✅ Voorbeeld:
Bibliotheken gebruiken databases om boekinformatie op te slaan, uitleningen bij te houden en terugbrengdata te registreren.
Webshops slaan klantgegevens, bestellingen en productinformatie op in databases.
✅ Als eindgebruiker merk je weinig van wat er achter de schermen bij een database gebeurt.
✅ Beheerders beheren databases om gegevens correct op te slaan, te verwerken en te beveiligen.Meer uitleg over verschillende gebruikersrollen in databases vind je op SQL Server Docs.<br><img alt="DataGrip.svg.png" height="207" src="media/datagrip.svg.png" target="_self" style="width: 207px; max-width: 100%;"><br>
<img alt="Microsoft_SQL_Server_Logo.svg.png" height="240" src="media/microsoft_sql_server_logo.svg.png" target="_self" style="width: 296px; max-width: 100%;">
✅ We gaan databases beheren met de scripttaal SQL binnen JetBrains DataGrip.✅ Een DBMS is software die databases beheert en gebruikers toegang geeft tot gegevens.✅ Databases zorgen voor gestructureerde opslag en beheer van gegevens.
✅ Bedrijven gebruiken databases om informatie snel en efficiënt op te vragen.
✅ We werken met SQL, DataGrip en Microsoft SQL Server LocalDB om databases te beheren.]]></description><link>1.-inleiding/1.2-relationele-databases.html</link><guid isPermaLink="false">1. Inleiding/1.2 - Relationele databases.md</guid><pubDate>Sun, 22 Jun 2025 06:58:34 GMT</pubDate><enclosure url="media/ogimage-relationaldatabase_166844.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/ogimage-relationaldatabase_166844.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Microsoft_SQL_Server_Logo.svg]]></title><description><![CDATA[<img src="media/microsoft_sql_server_logo.svg.png" target="_self">]]></description><link>media/microsoft_sql_server_logo.svg.html</link><guid isPermaLink="false">media/Microsoft_SQL_Server_Logo.svg.png</guid><pubDate>Sun, 22 Jun 2025 06:53:03 GMT</pubDate><enclosure url="media/microsoft_sql_server_logo.svg.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/microsoft_sql_server_logo.svg.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[DataGrip.svg]]></title><description><![CDATA[<img src="media/datagrip.svg.png" target="_self">]]></description><link>media/datagrip.svg.html</link><guid isPermaLink="false">media/DataGrip.svg.png</guid><pubDate>Sun, 22 Jun 2025 06:50:50 GMT</pubDate><enclosure url="media/datagrip.svg.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/datagrip.svg.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[1.1 - Inleiding]]></title><description><![CDATA[In deze paragraaf gaan we naar een aantal basisconcepten binnen Databeheer kijken.<img alt="Sql_data_base_with_logo.png" height="214" src="media/sql_data_base_with_logo.png" target="_self" style="width: 458px; max-width: 100%;">✅ SQL (Structured Query Language) is een scripttaal voor databases.
Niet een echte programmeertaal, maar een taal om database-opdrachten uit te voeren.
Gebruikt een procedurele aanpak: schrijf WAT je nodig hebt, niet HOE het moet gebeuren.
Ontwikkeld in de jaren ‘70 en nu een standaard voor databasebeheer.
✅ SQL volgt het principe ‘easy to learn, hard to master’.
Basiscommando’s zijn snel te leren (SELECT, INSERT, UPDATE, DELETE).
Complexe queries vereisen diepgaand begrip van relaties, indexen en optimalisatie.
✅ Naast SQL behandelen we ook:
Big Data → Hoe grote datasets worden opgeslagen en beheerd.
Datawarehousing → Structureren van gegevens voor analyse en rapportage.
Data Lakes → Opslagmethoden voor ongestructureerde en semi-gestructureerde gegevens.
✅ Relationele databases vormen de basis van gestructureerd gegevensbeheer.
✅ SQL is krachtig, flexibel en fundamenteel voor databankbeheer.]]></description><link>1.-inleiding/1.1-inleiding.html</link><guid isPermaLink="false">1. Inleiding/1.1 - Inleiding.md</guid><pubDate>Sun, 22 Jun 2025 06:49:30 GMT</pubDate><enclosure url="media/sql_data_base_with_logo.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/sql_data_base_with_logo.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Sql_data_base_with_logo]]></title><description><![CDATA[<img src="media/sql_data_base_with_logo.png" target="_self">]]></description><link>media/sql_data_base_with_logo.html</link><guid isPermaLink="false">media/Sql_data_base_with_logo.png</guid><pubDate>Sun, 22 Jun 2025 06:49:21 GMT</pubDate><enclosure url="media/sql_data_base_with_logo.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/sql_data_base_with_logo.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[OGImage-RelationalDatabase_166844]]></title><description><![CDATA[<img src="media/ogimage-relationaldatabase_166844.png" target="_self">]]></description><link>media/ogimage-relationaldatabase_166844.html</link><guid isPermaLink="false">media/OGImage-RelationalDatabase_166844.png</guid><pubDate>Fri, 20 Jun 2025 13:01:47 GMT</pubDate><enclosure url="media/ogimage-relationaldatabase_166844.png" length="0" type="image/png"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/ogimage-relationaldatabase_166844.png&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Databeheer]]></title><description><![CDATA[Databeheer in 6A&D]]></description><link>index.html</link><guid isPermaLink="false">index.md</guid><pubDate>Fri, 20 Jun 2025 12:58:28 GMT</pubDate><enclosure url="media/database-icon-icon-for-your-website-mobile-presentation-and-logo-design-vector.jpg" length="0" type="image/jpeg"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/database-icon-icon-for-your-website-mobile-presentation-and-logo-design-vector.jpg&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[database-icon-icon-for-your-website-mobile-presentation-and-logo-design-vector]]></title><description><![CDATA[<img src="media/database-icon-icon-for-your-website-mobile-presentation-and-logo-design-vector.jpg" target="_self">]]></description><link>media/database-icon-icon-for-your-website-mobile-presentation-and-logo-design-vector.html</link><guid isPermaLink="false">media/database-icon-icon-for-your-website-mobile-presentation-and-logo-design-vector.jpg</guid><pubDate>Fri, 20 Jun 2025 12:57:56 GMT</pubDate><enclosure url="media/database-icon-icon-for-your-website-mobile-presentation-and-logo-design-vector.jpg" length="0" type="image/jpeg"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;media/database-icon-icon-for-your-website-mobile-presentation-and-logo-design-vector.jpg&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[11.11 - Data-analyse en forecasting]]></title><description><![CDATA[Power BI biedt krachtige tools voor geavanceerde data-analyse en voorspellende modellen (forecasting). Hiermee kunnen bedrijven trends herkennen, toekomstige ontwikkelingen voorspellen en beter onderbouwde beslissingen nemen.✅ Waarom forecasting en geavanceerde analyse gebruiken?
✔ Helpt bij het voorspellen van trends → Bijvoorbeeld verkoopcijfers, klantgedrag of voorraadbehoeften.
✔ Maakt datagedreven beslissingen mogelijk → Betere planning en strategie.
✔ Automatiseert analyses met machine learning → Voorspellingen worden continu geoptimaliseerd.Power BI heeft ingebouwde voorspellingsmogelijkheden via tijdreeksanalyse. Dit helpt bij het voorspellen van trends op basis van historische data.✅ Stap 1: Tijdreeksgegevens voorbereiden
✔ Zorg ervoor dat je dataset een datum- of tijdkolom bevat.
✔ Voeg relevante metingen toe, zoals verkoopcijfers of klantbezoeken per dag.✅ Stap 2: Forecasting inschakelen in Power BI
✔ Voeg een lijn- of staafdiagram toe in Power BI Desktop.
✔ Sleep de datum/tijdkolom naar de X-as en een meetwaarde naar de Y-as.
✔ Klik op Analytics en kies Forecasting.
✔ Stel de voorspellingsperiode in (bijvoorbeeld 6 maanden vooruit).🚀 Power BI voorspelt nu trends op basis van historische data!Meer uitleg over forecasting in Power BI vind je op Microsoft Power BI Docs.DAX-functies helpen bij geavanceerde berekeningen en trendanalyses. Hier zijn enkele handige functies:📌 Voortschrijdend Gemiddelde (Moving Average):Voortschrijdend_Gemiddelde = AVERAGEX(DATESINPERIOD('Datum'[datum], LASTDATE('Datum'[datum]), -6, MONTH), SUM('Verkoop'[bedrag]))
✅ Deze formule berekent het gemiddelde over de afgelopen 6 maanden.📌 Groeipercentage Berekenen:Groeipercentage = DIVIDE(SUM('Verkoop'[bedrag]) - SUM('Verkoop'[bedrag]), SUM('Verkoop'[bedrag]), 0)
✅ Hiermee wordt het percentage berekend waarmee de omzet is gegroeid.📌 Voorspelde Waarde (Forecasting op basis van lineaire regressie):Voorspelde_Waarde = SUM('Verkoop'[bedrag]) * 1.05
✅ Hier wordt een verwachte groei van 5% toegepast op de omzet.Power BI bevat AI-ondersteunde functies waarmee we nog diepgaandere voorspellingen kunnen maken.✅ Hoe AI-modellen in Power BI werken?
✔ Gebruik Power BI AI Visuals zoals de Key Influencers.
✔ Importeer externe Machine Learning-modellen via Azure Machine Learning.
✔ Gebruik Anomaly Detection om afwijkende trends te identificeren.Bij geavanceerde dashboards is het belangrijk om voorspellingen en analyses correct weer te geven.✅ Beste praktijken voor forecasting visualisaties
✔ Gebruik lijn- en staafdiagrammen voor tijdreeksen.
✔ Voeg een vertrouwensinterval toe om onzekerheid in voorspellingen te tonen.
✔ Gebruik kleurcodes (bijv. rood voor dalingen, groen voor stijgingen).
✔ Maak interactieve filters zodat gebruikers zelf scenario’s kunnen testen.✅ Power BI kan trends voorspellen met ingebouwde forecasting-mogelijkheden.
✅ DAX-functies helpen bij geavanceerde berekeningen zoals groeipercentages en voortschrijdend gemiddelde.
✅ AI en machine learning verbeteren de nauwkeurigheid van voorspellingen.
✅ Goede visualisaties maken voorspellingen helder en begrijpelijk.]]></description><link>11.-datawarehousing/11.11-data-analyse-en-forecasting.html</link><guid isPermaLink="false">11. Datawarehousing/11.11 - Data-analyse en forecasting.md</guid><pubDate>Sat, 14 Jun 2025 17:39:40 GMT</pubDate></item><item><title><![CDATA[11.8 - Optimalisatie van grote datasets]]></title><description><![CDATA[Wanneer een datawarehouse groeit, worden de tabellen steeds groter. Dit kan zoekopdrachten vertragen, vooral als er miljoenen records moeten worden verwerkt. In deze paragraaf kijken we hoe we een database efficiënt optimaliseren, zodat SQL Server snelle query’s blijft uitvoeren zonder prestatiedalingen.✅ Waarom is optimalisatie belangrijk?
✔ Versnelt zoekopdrachten → Vermijdt lange wachttijden bij rapportages.
✔ Minimaliseert opslaggebruik → Zorgt voor efficiëntere data-opslag.
✔ Ondersteunt real-time analyses → Bijvoorbeeld dashboards in Power BI.Wanneer een database groeit, moet SQL Server efficiënter zoeken. Dit doen we door indexen toe te voegen aan belangrijke kolommen.CREATE INDEX idx_leerling ON fact_prestaties (leerling_id);
✅ Hierdoor kan SQL Server snel zoeken naar prestaties van een specifieke leerling.Als een fact-tabel miljoenen rijen bevat, kan SQL Server deze verdelen in kleinere delen.CREATE PARTITION FUNCTION pfSchooljaar(INT) AS RANGE LEFT FOR VALUES (2021, 2022, 2023, 2024);
✅ Hierdoor zoekt SQL Server sneller door alleen in de juiste data-partitie te kijken.Grote datasets kunnen gecomprimeerd worden om minder opslag te gebruiken en sneller geladen te worden.ALTER TABLE fact_prestaties REBUILD WITH (DATA_COMPRESSION = PAGE);
✅ Dit bespaart ruimte en versnelt data-opslag.Sommige SQL-query’s kunnen onnodig traag zijn. We optimaliseren zoekopdrachten door slechts de benodigde kolommen op te halen.SELECT leerling_id, vak_id, gemiddelde_cijfer FROM fact_prestaties WHERE schooljaar = 2024;
✅ Hierdoor verwerken we alleen de relevante cijfers, zonder onnodige kolommen.Wanneer Power BI verbonden is met een grote database, helpen filters en aggregaties de prestaties te verbeteren.✅ Tips voor snelle Power BI dashboards:
✔ Laad alleen noodzakelijke tabellen en kolommen.
✔ Gebruik aggregaties voor samenvattingen in plaats van ruwe data.
✔ Optimaliseer DAX-formules voor snellere berekeningen.✅ Indexen en partitionering versnellen zoekopdrachten in grote datasets.
✅ Datacompressie bespaart opslagruimte en verbetert prestaties.
✅ Efficiënte query’s zorgen ervoor dat alleen relevante gegevens worden opgehaald.
✅ Power BI kan geoptimaliseerd worden voor real-time visualisaties.]]></description><link>11.-datawarehousing/11.8-optimalisatie-van-grote-datasets.html</link><guid isPermaLink="false">11. Datawarehousing/11.8 - Optimalisatie van grote datasets.md</guid><pubDate>Sat, 14 Jun 2025 17:24:12 GMT</pubDate></item><item><title><![CDATA[8.4 - Verschillen tussen sequences en identity columns]]></title><description><![CDATA[In SQL Server kun je zowel sequences als identity columns gebruiken voor automatische nummering van records. Beide methoden genereren unieke waarden, maar er zijn belangrijke verschillen in flexibiliteit, gebruik en beheer.✅ Waarom deze vergelijking?
✔ Bepaal welke methode het beste past bij jouw databaseontwerp.
✔ Begrijp de voor- en nadelen van sequences en identity columns.
✔ Optimaliseer automatische nummering voor meerdere tabellen of specifieke scenario’s.✅ Hier zie je dat sequences meer controle en flexibiliteit bieden, terwijl identity columns eenvoudiger zijn voor individuele tabellen.✔ Wanneer meerdere tabellen dezelfde nummerreeks moeten gebruiken.
✔ Wanneer je een nummering wilt instellen met MINVALUE, MAXVALUE of CYCLE.
✔ Wanneer je de nummering regelmatig wilt resetten.CREATE SEQUENCE order_seq START WITH 1000 INCREMENT BY 10; INSERT INTO bestellingen (bestel_id, klant_id)
VALUES (NEXT VALUE FOR order_seq, 5); INSERT INTO retouren (retour_id, bestel_id)
VALUES (NEXT VALUE FOR order_seq, 1010);
✅ Hier wordt order_seq gebruikt voor zowel bestellingen als retouren, zodat beide tabellen een consistente nummering hebben.✔ Wanneer je een unieke ID nodig hebt binnen één tabel.
✔ Wanneer een ID automatisch moet worden gegenereerd bij een INSERT.
✔ Wanneer je geen extra configuratie wilt instellen.CREATE TABLE klanten ( klant_id INT IDENTITY(1,1) PRIMARY KEY, naam NVARCHAR(100)
); INSERT INTO klanten (naam) VALUES ('Jansen');
✅ Hier wordt klant_id automatisch gegenereerd bij elke nieuwe INSERT.✅ Gebruik sequences als je nummering flexibel wilt beheren over meerdere tabellen.
✅ Gebruik identity columns als je een eenvoudige automatische nummering voor één tabel nodig hebt.
✅ Sequences zijn aanpasbaar met ALTER SEQUENCE, identity columns niet.
✅ Identity columns zijn sneller en eenvoudiger, maar minder flexibel dan sequences.]]></description><link>8.-sequences/8.4-verschillen-tussen-sequences-en-identity-columns.html</link><guid isPermaLink="false">8. Sequences/8.4 - Verschillen tussen sequences en identity columns.md</guid><pubDate>Sat, 14 Jun 2025 13:48:35 GMT</pubDate></item><item><title><![CDATA[8.1 - Inleiding]]></title><description><![CDATA[In SQL Server worden sequences gebruikt om reeksnummers te genereren die vaak worden toegepast bij automatische nummering van records, zoals factuurnummers, ordernummers of unieke ID’s.✅ Waarom sequences gebruiken?
✔ Maakt unieke identificatie mogelijk → Voorkomt dubbele ID’s.
✔ Flexibel en beheersbaar → Je kunt de startwaarde, incrementele stappen en limieten instellen.
✔ Efficiënter dan identity columns in bepaalde situaties → Bijvoorbeeld bij gebruik over meerdere tabellen.✔ Wat is een sequence en waarom wordt het gebruikt?
✔ Hoe maak je een sequence met CREATE SEQUENCE?
✔ Hoe gebruik je een sequence met NEXT VALUE FOR?
✔ Hoe reset je een sequence met ALTER SEQUENCE?
✔ Vergelijking tussen sequences en identity columns✅ Sequences zijn essentieel voor automatisch gegenereerde reeksen zoals ID’s en factuurnummers.
✅ Ze bieden meer flexibiliteit dan identity columns en kunnen in meerdere tabellen worden gebruikt. ]]></description><link>8.-sequences/8.1-inleiding.html</link><guid isPermaLink="false">8. Sequences/8.1 - Inleiding.md</guid><pubDate>Sat, 14 Jun 2025 13:43:07 GMT</pubDate></item><item><title><![CDATA[7.9 - Veelgemaakte fouten]]></title><description><![CDATA[Hoewel SELECT een van de meest gebruikte SQL-commando’s is, worden er vaak fouten gemaakt die de prestaties verminderen, onjuiste gegevens opleveren of tot fouten in de query leiden. Hier bespreken we de meest voorkomende problemen en hoe je ze kunt vermijden.✅ Waarom letten op veelgemaakte fouten?
✔ Voorkom trage zoekopdrachten → Optimaliseer je query’s voor snelheid en efficiëntie.
✔ Haal de juiste gegevens op → Vermijd misinterpretatie van resultaten.
✔ Maak SQL-query’s correct en leesbaar → Voorkom syntaxfouten en verkeerde combinaties.Het gebruik van SELECT * haalt alle kolommen op, wat kan leiden tot trage query’s en onnodige data-opslag.SELECT * FROM klanten;
⚠ Hier worden alle kolommen opgehaald, zelfs als je er maar één nodig hebt!✅ Oplossing:SELECT naam, email FROM klanten;
✅ Hier halen we alleen de relevante kolommen op.Als je WHERE weglaat bij DELETE of UPDATE, pas je de wijziging toe op ALLE rijen, wat rampzalige gevolgen kan hebben.DELETE FROM medewerkers;
⚠ Hier worden ALLE medewerkers verwijderd!DELETE FROM medewerkers WHERE functie = 'Tijdelijk';
✅ Hier verwijderen we alleen tijdelijke medewerkers.Bij het combineren van tabellen met JOIN moet je een duidelijke koppeling maken tussen de tabellen met ON.SELECT klanten.naam, bestellingen.bestel_id
FROM klanten
JOIN bestellingen;
⚠ Hier mist de ON-clausule, waardoor een kruistabel ontstaat met gigantische aantallen records!SELECT klanten.naam, bestellingen.bestel_id
FROM klanten
JOIN bestellingen ON klanten.klant_id = bestellingen.klant_id;
✅ Hier krijgen we alleen relevante matches tussen klanten en bestellingen.Bij GROUP BY moet je aggregatiefuncties gebruiken om zinvolle resultaten te krijgen.SELECT afdeling, salaris
FROM medewerkers
GROUP BY afdeling;
⚠ Hier proberen we salaris op te halen zonder een aggregatiefunctie, wat leidt tot een foutmelding!SELECT afdeling, AVG(salaris) AS gemiddeld_salaris
FROM medewerkers
GROUP BY afdeling;
✅ Hier berekenen we het gemiddelde salaris per afdeling.De HAVING-clausule wordt gebruikt om gegroepeerde resultaten te filteren, maar vereist GROUP BY.SELECT naam, AVG(salaris) AS gemiddeld_salaris
FROM medewerkers
HAVING AVG(salaris) &gt; 3000;
⚠ Hier proberen we HAVING te gebruiken zonder GROUP BY. Dit werkt niet!SELECT functie, AVG(salaris) AS gemiddeld_salaris
FROM medewerkers
GROUP BY functie
HAVING AVG(salaris) &gt; 3000;
✅ Hier filteren we afdelingen met een gemiddeld salaris hoger dan 3000.Soms wordt DISTINCT gebruikt op één kolom, terwijl je unieke combinaties van meerdere kolommen nodig hebt.SELECT DISTINCT stad, land
FROM klanten
ORDER BY naam;
⚠ Hier kan ORDER BY naam leiden tot onverwachte sortering.SELECT DISTINCT stad, land
FROM klanten
ORDER BY stad, land;
✅ Hier krijgen we unieke combinaties van stad en land.✅ Vermijd SELECT * tenzij je echt alle kolommen nodig hebt.
✅ Gebruik altijd WHERE bij DELETE en UPDATE om grote fouten te voorkomen.
✅ Gebruik JOIN correct met een ON-clausule om tabellen goed te koppelen.
✅ Gebruik aggregatiefuncties bij GROUP BY om nuttige resultaten te krijgen.
✅ Gebruik HAVING alleen als er een GROUP BY aanwezig is.
✅ Pas DISTINCT correct toe op meerdere kolommen indien nodig.]]></description><link>7.-select/7.9-veelgemaakte-fouten.html</link><guid isPermaLink="false">7. SELECT/7.9 - Veelgemaakte fouten.md</guid><pubDate>Sat, 14 Jun 2025 13:41:11 GMT</pubDate></item><item><title><![CDATA[7.1 - Inleiding]]></title><description><![CDATA[Het SELECT-statement is een van de meest gebruikte en belangrijkste SQL-commando’s. Het stelt ons in staat om gegevens op te vragen uit tabellen, oftewel: we kunnen zoeken, filteren en presenteren wat er in een database staat.✅ Waarom is SELECT belangrijk?
✔ Data ophalen → Je kunt specifieke kolommen of hele tabellen opvragen.
✔ Zoeken en filteren → Gebruik WHERE om alleen de gegevens te krijgen die je nodig hebt.
✔ Sorteren en groeperen → Met ORDER BY en GROUP BY kun je resultaten overzichtelijk maken.
✔ Gegevens combineren → Je kunt meerdere tabellen samenvoegen met JOIN.✔ Basisgebruik van SELECT → Hoe vraag je gegevens op?
✔ Filters met WHERE → Hoe haal je alleen de relevante data?
✔ Sorteren met ORDER BY → Hoe toon je resultaten in een logische volgorde?
✔ Gegevens groeperen met GROUP BY → Hoe analyseer je data per categorie?
✔ Tabellen combineren met JOIN → Hoe verbind je data uit meerdere tabellen?
✔ Aggregatiefuncties (COUNT, SUM, AVG) → Hoe kun je berekeningen maken op datasets?✅ Het SELECT-statement is de kern van SQL-query's en laat je data opvragen uit tabellen.
✅ Je kunt gegevens filteren, sorteren, groeperen en combineren met verschillende opties.
✅ Dit hoofdstuk behandelt alle manieren om SELECT effectief te gebruiken!]]></description><link>7.-select/7.1-inleiding.html</link><guid isPermaLink="false">7. SELECT/7.1 - Inleiding.md</guid><pubDate>Sat, 14 Jun 2025 13:13:57 GMT</pubDate></item><item><title><![CDATA[2.3 - Databasegericht informatiesysteem]]></title><description><![CDATA[In deze paragraaf bekijken we hoe meneer Maes overstapt van een bestandsgericht naar een databasegericht informatiesysteem.✅ Waarom overstappen naar een database?
Vervangt losse bestanden door één centrale database.
Beide afdelingen kunnen tegelijkertijd gegevens raadplegen en bewerken.
Optimalisatie door normalisatie (een techniek voor efficiënte gegevensopslag).
✅ Nieuwe database met gedeelde tabellen voor beide afdelingen✅ Alle gegevens zijn gecentraliseerd en gekoppeld binnen de database.✅ Door over te stappen naar een database profiteert meneer Maes van de volgende voordelen:✅ Een databasegerichte benadering vervangt inefficiënte bestandsopslag door een gestructureerde centrale database.
✅ Beide afdelingen kunnen simultaan werken met dezelfde gegevens.
✅ Gestructureerde dataopslag voorkomt inconsistenties en verbetert efficiëntie.
✅ Beveiliging en toegangsrechten maken datamanagement veiliger en flexibeler.]]></description><link>2.-informatiesystemen/2.3-databasegericht-informatiesysteem.html</link><guid isPermaLink="false">2. Informatiesystemen/2.3 - Databasegericht informatiesysteem.md</guid><pubDate>Sat, 14 Jun 2025 06:49:48 GMT</pubDate></item><item><title><![CDATA[2.2 - Bestandsgericht informatiesysteem]]></title><description><![CDATA[Een bestandsgericht informatiesysteem is een methode waarbij gegevens worden beheerd en opgeslagen in losse bestanden, zoals Excel-documenten, tekstbestanden of fysieke fichebakken.✅ Waarom kiezen sommige bedrijven voor een bestandsgericht systeem?
Eenvoudig te implementeren → Geen geavanceerde database nodig.
Geschikt voor kleine bedrijven → Werkt goed bij een beperkt aantal klanten en gegevens.
✅ Een kleine eenmanszaak die appartementen en villa’s verhuurt.✅ Werkt goed bij een beperkte administratie, maar wordt problematisch bij groei.✅ Zodra een bedrijf groeit, ontstaan er problemen.✅ Een databasegericht systeem biedt oplossingen voor de problemen van een bestandsgericht informatiesysteem.
Alle gegevens worden gecentraliseerd opgeslagen, waardoor duplicatie wordt voorkomen.
Updates worden direct in de database verwerkt en zijn overal correct zichtbaar.
Efficiënter beheer van gegevens via SQL.
✅ Bestandsgerichte informatiesystemen zijn eenvoudig, maar beperkt in schaalbaarheid.
✅ Bij groei ontstaan problemen zoals redundantie en inconsistenties.
✅ Een databasegericht systeem lost deze problemen op en biedt efficiënter gegevensbeheer.]]></description><link>2.-informatiesystemen/2.2-bestandsgericht-informatiesysteem.html</link><guid isPermaLink="false">2. Informatiesystemen/2.2 - Bestandsgericht informatiesysteem.md</guid><pubDate>Sat, 14 Jun 2025 06:46:25 GMT</pubDate></item><item><title><![CDATA[2.1 - Inleiding]]></title><description><![CDATA[Een informatiesysteem is een structuur waarin gegevens worden bijgehouden, opgeslagen en beheerd voor latere raadpleging.✅ Een database is een type informatiesysteem waarin gegevens worden gestructureerd opgeslagen in tabellen.
Voorbeeld: Een bibliotheek gebruikt een database om leden en boeken te beheren.
Een relationele database koppelt tabellen, zodat gegevens efficiënt kunnen worden opgehaald.
✅ Er zijn verschillende manieren om gegevens op te slaan en te raadplegen.✅ Voorbeeld:
Een papieren archief (bestandsgericht) bevat fiches met klantgegevens.
Een relationele database (databasegericht) koppelt klantgegevens aan bestellingen en betalingen.
✅ Een informatiesysteem hoeft niet per se digitaal te zijn.
Papieren archieven en fichebakken worden nog steeds gebruikt in sommige bedrijven.
Digitale databases bieden snellere en efficiëntere gegevensverwerking.
✅ Een database is een gestructureerde manier om gegevens op te slaan binnen een informatiesysteem.
✅ We onderzoeken de bestandsgerichte en databasegerichte benaderingen van informatiesystemen.
✅ Digitale databases maken het makkelijker om gegevens te koppelen en op te vragen.]]></description><link>2.-informatiesystemen/2.1-inleiding.html</link><guid isPermaLink="false">2. Informatiesystemen/2.1 - Inleiding.md</guid><pubDate>Sat, 14 Jun 2025 06:45:01 GMT</pubDate></item></channel></rss>