What is database normalization? 1NF, 2NF and 3NF in plain English

Normalization sounds like heavy theory. It is really one habit, applied three times: store each fact in exactly one place.

Published 2026-09-04 · by M.R. Sterling

Normalization is where a lot of database courses lose people, because it is taught as a wall of rules with names like "third normal form". Underneath the names is a single, sensible idea: every fact should live in one place, so there is never a second copy to disagree with it.

Get that idea and the three forms stop being rules to memorise and start being obvious.

The problem normalization solves

Imagine one wide table where each row is a visit, and each row also repeats the patient's name, address and phone number. The patient moves house. Now their new address is correct in some rows and wrong in others, because the data lived in many places and only some got updated. That disagreement is the whole disease. Normalization is the cure.

First normal form: one value per box

A table is in first normal form when every cell holds a single value, not a list. No "allergies" column stuffed with three allergies separated by commas. No repeating columns like phone1, phone2, phone3.

If a box holds a list, you cannot search or count it cleanly, and you have capped how many items a row can hold. The fix is to move the repeating thing into its own table with one row per item.

Second normal form: no half-dependent facts

Second normal form matters when a table's identity is made of two columns together, say a visit that is identified by a patient and a date. The rule: every other column must depend on the whole of that identity, not just part of it.

The patient's home address depends only on the patient, not on the visit date, so it does not belong in the visit table. It belongs with the patient. Facts that depend on only part of the key get moved to the table where that part is the whole key.

Third normal form: no facts about facts

Third normal form removes columns that describe another column rather than the row itself. If a visit row stores a department code and also the department's name, the name is really a fact about the department, not about the visit. Store the name once in a department table and let the visit point to it.

A tidy way to remember all three, sometimes said as the coder's oath: every non-key column depends on the key, the whole key, and nothing but the key.

When to stop, and when to bend

Third normal form is the sensible stopping point for most real databases. Higher forms exist, but past 3NF you are usually chasing edge cases. And there are times, mostly in reporting systems built for speed, when people deliberately keep a copy of some data to avoid a join. That is a considered trade, not an excuse to skip the thinking.

Where to go next

Normalization is a skill you build by doing, not by reading definitions, because the rules only click once you have refactored a messy table yourself. Normalization Without Tears walks through it gently with health-data examples, and Normalization I: 1NF, 2NF & 3NF covers the same ground in more depth.

Books that go deeper

More articles

One email when a new book lands

No schedule, no filler. Just the new titles and the odd free chapter.