Labs ICT
โญ Pro Login

First Normal Form (1NF)

Atomic values and eliminating repeating groups.

First Normal Form (1NF)

A table is in 1NF if every column contains only atomic (indivisible) values and there are no repeating groups. Each cell must hold a single value, not a list or set.

Violation of 1NF


  NOT in 1NF: Repeating groups
  โ”Œโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
  โ”‚ ID โ”‚ Name    โ”‚ Courses                  โ”‚
  โ”œโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
  โ”‚ 1  โ”‚ Alice   โ”‚ Databases, Networking    โ”‚
  โ”‚ 2  โ”‚ Bob     โ”‚ Databases, OS            โ”‚
  โ””โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

  Problems:
  โ€ข "Databases, Networking" is NOT atomic โ€” it's two values in one cell
  โ€ข Can't query efficiently: WHERE Courses = 'Databases'
  โ€ข Can't index individual courses

Converting to 1NF


  IN 1NF: One value per cell

  Option 1: Separate rows
  โ”Œโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
  โ”‚ ID โ”‚ Name    โ”‚ Course     โ”‚
  โ”œโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
  โ”‚ 1  โ”‚ Alice   โ”‚ Databases  โ”‚
  โ”‚ 1  โ”‚ Alice   โ”‚ Networking โ”‚
  โ”‚ 2  โ”‚ Bob     โ”‚ Databases  โ”‚
  โ”‚ 2  โ”‚ Bob     โ”‚ OS         โ”‚
  โ””โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

  Option 2: Separate tables (better โ€” fully normalized)
  Students              Enrollments           Courses
  โ”Œโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
  โ”‚ ID โ”‚ Name    โ”‚     โ”‚SID โ”‚CrsID    โ”‚     โ”‚ ID โ”‚ Title  โ”‚
  โ”œโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค     โ”œโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค     โ”œโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
  โ”‚ 1  โ”‚ Alice   โ”‚     โ”‚ 1  โ”‚ 101     โ”‚     โ”‚101 โ”‚ DB     โ”‚
  โ”‚ 2  โ”‚ Bob     โ”‚     โ”‚ 1  โ”‚ 102     โ”‚     โ”‚102 โ”‚ Net    โ”‚
  โ””โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ”‚ 2  โ”‚ 101     โ”‚     โ”‚103 โ”‚ OS     โ”‚
                       โ”‚ 2  โ”‚ 103     โ”‚     โ””โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                       โ””โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Rules for 1NF

  • Each column must contain atomic values (no lists, no sets).
  • Each row must be unique (have a primary key).
  • Each column must contain values of a single type.
  • Column names must be unique within the table.

๐Ÿงช Quick Quiz

What does 1NF (First Normal Form) require?