
Database Normalization
Normalization is the process of organizing data in a database to minimize redundancy and eliminate undesirable characteristics like insertion, update, and deletion anomalies.
6 min read
Updated
June 30, 2026
Normalization is the process of organizing data in a database to minimize redundancy and eliminate undesirable characteristics like insertion, update, and deletion anomalies.
Normalization helps in:
- Breaks table into smaller, related tables.
- Eliminates insert, update, delete anomalies.
- Make data consistent, reliable, and scalable.
1. First Normal Forms (1NF)
- Using row order to convey the information is not permitted
- Mixing the datatypes within the same columns is not permitted
- Having a table without primary key is not permitted
- Repeating the item or groups within same row is not permitted
Before 1NF Player Inventory
| player_id | inventory |
|---|---|
| 1 | 2 amulets, 4 rings |
| 2 | 30 copper coins |
| 3 | 3 shields, 18 gold coins, 7 rings |
Improved 1NF Player Inventory
| player_id | item_type | item_quantity |
|---|---|---|
| 1 | amulets | 2 |
| 1 | rings | 4 |
| 2 | copper coins | 30 |
| 3 | shields | 3 |
| 3 | gold coins | 18 |
| 3 | rings | 7 |
🔑 Primary key → player_id ****+ item_type
2. Second Normal Forms (2NF):
Every non-key attribute in the table should depend on the entire primary key (applies when composite key exists)
Before 2NF Player Inventory
| player_id | item_type | item_quantity | player_rating |
|---|---|---|---|
| 1 | amulets | 2 | intermediate |
| 1 | rings | 4 | intermediate |
| 2 | copper coins | 30 | beginner |
| 3 | shields | 3 | advanced |
| 3 | gold coins | 18 | advanced |
| 3 | rings | 7 | advanced |
Improved 1NF Player Inventory
Player
| player_id | player_rating |
|---|---|
| 1 | intermediate |
| 2 | beginner |
| 3 | advanced |
| 4 | beginner |
Player Inventory
| player_id | item_type | item_quantity |
|---|---|---|
| 1 | amulets | 2 |
| 1 | rings | 4 |
| 2 | copper coins | 30 |
| 3 | shields | 3 |
| 3 | gold coins | 18 |
| 3 | rings | 7 |
3. Third Normal Forms (3NF):
Every non-key attribute in the table should depend on the key, the whole key or nothing but a key. Remove transitive dependency
Before 3NF Player
| player_id | player_rating | player_skill_level |
|---|---|---|
| 1 | intermediate | 4 |
| 2 | beginner | 3 |
| 3 | advanced | 8 |
| 4 | beginner | 1 |
Dependency Flow
Player_Id → Player_Skill_Level
Player_Id → Player_Skill_Level → Player_Rating Transitive Dependency
Improved 3NF
Player
| player_id | player_skill_level |
|---|---|
| 1 | 4 |
| 2 | 3 |
| 3 | 8 |
| 4 | 1 |
Player_Skill_Level
| player_skill_level | player_rating |
|---|---|
| 1 | beginner |
| 2 | beginner |
| 3 | beginner |
| 4 | intermediate |
| 5 | intermediate |
| 6 | intermediate |
| 7 | advanced |
| 8 | advanced |
| 9 | advanced |
4. Fourth Normal Forms (4NF):
Multivalued dependencies in a table must be multivalued dependencies on the key
Before 4NF Model_Colors_And_Styles_Available
| model | color | style |
|---|---|---|
| tweety | yellow | duplex |
| tweety | yellow | bungalow |
| tweety | blue | duplex |
| metro | grey | high-rise |
| metro | brown | high-rise |
| metro | brown | modular |
Improved 4NF
Model_Colors_Available
| model | color |
|---|---|
| tweety | yellow |
| tweety | blue |
| metro | brown |
| metro | grey |
Model_Styles_Available
| model | style |
|---|---|
| tweety | duplex |
| tweety | bungalow |
| metro | high-rise |
| metro | modular |
5. Third Normal Forms (5NF):
5NF removes redundancy caused by complex join dependencies. A table should be split into smaller tables if it can be perfectly reconstructed by joining them together.