What if one small change could save you hours of fixing messy data?
Why Third Normal Form (3NF) in SQL? - Purpose & Use Cases
Imagine you keep all your customer orders in one big spreadsheet. Each row has customer info, order details, and product info all mixed together.
When you update a customer's address, you have to change it in many rows. This is slow and easy to forget, causing mistakes and inconsistent data.
Third Normal Form organizes data into separate tables so each fact is stored only once. This stops repeated info and keeps your data clean and easy to update.
INSERT INTO orders (customer_name, customer_address, product_name, order_date) VALUES ('Alice', '123 Main St', 'Book', '2024-06-01');
INSERT INTO customers (customer_id, name, address) VALUES (1, 'Alice', '123 Main St'); INSERT INTO products (product_id, name) VALUES (10, 'Book'); INSERT INTO orders (order_id, customer_id, product_id, order_date) VALUES (100, 1, 10, '2024-06-01');
It makes your database reliable and easy to maintain, so you can trust your data and save time updating it.
A store uses 3NF to keep customer info, products, and orders in separate tables. When a customer moves, they update the address once, and all orders reflect the change automatically.
3NF removes repeated data by splitting tables.
It prevents errors from inconsistent updates.
It keeps your database clean and efficient.
Practice
Solution
Step 1: Understand 3NF definition
3NF requires that non-key columns depend only on the primary key, not on other non-key columns.Step 2: Evaluate options
Every non-key column depends only on the primary key. correctly states this. The other options are incorrect descriptions of 3NF.Final Answer:
Every non-key column depends only on the primary key. -> Option AQuick Check:
3NF = Non-key columns depend only on primary key [OK]
- Confusing 3NF with limiting number of columns
- Thinking all columns must be unique
- Believing 3NF means one big table
Solution
Step 1: Identify 3NF compliance in table design
3NF requires separating data so non-key columns do not depend on other non-key columns. CustomerName depends on CustomerID, so it should be in a separate table.Step 2: Analyze options
CREATE TABLE Orders (OrderID INT PRIMARY KEY, CustomerID INT); CREATE TABLE Customers (CustomerID INT PRIMARY KEY, CustomerName VARCHAR(50)); splits Orders and Customers, following 3NF. CREATE TABLE Orders (OrderID INT PRIMARY KEY, CustomerID INT, CustomerName VARCHAR(50)); stores CustomerName in Orders, violating 3NF. The other options miss primary keys or mix data improperly.Final Answer:
CREATE TABLE Orders (OrderID INT PRIMARY KEY, CustomerID INT); CREATE TABLE Customers (CustomerID INT PRIMARY KEY, CustomerName VARCHAR(50)); -> Option CQuick Check:
Separate related data into tables = 3NF [OK]
- Putting dependent data in the same table
- Missing primary keys
- Ignoring data duplication issues
EmployeeID | EmployeeName | Department | DepartmentHeadWhat is the main reason this table violates 3NF?
Solution
Step 1: Identify dependencies in the table
DepartmentHead depends on Department, which is a non-key column, not on the primary key EmployeeID.Step 2: Check 3NF rules
3NF requires no non-key column depends on another non-key column. Here, DepartmentHead depends on Department, violating 3NF.Final Answer:
DepartmentHead depends on Department, not EmployeeID. -> Option AQuick Check:
Non-key depends on non-key = violates 3NF [OK]
- Thinking EmployeeName dependency breaks 3NF
- Assuming EmployeeID is not unique
- Confusing primary key with foreign key
StudentID | StudentName | Advisor | AdvisorOfficeThis table violates 3NF. What is the best way to fix it?
Solution
Step 1: Identify the 3NF violation
AdvisorOffice depends on Advisor, a non-key column, causing a transitive dependency violating 3NF.Step 2: Fix by separating dependent data
Creating a separate Advisor table with Advisor and AdvisorOffice removes the transitive dependency.Final Answer:
Create a separate Advisor table with Advisor and AdvisorOffice. -> Option BQuick Check:
Separate dependent data into own table to fix 3NF [OK]
- Just removing columns without restructuring
- Changing primary keys incorrectly
- Adding foreign keys without normalization
InvoiceID | ProductID | ProductName | SupplierID | SupplierNameTo convert this table into Third Normal Form (3NF), which of the following is the best approach?
Solution
Step 1: Identify transitive dependencies
ProductName depends on ProductID, and SupplierName depends on SupplierID, both non-key columns, causing 3NF violation.Step 2: Normalize by splitting tables
Creating separate Product and Supplier tables linked by IDs removes these dependencies and achieves 3NF.Final Answer:
Create separate tables for Products and Suppliers, linking them by IDs. -> Option DQuick Check:
Split related entities into tables to achieve 3NF [OK]
- Trying to keep all data in one table
- Using names as primary keys
- Removing columns without restructuring
Ready to prove it?
Pass the test and this pattern moves unknown
