Compare

Side-by-side on the decisions that recur: index vs scan, normalize vs denormalize, optimistic vs pessimistic, partition vs shard, and more — with when to choose each.

NormalizeDenormalize
Optimises forWrite correctness — each fact stored onceRead speed — a value pre-computed or duplicated
AnomaliesRemoves update/insert/delete anomaliesReintroduces them; needs active maintenance
ReadsJoins to assemble dataFewer joins, sometimes none
CostJoin cost on hot read pathsA write path, a drift check, and a repair per copy
RuleThe default for the system of recordAdd a copy for a specific slow read — never un-normalise the source
Choose this whenThe source of truth for anything that gets updated. Start here.A specific read far more frequent than its invalidating writes, once a well-indexed query is still too slow — and you can maintain the copy.