patternModerate
Does using composite keys violate 2NF?
Viewed 0 times
violate2nfkeysusingdoescomposite
Problem
From all of the database related reference books that I have come across, there is a universal rule that state a database table should be at least 3NF.
From what I understand, a table is considered 2NF if it satisfies 1NF and it has single column primary key. Correct me if I am wrong.
So I couldn't understand why there is so much argument of having composite key especially for entities that relate M:N tables; eg:
A
Some say that primary key (
But doesn't that violate the universal rule of a table should have at least 3NF since using a composite key will not even satisfy 2NF?
Correct me if I am wrong, especially the part where I understand that if a table has composite keys, it will not be in 2NF.
From what I understand, a table is considered 2NF if it satisfies 1NF and it has single column primary key. Correct me if I am wrong.
So I couldn't understand why there is so much argument of having composite key especially for entities that relate M:N tables; eg:
A
Product_Customer table, with the columns:CustomerProductID
CustomerID
ProductID
Some say that primary key (
CustomerProductID) is not needed and it should use composite key (CustomerID, ProductID) instead.But doesn't that violate the universal rule of a table should have at least 3NF since using a composite key will not even satisfy 2NF?
Correct me if I am wrong, especially the part where I understand that if a table has composite keys, it will not be in 2NF.
Solution
Your definition of 2NF is not quite correct.
2NF is when a relation is in 1NF and it has no partial dependencies, meaning there are no predicates (columns) that depend on only part of a multi-part key.
What that means is that a table where all the (one or more) keys are single column ones cannot violate 2NF by definition. However, it's also possible to have a table with a multi column (composite) key which also doesn't violate 2NF. It's not about how many columns are in your key, its about whether there are non-key columns which depend on only part of any candidate key.
Since it's possible for a table to have a multi column key be in 2NF, it's also possible for a table with a multi column key to be in 3NF. You just have to make sure there are no transitive dependencies as well.
2NF is when a relation is in 1NF and it has no partial dependencies, meaning there are no predicates (columns) that depend on only part of a multi-part key.
What that means is that a table where all the (one or more) keys are single column ones cannot violate 2NF by definition. However, it's also possible to have a table with a multi column (composite) key which also doesn't violate 2NF. It's not about how many columns are in your key, its about whether there are non-key columns which depend on only part of any candidate key.
Since it's possible for a table to have a multi column key be in 2NF, it's also possible for a table with a multi column key to be in 3NF. You just have to make sure there are no transitive dependencies as well.
Context
StackExchange Database Administrators Q#246697, answer score: 11
Revisions (0)
No revisions yet.