When you convert from 1NF to 2NF, the repeating values in the new table should only be foreign keys into the original table. Take a look at the first example in the Wikipedia entry. In the 1NF table, Current Work Location
is repeated with each Employee
, even though it's dependent only on the Employee
, not the entire {Employee Skill}
primary key. In the 2NF version, there's an Employee
table, where Current Work Location
does not get repeated. In the Employees Skills
table employees are repeated because they can have multiple skills.
The benefit of 2NF is that when you change a value that's dependent on only a subset of the key (e.g. an employee changes locations) you only have to change one row. In the original table in the Wikipedia example, if an employee changes locations you would have to change all the Employees Skills rows with that name (and if you have other tables that are similarly denormalized, you'd have to update them as well).