Normalization

Design Guidelines
1. Design a relation schema so that it is easy to explain its meaning
2. Design the base relation schemas so that no insertion, deletion, or modification anomalies are present in the relations
3. Avoid placing attributes in a base relation whose values may frequently be NULL
4. Guarantees that no spurious tuples are generated

Functional Dependency
X->Y, two sets of attributes X and Y that are subsets of R, for any tuples t1 and t2, have t1[X] = t2[X], they must also have t1[Y] = t2[Y]

Normal Form
1NF, disallow multivalued attributes, composite attributes, and their combinations
2NF, a relation schema R is in 2NF if every nonprime attribute A in R is fully functionally dependent on the primary key of R
    a. for X->Y, if removal of any attribute A from X means that the dependency does not hold, called full functional dependency
    b. if some attributes are removed and the dependency still holds, it is called partial dependency
    c. An attributes is called a prime attributes if it is a member of some candidate key of R, an attribtute is called nonprime if it is not a prime attribute

3NF, a relation schema R is in 3NF if it satisfies 2NF and no nonprimie attribute of R is transitively dependent on the primary key