Modelleren: wanneer JSONB normalisatie overtreft
Beslis tussen een JSONB-kolom en een aparte tabel — flexibele attributen versus strikte schema's.
Modelleren: wanneer JSONB normalisatie overtreft is een gratis SQL Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject SQL Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus SQL Academy bevat in totaal 4 lessen.
De keuze
Voor elk gegeven dat je mogelijk opslaat: een kolom of een JSONB-sleutel? Het antwoord bepaalt het databaseschema, de queryprestaties en de onderhoudbaarheid.
Wanneer kolommen de beste keuze zijn
Gebruik echte kolommen wanneer gegevens:
- Bekend en stabiel zijn
- Vaak met indexen worden opgevraagd
- Door CHECK- of FK-beperkingen worden gevalideerd
- In rapporten worden gebruikt of worden gekoppeld
Wanneer JSONB de beste keuze is
Gebruik JSONB wanneer:
- De structuur per rij varieert (velden die per tenant worden gedefinieerd, metagegevens van plug-ins)
- Het schema snel verandert (zodat je migraties vermijdt)
- Volledige documenten doorgaans worden gelezen en geschreven
- Je ondoorzichtige gegevens opslaat (webhook-teksten)
Het hybride patroon
Het beste van beide: gestructureerde kolommen voor de stabiele kern, JSONB voor het variabele uiteinde:
CREATE TABLE events (
id BIGSERIAL PRIMARY KEY,
ts TIMESTAMPTZ NOT NULL,
event_type TEXT NOT NULL,
user_id BIGINT,
data JSONB NOT NULL DEFAULT '{}'::JSONB
);EAV-valkuil
Het klassieke model voor "entiteit-attribuut-waarde" — één tabel met rijen van (sleutel, waarde) — was vroeger de enige keuze voor schaarse gegevens. JSONB vervangt EAV door één documentkolom:
-- Old EAV:
CREATE TABLE user_attrs (
user_id BIGINT,
attr TEXT,
val TEXT
);
-- Modern:
ALTER TABLE users ADD COLUMN attrs JSONB NOT NULL DEFAULT '{}';
-- JSONB queries are faster and easier than the EAV joins.Migratiestrategie
Een kolom toevoegen aan een druk gebruikte tabel → 5 minuten uitvaltijd bij een grote tabel. Met JSONB is een veld toevoegen alleen een wijziging in de applicatiecode.
Beperkingen op JSONB
Voeg CHECK-beperkingen toe om een minimale structuur af te dwingen:
ALTER TABLE events
ADD CONSTRAINT data_has_type CHECK (data ? 'type'),
ADD CONSTRAINT type_is_string CHECK (jsonb_typeof(data->'type') = 'string');Veelgebruikte velden promoveren
Als een JSONB-veld vaak wordt opgevraagd, verplaats het dan naar een echte kolom. Met een UPDATE-script, een nieuwe index en een nieuwe kolom wordt het snel.
JSONB-bewerkingen voor patches
Werk één veld bij:
UPDATE users
SET attrs = jsonb_set(attrs, '{plan}', '"pro"')
WHERE id = 1;Sla geen geld op in JSONB
Financiële waarden hebben exacte NUMERIC-typen en beperkingen nodig. Gebruik altijd echte kolommen.
Wanneer JSONB nadelig is
Als je in elke query dezelfde JSONB-sleutel extraheert en converteert, is dat een teken dat de sleutel een kolom zou moeten zijn. De cumulatieve kosten van (data->>'k')::INT over miljoenen rijen lopen snel op.
Schemadocumentatie
JSONB-kolommen zijn eenvoudig te beschrijven, maar moeilijk te documenteren. Houd een extern schema bij (JSON Schema, applicatiecode), zodat collega's weten wat ze kunnen verwachten.
Samenvatting
JSONB is een krachtig hulpmiddel — gebruik het voor de variabele delen en echte kolommen voor de stabiele kern. Verplaats veelgebruikte velden naar kolommen zodra zich vaste patronen aftekenen.
Snelle controle
Je slaat controlegebeurtenissen op. Het gebeurtenistype is altijd aanwezig; sommige gebeurtenissen hebben een array met "actors" waarvan de vorm varieert. Hoe modelleer je dit?
Leer SQL met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 46
- Lessen
- 183
Veelgestelde vragen
Is de les “Modelleren: wanneer JSONB normalisatie overtreft” gratis?
Ja — de volledige tekst van “Modelleren: wanneer JSONB normalisatie overtreft” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus SQL Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus SQL Academy bevat in totaal 4 lessen.
Wat leer ik in “Modelleren: wanneer JSONB normalisatie overtreft”?
Beslis tussen een JSONB-kolom en een aparte tabel — flexibele attributen versus strikte schema's. Je oefent met SQL Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met SQL Academy te beginnen?
Ervaring vooraf is niet nodig. SQL Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.
Hoe lang duurt de les “Modelleren: wanneer JSONB normalisatie overtreft”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over SQL Academy?
Ja. Elke les over SQL Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- JSONB versus JSON: wanneer gebruikt u welke?
- Padoperatoren: -> ->> @>
- JSONB indexeren met GIN
- Modelleren: wanneer JSONB normalisatie overtreft