2 Normalization Part I
2 Normalization Part I
We can decompose the bigger relation (S#, Status, City) into two
smaller relations SST (S#, Status) and SC (S#, City)
Decomposition
S# Status City
s3 30 Paris
s5 30 Athens
SST SC
Join
S# Status S# City
s3 30 S3 Paris
s5 30 s5 Athens
Decomposition
S# Status City
s3 30 Paris
s5 30 Athens
SST SC
Join
S# Status S# City
s3 30 S3 Paris
s5 30 s5 Athens
Decomposition
S# Status City
s3 30 Paris
s5 30 Athens
SST SC
S# Status S# City
s3 30 S3 Paris
s5 30 s5 Athens
S# Status City
Decomposition
S# Status City
s3 30 Paris
s5 30 Athens
SST SC
S# Status S# City
s3 30 S3 Paris
s5 30 s5 Athens
S# Status City
Decomposition
S# Status City
s3 30 Paris
s5 30 Athens
SST SC
S# Status S# City
s3 30 S3 Paris
s5 30 s5 Athens
S# Status City
s3 30 Paris
Decomposition
S# Status City
s3 30 Paris
s5 30 Athens
SST SC
S# Status S# City
s3 30 S3 Paris
s5 30 s5 Athens
S# Status City
s3 30 Paris
Decomposition
S# Status City
s3 30 Paris
s5 30 Athens
SST SC
S# Status S# City
s3 30 S3 Paris
s5 30 s5 Athens
S# Status City
s3 30 Paris
s5 30 Athens
Decomposition
S# Status City
s3 30 Paris
s5 30 Athens
SST SC
S# Status S# City
s3 30 S3 Paris
s5 30 s5 Athens
S# Status City
s3 30 Paris
s5 30 Athens
Decomposition
S# Status City
s3 30 Paris
s5 30 Athens
SST SC
S# Status S# City Lossless
Decomposition
s3 30 S3 Paris
s5 30 s5 Athens
S# Status City
s3 30 Paris
s5 30 Athens
Decomposition
S# Status City
s3 30 Paris
s5 30 Athens
decompose
SST STC
S# Status Status City
s3 30 30 Paris
s5 30 30 Athens
Decomposition
S# Status City
s3 30 Paris
s5 30 Athens
SST STC
Join
S# Status Status City
s3 30 30 Paris
s5 30 30 Athens
Decomposition
S# Status City
s3 30 Paris
s5 30 Athens
SST STC
S# Status Status City
s3 30 30 Paris
s5 30 30 Athens
S# Status City
s3 30 Paris
Decomposition
S# Status City
s3 30 Paris
s5 30 Athens
SST STC
S# Status Status City
s3 30 30 Paris
s5 30 30 Athens
S# Status City
s3 30 Paris
s3 30 Athens
Decomposition
S# Status City
s3 30 Paris
s5 30 Athens
SST STC
S# Status Status City
s3 30 30 Paris
s5 30 30 Athens
S# Status City
s3 30 Paris
s3 30 Athens
s5 30 Paris
Decomposition
S# Status City
s3 30 Paris
s5 30 Athens
SST STC
S# Status Status City
s3 30 30 Paris
s5 30 30 Athens
S# Status City
s3 30 Paris
s3 30 Athens
s5 30 Paris
s5 30 Athens
Decomposition
S# Status City
s3 30 Paris
s5 30 Athens
SST STC
S# Status Status City
s3 30 30 Paris
s5 30 30 Athens
S# Status City
s3 30 Paris
s3 30 Athens
s5 30 Paris
s5 30 Athens
Decomposition
S# Status City
s3 30 Paris
s5 30 Athens
SST STC
Lossy
S# Status Status City Decomposition
s3 30 30 Paris
s5 30 30 Athens
S# Status City
s3 30 Paris
s3 30 Athens
s5 30 Paris
s5 30 Athens
Lossless Decomposition
S# Status City
s3 30 Paris
s5 30 Athens
Decomposition 1 (lossless)
SST SC
S# Status S# City
s3 30 S3 Paris
s5 30 s5 Athens
Decomposition 2 (lossy)
SST STC
S# Status Status City
s3 30 30 Paris
s5 30 30 Athens
Lossless Decomposition
● What decomposition are lossless?
Heath’s Theorem: Let R(A,B,C) be a relation where A,
B, C are sets of attributes of R. If R satisfies AB then
R is equal to join of its projections on {A,B} and {A,C}.
S#Status holds
Status S# doesn’t holds
● All functional dependencies must also be preserved
● Not possible for all lossless decompositions
First Normal Form (1NF)
● A relation is in 1NF iff every tuple contains exactly
one value for each attribute.
● Every relation (in relational model) is in 1NF
In order to show 2NF let us unite S and SP to get:
FIRST(S#,STATUS,CITY,P#,QTY)
● We also introduce a new constraint such that
STATUS is functionally dependent on CITY, eg
● London suppliers have status 10, always
Paris suppliers have status 20, always
● Primary key is (S#,P#) and the functional
dependency diagram is ...
S# Status City P# QTY
S1 20 London P1 300
S1 20 London P2 200
S1 20 London P3 400
S2 30 Paris P6 100
FD Diagram for FIRST
Update Problems with FIRST
● INSERT: Cannot insert the fact that a supplier
exists until that supplier actually makes a shipment
● DELETE: Deleting the last tuple based on S#,P#
could lose the information that S2 is located in
CITY Paris
● UPDATE: CITY values occur for each shipment
thus an update of CITY is unnecessarily expensive.
Cause of the update problems
● All these update problems are due to FDs
● S#Status
● S#City
● One solution is to replace FIRST by:
● SECOND(S#,STATUS,CITY) and SP(S#,P#,QTY)
● This yields the following FD diagram: