Rensselaer Polytechnic Institute
CSCI-4380 – Database Systems
David Goldschmidt, Ph.D.
Without normalization, problems with
relations include:
Unnecessary redundancy
Insert anomalies
Update anomalies
Delete anomalies
Splitting a relation into two (more specific)
relations is called decomposition
The objective is to have each
resulting relation be atomic
i.e. each relation should contain
only information related to the key
A given relation R with set F of functional
dependencies is in BCNF if and only if all
functional dependencies X Y in F are:
either trivial (i.e. Y X)
or X is a superkey of R
If relation R is not in BCNF, it is possible to
use decomposition to transform R to BCNF
Given a set F of functional dependencies for
relation R( A1, A2, ..., An ) that is not in BCNF:
Convert F to a minimal basis
Find an X Y that violates BCNF
Compute closure X+
Decompose R into:
▪ R1 containing all attributes of X+
▪ R2 containing { A1, A2, ..., An } – ( X+ – X )
Project functional dependencies onto R1 and R2
A decomposition of R into relations
R1, R2, ..., Rn is considered lossless if
for all possible instances of R, we
are guaranteed that:
R1 ⋈ R2 ⋈ ... ⋈ Rn = R
Note that the order of the natural joins
is not important since ⋈ is both associative
and symmetric
Decomposition (hopefully) achieves:
Elimination of anomalies: remove redundancy
and update/insert/delete anomalies
Recoverability of information: can we recover
the original relation from its decomposition?
Preservation of dependencies:
can we reconstruct the original
functional dependencies?
A given relation R with set F of functional
dependencies is in 3NF if and only if all
functional dependencies X Y in F are:
trivial (i.e. Y X)
or X is a superkey of R
or all attributes of Y are prime attributes
A prime attribute is an attribute that is a
member of some key of relation R
Given a set F of functional dependencies for
relation R( A1, A2, ..., An ) that is not in 3NF:
Convert F to a minimal basis
Combine all functional dependencies with
the same left-hand side
Set D = { }
For each functional dependency X Y in F:
▪ If there is no relation in D that contains all attributes in
X and Y, then add a relation with attributes X Y to D
If there are no relations in D that have all
attributes of one of the keys of R, then add a
new relation to D that contains all attributes in
one of the keys of R
Simplify D by removing redundancy:
▪ if R1 and R2 are in D, but R2 contains all
attributes of R1, then remove R1
The 3NF decomposition algorithm
guarantees the following:
The resulting relations are in 3NF
The decomposition is dependency preserving
The decomposition is lossless
Given relation R( A, B, C, D, E, F ) and
functional dependencies AB AC,
CE DB, B A, and D AE
What are the keys of R?
What are the superkeys of R that are not keys?
Is relation R in 3NF? If not, decompose R such
that it is in 3NF