Lossless-Join Decomposition

From HandWiki

In computer science the concept of a Lossless-Join Decomposition is central in removing redundancy safely from databases while preserving the original data.[1]

Lossless-join Decomposition

Can also be called Nonadditive.[citation needed] If you decompose a relation R into relations R1,R2 you will have a Lossless-Join if a natural join of the two smaller relations yields back the original relation, i .e.;

R1R2=R.

If R is split into R1 and R2, for this decomposition to be lossless then at least one of the two following criteria should be met.

Check 1: Verify join explicitly

Projecting on R1 and R2, and joining back, results in the relation you started with.[2]

Check 2: Via functional dependencies

Let R be a relation schema.

Let F be a set of functional dependencies on R.

Let R1 and R2 form a decomposition of R .

The decomposition is a lossless-join decomposition of R if at least one of the following functional dependencies are in F+ (where F+ stands for the closure for every attribute or attribute sets in F):[3]

  • R1R2R1
  • R1R2R2

Example

  • Let R=(A,B,C,D) be the relation schema, with A, B, C and D attributes.
  • Let F={ABC} be the set of functional dependencies.
  • Decomposition into R1=(A,B,C) and R2=(A,D) is lossless under F because R1R2=A). A is a superkey in R1, meaning we have a functional dependency {ABC}.  In other words, now we have proven that (R1R2R1)F+.

[4][5]

References