Labs ICT
⭐ Pro Login

Normalization Examples

Step-by-step normalization of real-world schemas.

Normalization in Practice

Let's walk through normalizing a real-world example step by step.

Example: Online Store


  UNNORMALIZED: Orders Table
  β”Œβ”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚Orderβ”‚Customerβ”‚Products             β”‚Quantitiesβ”‚ Total     β”‚
  β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
  β”‚ 1   β”‚ Alice  β”‚ Phone, Charger      β”‚ 1, 2    β”‚ 600       β”‚
  β”‚ 2   β”‚ Bob    β”‚ Laptop              β”‚ 1       β”‚ 1200      β”‚
  β”‚ 3   β”‚ Alice  β”‚ Keyboard, Mouse     β”‚ 1, 3    β”‚ 130       β”‚
  β””β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Step 1: Convert to 1NF


  1NF: Atomic values, no repeating groups
  β”Œβ”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚Orderβ”‚Customerβ”‚ Product  β”‚ Qty   β”‚ Price  β”‚
  β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€
  β”‚ 1   β”‚ Alice  β”‚ Phone    β”‚ 1     β”‚ 500    β”‚
  β”‚ 1   β”‚ Alice  β”‚ Charger  β”‚ 2     β”‚ 50     β”‚
  β”‚ 2   β”‚ Bob    β”‚ Laptop   β”‚ 1     β”‚ 1200   β”‚
  β”‚ 3   β”‚ Alice  β”‚ Keyboard β”‚ 1     β”‚ 100    β”‚
  β”‚ 3   β”‚ Alice  β”‚ Mouse    β”‚ 3     β”‚ 10     β”‚
  β””β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Step 2: Convert to 2NF


  2NF: Remove partial dependencies (PK = OrderID + Product)

  Orders                OrderItems              Products
  β”Œβ”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”
  β”‚ ID  β”‚Customerβ”‚     β”‚Orderβ”‚Product  β”‚ Qty β”‚  β”‚ Name    β”‚Price β”‚
  β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€     β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€
  β”‚ 1   β”‚ Alice  β”‚     β”‚ 1   β”‚ Phone   β”‚ 1   β”‚  β”‚ Phone   β”‚ 500  β”‚
  β”‚ 2   β”‚ Bob    β”‚     β”‚ 1   β”‚ Charger β”‚ 2   β”‚  β”‚ Charger β”‚ 50   β”‚
  β”‚ 3   β”‚ Alice  β”‚     β”‚ 2   β”‚ Laptop  β”‚ 1   β”‚  β”‚ Laptop  β”‚ 1200 β”‚
  β””β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚ 3   β”‚ Keyboardβ”‚ 1   β”‚  β”‚ Keyboardβ”‚ 100  β”‚
                       β”‚ 3   β”‚ Mouse   β”‚ 3   β”‚  β”‚ Mouse   β”‚ 10   β”‚
                       β””β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”˜

Step 3: Convert to 3NF


  3NF: Remove transitive dependencies

  If Customers has CustomerID β†’ CustomerName β†’ CustomerCity β†’ CityZip

  Fix: Separate Customers and Cities tables

  Customers           Orders            OrderItems          Products
  β”Œβ”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”
  β”‚ ID β”‚ Name β”‚City β”‚ β”‚ ID β”‚Cust β”‚    β”‚Orderβ”‚Prod  β”‚Qtyβ”‚ β”‚ ID β”‚Name β”‚
  β”œβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€ β”œβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€    β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€ β”œβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
  β”‚ 1  β”‚Alice β”‚ NYC β”‚ β”‚ 1  β”‚ 1   β”‚    β”‚ 1   β”‚Phone β”‚ 1 β”‚ β”‚ 1  β”‚Phoneβ”‚
  β”‚ 2  β”‚Bob   β”‚ LA  β”‚ β”‚ 2  β”‚ 2   β”‚    β”‚ 1   β”‚Charg β”‚ 2 β”‚ β”‚ 2  β”‚Laptopβ”‚
  β””β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”˜ β”‚ 3  β”‚ 1   β”‚    β”‚ 2   β”‚Laptopβ”‚ 1 β”‚ β””β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”˜
                      β””β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”˜    β”‚ 3   β”‚Keybd β”‚ 1 β”‚
                                      β”‚ 3   β”‚Mouse β”‚ 3 β”‚
                                      β””β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”˜