Wikipedia says:
A table is in 2NF if and only if, it is in 1NF and every non-prime
attribute of the table is either dependent on the whole of a candidate
key, or on another non prime attribute.
To illustrate concept, let's use a table for an inventory of toys adapted from Head First SQL:
TOY_ID| STORE_ID| INVENTORY| STORE_ADDRESS
The primary key is composed of the attributes TOY_ID
and STORE_ID
. If we analyze the non-prime attribute INVENTORY
we see that int depends on TOY_ID
and STORE_ID
at the same time. That's cool.
On the other hand, the non-prime attribute STORE_ADDRESS
only depends on the attribute STORE_ID
(i.e it's not related to the primary key attribute TOY_ID
). That's a clear violation of 2NF, so to comply to with 2NF our schema must be like this:
An Inventory table: TOY_ID| STORE_ID| INVENTORY
and a Store table: STORE_ID| STORE_ADDRESS