Bird
Raised Fist0
SQLquery~20 mins

Second Normal Form (2NF) in SQL - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
2NF Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ query_result
intermediate
2:00remaining
Identify partial dependency violation in 2NF

Consider a table Orders with columns: OrderID, ProductID, ProductName, Quantity. The primary key is a composite key of (OrderID, ProductID).

Which column violates the Second Normal Form (2NF) by having a partial dependency?

SQL
CREATE TABLE Orders (
  OrderID INT,
  ProductID INT,
  ProductName VARCHAR(100),
  Quantity INT,
  PRIMARY KEY (OrderID, ProductID)
);
AProductName
BQuantity
COrderID
DProductID
Attempts:
2 left
💡 Hint

Think about which column depends only on part of the composite key.

🧠 Conceptual
intermediate
1:30remaining
Understanding 2NF requirements

Which of the following statements correctly describes the requirement for a table to be in Second Normal Form (2NF)?

AIt must have a single-column primary key.
BIt must have no transitive dependency on any non-key attribute.
CIt must have no partial dependency on any candidate key.
DIt must have no duplicate rows.
Attempts:
2 left
💡 Hint

2NF focuses on dependencies related to composite keys.

❓ schema
advanced
2:30remaining
Decompose table to achieve 2NF

Given the table StudentCourses with columns StudentID, CourseID, StudentName, CourseName, and composite primary key (StudentID, CourseID), which decomposition correctly achieves 2NF?

ACreate two tables: <code>Students(StudentID, StudentName)</code> and <code>Courses(CourseID, CourseName)</code> plus <code>Enrollments(StudentID, CourseID)</code>
BCreate one table with all columns and remove the primary key
CCreate two tables: <code>Students(StudentID, StudentName)</code> and <code>Enrollments(StudentID, CourseID, CourseName)</code>
DCreate one table with all columns and add a unique constraint on <code>StudentName</code>
Attempts:
2 left
💡 Hint

Think about separating attributes that depend only on part of the key.

🔧 Debug
advanced
2:00remaining
Find the error causing 2NF violation

Given this table definition:

CREATE TABLE Sales (
  SaleID INT,
  ProductID INT,
  ProductDescription VARCHAR(255),
  Quantity INT,
  PRIMARY KEY (SaleID, ProductID)
);

Which problem causes this table to violate 2NF?

AQuantity depends on both SaleID and ProductID.
BProductDescription depends only on ProductID, a part of the composite key.
CSaleID is not unique.
DPrimary key should be a single column.
Attempts:
2 left
💡 Hint

Look for columns that depend on only part of the key.

❓ optimization
expert
3:00remaining
Optimize table design to remove partial dependencies

You have a table OrderDetails with columns OrderID, ProductID, ProductPrice, OrderDate, and composite primary key (OrderID, ProductID).

Which design change best removes partial dependencies to achieve 2NF?

AMake ProductPrice part of the primary key
BKeep all columns in one table and add a unique constraint on ProductPrice
CRemove ProductPrice column from the table
DSplit into <code>Orders(OrderID, OrderDate)</code> and <code>OrderItems(OrderID, ProductID, ProductPrice)</code>
Attempts:
2 left
💡 Hint

Separate attributes that depend only on part of the key into their own table.

Practice

(1/5)
1. Which of the following best describes the Second Normal Form (2NF) in database design?
easy
A. It removes partial dependencies on a part of a composite key.
B. It eliminates all transitive dependencies.
C. It requires that all columns be atomic.
D. It allows duplicate rows in a table.

Solution

  1. Step 1: Understand 2NF definition

    2NF requires that no non-key attribute depends on only part of a composite primary key.
  2. Step 2: Compare options with 2NF

    'It removes partial dependencies on a part of a composite key.' correctly states this. 'It eliminates all transitive dependencies.' describes 3NF. 'It requires that all columns be atomic.' describes 1NF, and 'It allows duplicate rows in a table.' is incorrect.
  3. Final Answer:

    It removes partial dependencies on a part of a composite key. -> Option A
  4. Quick Check:

    2NF = Remove partial dependencies [OK]
Hint: 2NF fixes partial dependencies on composite keys [OK]
Common Mistakes:
  • Confusing 2NF with 3NF
  • Thinking 2NF removes all duplicates
  • Believing 2NF requires atomic columns
2. Which SQL table design violates Second Normal Form (2NF)?
CREATE TABLE Orders (OrderID INT, ProductID INT, ProductName VARCHAR(50), Quantity INT, PRIMARY KEY (OrderID, ProductID));
easy
A. OrderID and ProductID together form the primary key.
B. Quantity depends on both OrderID and ProductID.
C. ProductName depends only on ProductID, not the whole key.
D. The table has a composite primary key.

Solution

  1. Step 1: Identify dependencies in the table

    ProductName depends only on ProductID, which is part of the composite key (OrderID, ProductID).
  2. Step 2: Check 2NF violation

    Since ProductName depends on part of the key, this violates 2NF which forbids partial dependencies.
  3. Final Answer:

    ProductName depends only on ProductID, not the whole key. -> Option C
  4. Quick Check:

    Partial dependency = 2NF violation [OK]
Hint: Check if non-key columns depend on part of composite key [OK]
Common Mistakes:
  • Assuming composite key alone ensures 2NF
  • Ignoring partial dependencies
  • Confusing primary key with foreign key
3. Given the table below:
StudentCourses(StudentID, CourseID, StudentName, CourseName, Grade)
Which of the following correctly identifies the partial dependencies violating 2NF?
medium
A. Grade depends only on StudentID.
B. StudentName depends only on StudentID, and CourseName depends only on CourseID.
C. StudentName depends on both StudentID and CourseID.
D. CourseName depends on Grade.

Solution

  1. Step 1: Understand composite key and dependencies

    The composite key is (StudentID, CourseID). StudentName depends only on StudentID, CourseName only on CourseID.
  2. Step 2: Check 2NF compliance

    2NF requires no partial dependencies. StudentName depending only on StudentID and CourseName only on CourseID are partial dependencies on parts of the composite key, violating 2NF.
  3. Final Answer:

    StudentName depends only on StudentID, and CourseName depends only on CourseID. -> Option B
  4. Quick Check:

    Partial dependencies exist if 2NF not met [OK]
Hint: In 2NF, no partial dependency on composite key parts [OK]
Common Mistakes:
  • Thinking Grade depends only on StudentID
  • Assuming CourseName depends on Grade
  • Ignoring partial dependencies
4. You have this table:
CREATE TABLE Enrollment (StudentID INT, CourseID INT, StudentName VARCHAR(50), CourseName VARCHAR(50), PRIMARY KEY (StudentID, CourseID));
Which change fixes the 2NF violation?
medium
A. Keep the table as is; 2NF is not violated.
B. Add StudentName and CourseName as part of the primary key.
C. Remove the composite key and use a single primary key.
D. Split into three tables: Students(StudentID, StudentName), Courses(CourseID, CourseName), and Enrollment(StudentID, CourseID).

Solution

  1. Step 1: Identify 2NF violation

    StudentName depends only on StudentID, CourseName only on CourseID, causing partial dependencies.
  2. Step 2: Fix by splitting tables

    Splitting into Students(StudentID, StudentName), Courses(CourseID, CourseName), and Enrollment(StudentID, CourseID) removes partial dependencies, achieving 2NF.
  3. Final Answer:

    Split into three tables: Students(StudentID, StudentName), Courses(CourseID, CourseName), and Enrollment(StudentID, CourseID). -> Option D
  4. Quick Check:

    Split tables to remove partial dependencies [OK]
Hint: Split tables to fix partial dependencies [OK]
Common Mistakes:
  • Adding non-key columns to primary key
  • Removing composite key incorrectly
  • Ignoring partial dependencies
5. A table has columns: OrderID, ProductID, ProductName, Quantity, SupplierName with composite primary key (OrderID, ProductID). SupplierName depends only on ProductID. How should you redesign the table to achieve 2NF?
hard
A. Create two tables: Orders(OrderID, ProductID, Quantity) and Products(ProductID, ProductName, SupplierName).
B. Add SupplierName to the primary key.
C. Remove ProductID from the primary key.
D. Keep all columns in one table; 2NF is already satisfied.

Solution

  1. Step 1: Identify partial dependency

    SupplierName depends only on ProductID, part of the composite key, violating 2NF.
  2. Step 2: Normalize by splitting tables

    Separate Products table with ProductID, ProductName, SupplierName removes partial dependency, Orders table keeps OrderID, ProductID, Quantity.
  3. Final Answer:

    Create two tables: Orders(OrderID, ProductID, Quantity) and Products(ProductID, ProductName, SupplierName). -> Option A
  4. Quick Check:

    Split tables to remove partial dependencies [OK]
Hint: Move partial dependency columns to separate table [OK]
Common Mistakes:
  • Adding non-key columns to primary key
  • Removing part of composite key incorrectly
  • Assuming 2NF allows partial dependencies
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard