Question

enter image description here

For the question above, I am confused with how to approach simplifying the left hand side of BDCE->A. Do I get rid of E, as D depends on it, or do I get rid of CD as well, as CD->A?

Here's what I thought I did: Computed the closure of B,C,D,E,BC,BD,DE,CD,CE,BCD,BCE,BDE,CDE, then saw which closures actually use the dependency BCDE->A, and which dependencies actually get A. So far, CD is the smallest amount of attributes that get A.

The above leaves me with CD->A. Is this correct?

Was it helpful?

Solution

The algorithm to compute the minimal cover of a set of dependencies requires that, when there are multiple attributes on the left part, we should eliminate the extraneous ones, that is the attributes such that the remaining ones still determine the right part.

In other words, if you have a dependency like BCDE → A, you should in turn try to eliminate each attribute on the left part, and see if A is contained in the closure of the remaining attributes.

Let’s try the algorithm in your case:

1. Try to eliminate B, and see if A ∈ CDE⁺; CDE⁺ = ABCDE, so B can be eliminated
2. Try to eliminate C from CDE, and see if A ∈ DE⁺; DE⁺ = ABCDE, so C can be eliminated
3. Try to eliminate D from DE, and see if A ∈ E⁺; E⁺ = BCE, so D cannot be eliminated
4. Try to eliminate E from DE, and see if A ∈ D⁺; D⁺ = ABCDE, so E can be eliminated

So, the dependency BCDE → A can be substituted by D → A. Applying this algorithm to all the dependencies (remember to check at the end if there are superfluous dependencies), produces the following canonical cover:

D → A
D → E
E → B
E → C
Licensed under: CC-BY-SA with attribution
Not affiliated with dba.stackexchange
scroll top