DATA ARCHITECTUREStructure

Normalization & Denormalization

How data engineers design data that lasts — pick a topic on the left and its full breakdown loads here: the mental model, ERDs and worked schemas, trade-offs, edge cases, and the decisions that separate a durable model from a fragile one.

18 min readTopics chapter readerLevel · Foundations
01 · Orientation

What You'll Master Here

One independently changeable fact, one source of truth. Denormalize only an owned read path with refresh and staleness rules.

4 min · Topic 1 of 12

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.

Core mental model

One independently changeable fact, one source of truth. Denormalize only an owned read path with refresh and staleness rules.

Why it matters

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.
The whole chapter, on two salesOrder o100 and order o101 each bought one Coffee Grinder for 80.00.
wide_order_lines
order_idpkline_nopkproduct_namecategory_nameqtyunit_price
o1001Coffee GrinderKitchen180.00
o1011Coffee GrinderKitchen180.00
Two sales, four copies of two factsThe product name and the category name are repeated on every line that happens to mention them. Nothing stops line 2 from spelling either one differently, and a rename has to find every copy.
Where this stage is taught:
Common mistake

Splitting tables mechanically without checking workload. Unnecessary joins replace a clear source model.

Better habit

Write dependency arrows before moving columns.

Test update, insert, and delete scenarios.

Name the owner of every duplicated field.

What to say

I normalize independently changing facts, then denormalize only a measured read path with an explicit owner and refresh rule.

Remember this

Normalization protects truth; denormalization serves proven reads.