Why Normalize?
Normalization separates facts so that the same information does not need to be changed in several places. It helps prevent inconsistent updates, accidental loss of information, and records that cannot be inserted without unrelated data.
Normal Forms
•
1NF: avoid repeating groups such as course_1, course_2, and course_3. Store each enrollment as a row.
•
2NF: meet 1NF and make every non-key attribute depend on the whole candidate key, not just part of a composite key.
•
3NF: meet 2NF and remove transitive dependencies of non-key attributes on keys. For example, keep a department’s name with the department, rather than repeating it for every employee.
Example
Consider Enrollment(student_id, course_id, student_name, course_name). Its key is (student_id, course_id), but each name depends on only one part of that key. Separate the data:
•
Student(student_id, student_name)
•
Course(course_id, course_name)
•
Enrollment(student_id, course_id)
Normalization and Performance
More tables can mean more joins. That is a trade-off to measure, not a reason to duplicate everything. Start with clear dependencies, then consider a view, index, or deliberately maintained summary when a measured query needs it. If data is duplicated, define how every copy stays correct.


