After browsing through programmingforums.org I found someone who needed to know about the different normal forms in databases. My response to her question is copied & pasted below.
Here are descriptions of the normal forms. Sometimes it’s easiest to understand the forms by seeing what violates them.
1NF - Typically, if you can make a valid database table, it’s in 1NF. I think technically the table should have a unique key to be truly in 1NF
2NF - A table is in 2NF if and only if none of its non-prime attributes are functionally dependent on a part (proper subset) of a candidate key. (A non-prime attribute is one that does not belong to any candidate key.) Basically, you can’t have any partial dependencies. An example of a 2NF violation would be…
AB -> CD, B -> D. AB is a candidate key, B is a proper subset of AB, and B implies D, which is a non-prime attribute: a 2NF violation!
3NF - For a table to be in 3NF, it must first meet the conditions for 2NF. Also every non-prime attribute of the table must be non-transitively dependent (i.e. directly dependent) on every key of the table. That is there can be NO transitive dependencies! A transitive dependency is a type of functional dependency in which a non-prime attribute is determined by another non-key field and that field is not a candidate key.
Possibly the most simple example of a 3NF violation would be…
A -> BC, C->A. A implies B & C, C -> A so C must imply B by transitivity. Transitive dependencies violate the 3NF form.
BCNF - For a table to be in BCNF, it first must meet the conditions for the 3NF. Also, a table is in BCNF if and only if for every one of its non-trivial functional dependencies where X -> Y, X is a superkey—that is, X is either a candidate key or a superset thereof. In plain English, any attribute(s) that imply any other attributes must be part of a key.
Here is a simple example of a table in 3NF, but not in BCNF.
A -> BC, B - > C. A implies both B and C, and B implies C, but A does NOT imply C by transitivity, because it implies C trivially.