Structuring a relational database to eliminate redundancy by storing each fact in exactly one place and referencing it by key everywhere else.
In practice: Over-normalization can hurt read performance โ every query becomes a multi-table join. Denormalizing selectively (storing a derived value you query frequently) is a legitimate tradeoff, not a failure.