The process of breaking down a large table into smaller, more manageable tables based on functional dependencies. Helps reduce redundancy and improve data integrity. But not always good or required.
Lossy Decomposition
Section titled “Lossy Decomposition”Occurs when a table is decomposed into smaller tables, but some information is lost in the process. This can happen if the decomposition does not preserve all functional dependencies.
Lossless Decomposition
Section titled “Lossless Decomposition”Ensures that all functional dependencies are preserved during the decomposition process. This is achieved by ensuring that each functional dependency is preserved in at least one of the resulting tables. Preferred type.
Lossless-Join Decomposition
Section titled “Lossless-Join Decomposition”A decomposition of into and is lossless join if at least one of the following dependencies is in :
Dependency preservation
Section titled “Dependency preservation”Suppose a relation (satisfying ) is decomposed into . Let be the set of functional dependencies which include only attributes in .
The decomposition is dependency preserving if:
Means that all the functional dependencies from the original relation can still be enforced by checking them locally on the decomposed relations, without having to recombine (join) the tables.
If not, checking for violation of functional dependencies will require recombining the tables, which is expensive.
Testing
Section titled “Testing”To check if a dependency is preserved in a decomposition:
- Start with
- For each in the decomposition:
- If , then is preserved.
Here, attribute closure is computed with respect to .
The above test is applied on all functional dependencies in . Takes polynomial time.