Bijlage A — Berekende Attributen

Belangrijk

Je leest de versie die nog in ontwikkeling is. Dit hoofdstuk is nog een concept; er kan nog veel veranderen.

Het dilemma

Bij het ontwerpen van een database kom je attributen tegen waarvan de waarde je kunt berekenen uit andere velden. Denk aan:

De vraag is of je deze berekende waarden moet opslaan in de database of niet. Hierop is geen simpel antwoord te geven. Het hangt van het type gegeven en van de situatie af.

Volgens strikte normalisatieregels moet je geen berekende velden in een database opslaan omdat je de waarde immers kunt laten berekenen wanneer je deze nodig hebt.

Maar de praktijk wijkt af

In de praktijk kunnen er goede redenen zijn om berekende waarden wel op te slaan. Wat zijn de problemen?

  1. Historische prijzen (belangrijkste reden!)
    Stel een laptop kost vandaag €799 en een klant bestelt en betaalt 1 laptop. Wanneer een maand later de prijs verhoogd wordt naar €899 dan is er een probleem wanneer Subtotaal niet in de database wordt opgeslagen, maar berekend wordt. Bij de maand eerder gekochte laptop staat dan het berekende bedrag Aantal * Prijs = 1 * 899 = 899. En dit is fout want de klant heeft maar €799 betaald.

  2. Kortingen en aanbiedingen
    Stel een product kost normaal €50, maar de klant krijgt 20% korting.

Wanneer moet je WEL en wanneer NIET opslaan

NIET opslaan wanneer:

WEL opslaan wanneer:

TipVuistregels voor je ontwerp

Sla berekende waarden OP wanneer:

  • ✅ Het gaat om geld (prijzen, bedragen, kortingen)
  • ✅ Het is een transactie of gebeurtenis (bestelling, betaling, boeking)
  • ✅ De onderliggende waarden kunnen veranderen (prijzen, tarieven)
  • ✅ Je een “snapshot van dat moment” wilt bewaren

Sla berekende waarden NIET OP wanneer:

  • ❌ De waarde continu verandert (leeftijd, voorraad)
  • ❌ Het altijd uit actuele data berekend kan worden
  • ❌ Er geen financiële of historische component is
  • ❌ De onderliggende data permanent is