Script Valley
Database Design: From Idea to Schema
Normalization: Removing RedundancyLesson 2.3

Second Normal Form (2NF): eliminating partial dependencies

2NF definition, partial dependency, composite primary key, functional dependency, 2NF violation detection, 2NF conversion example

Second Normal Form

2NF Partial Dependency

Second Normal Form (2NF) builds on 1NF: every non-key column must depend on the entire primary key, not just part of it. 2NF violations only appear in tables with composite primary keys.

Detecting the Violation

Consider an order_items table with PK (order_id, product_id):

-- Violates 2NF
CREATE TABLE order_items_bad (
  order_id     INT,
  product_id   INT,
  quantity     INT,
  product_name VARCHAR(100),  -- depends only on product_id
  unit_price   DECIMAL(10,2), -- depends only on product_id
  PRIMARY KEY (order_id, product_id)
);

product_name and unit_price depend only on product_id, not on the full key. If a product's name changes, you update hundreds of order rows.

The Fix

-- Satisfies 2NF
CREATE TABLE order_items (
  order_id   INT,
  product_id INT,
  quantity   INT NOT NULL,
  PRIMARY KEY (order_id, product_id),
  FOREIGN KEY (product_id) REFERENCES products(product_id)
);

CREATE TABLE products (
  product_id   INT PRIMARY KEY AUTO_INCREMENT,
  product_name VARCHAR(100) NOT NULL,
  unit_price   DECIMAL(10,2) NOT NULL
);

Each non-key column now lives in the table whose PK it fully depends on.

Up next

Third Normal Form (3NF): eliminating transitive dependencies

Sign in to track progress