I’m practicing taking as input a set of functional dependencies and output candidate key(s). Is there an algorithm and how come in such case there is no web-based implementation where I can input my FD:s and as output get a list of superkeys / candidate keys?
I practice on what I find here on SO and a suitable question is
how to find the highest normal form for a given relation
where the functional dependencies mentioned are
B->G
BI->CD
EH-> AG
G-> DE
Please check if I’m doing this right when I try to find that the candidate key is BFHI:
The FD B->G can be rewritten as ABCDEFHI->ABCDEFGHI and therefore ABCDEFHI is a superkey.
The FD BI->CD can be rewritten as ABEFGHI->ABCDEFGHI and therefore ABEFGHI is a superkey.
The FD EH->AG can be rewritten as BCDEEFHI->ABCDEFGHI and therefore BCDEEFHI is a superkey.
The FD G->DE can be rewritten as ABCFGHI->ABCDEFGHI and therefore ABCFGHI is a superkey.
In our superkeys, BFHI is in every one. Therefore BFHI is the candidate key and it cannot be reduced further which can be seen from inspection(?)
Am I reasoning this the right way?
There is another question the augmenting algorithm can handle, if it works,
Database extraneous attributes and decomposition
Here, the FD:s are
A->BCD
BC->DE
B->D
D->A
Here the FB A->BCD can be written as AEF->ABCDEF and therefore AEF is a superkey. The FD BC->DE can be rewritten as ABCF->ABCDEF and therefore ABCF is a superkey. The FD B->D can be rewritten as ABCEF->ABCDEF and therefore ABCEF is a superkey. The FD D->A can be rewritten as BCDEF->ABCDEF and therefore BCDEF is a superkey. For all superkeys, F is the only member(s) that is in every superkey and therefore F is the only candidate key.
Does this work?
Thanks for any answer/comment
1 Answer