What You'll Master Here
One independently changeable fact, one source of truth. Denormalize only an owned read path with refresh and staleness rules.
Normalization is not an exam ritual. It puts each independently changing fact in one authoritative place so writes cannot quietly contradict each other.
Step through the three stages below — the same two sales as one wide table, as a normalized source, and as an owned read model. Everything else in this chapter is the reasoning that moves between them.
One independently changeable fact, one source of truth. Denormalize only an owned read path with refresh and staleness rules.
Duplicated facts eventually drift. A schema should protect truth instead of asking every writer to remember every copy.
- functional dependency
- X -> Y means X determines one Y in the modeled business domain.
- determinant
- The left side of a dependency, such as product_id in product_id -> product_name.
- anomaly
- A write failure caused by storing independent facts together.
| order_idpk | line_nopk | product_name | category_name | qty | unit_price |
|---|---|---|---|---|---|
| o100 | 1 | Coffee Grinder | Kitchen | 1 | 80.00 |
| o101 | 1 | Coffee Grinder | Kitchen | 1 | 80.00 |
Splitting tables mechanically without checking workload. Unnecessary joins replace a clear source model.
Write dependency arrows before moving columns.
Test update, insert, and delete scenarios.
Name the owner of every duplicated field.
I normalize independently changing facts, then denormalize only a measured read path with an explicit owner and refresh rule.
Normalization protects truth; denormalization serves proven reads.
