Functional dependency calculator

$Id: functional-dependencies.php,v 1.11 2006/04/10 16:32:48 bigfoot Exp $

INPUT:

Column names (space separated):

Table data (fields space separated, rows newline separated)
(calculations will suppose this is the FULL set of representative data):

OUTPUT:

->"functionally determines"
Ffull functional dependency
Ppartial functional dependency
Ckey candidate
C!minimal length key candidate
Ttransitive dependency to underlined dependents (experimental!)
1. Invoice#, Line#->Quant1, Part1, Amt1  FCT
2. Invoice#, Line#, Quant1->Part1, Amt1  PCT
3. Invoice#, Line#, Quant1, Part1->Amt1  PC 
4. Invoice#, Line#, Quant1, Amt1->Part1  PC 
5. Invoice#, Line#, Part1->Quant1, Amt1  PCT
6. Invoice#, Line#, Part1, Amt1->Quant1  PC 
7. Invoice#, Line#, Amt1->Quant1, Part1  PCT
8. Invoice#, Quant1->Line#, Part1, Amt1  PCT
9. Invoice#, Quant1, Part1->Line#, Amt1  PCT
10. Invoice#, Quant1, Part1, Amt1->Line#  PC 
11. Invoice#, Quant1, Amt1->Line#, Part1  PCT
12. Invoice#, Part1->Line#, Quant1, Amt1  PCT
13. Invoice#, Part1, Amt1->Line#, Quant1  PCT
14. Invoice#, Amt1->Line#, Quant1, Part1  PCT
15. Line#, Quant1->Invoice#, Part1, Amt1  PCT
16. Line#, Quant1, Part1->Invoice#, Amt1  PCT
17. Line#, Quant1, Part1, Amt1->Invoice#  PC 
18. Line#, Quant1, Amt1->Invoice#, Part1  PCT
19. Line#, Part1->Invoice#, Quant1, Amt1  PCT
20. Line#, Part1, Amt1->Invoice#, Quant1  PCT
21. Line#, Amt1->Invoice#, Quant1, Part1  PCT
22. Quant1->Invoice#, Line#, Part1, Amt1  FC!T
23. Quant1, Part1->Invoice#, Line#, Amt1  PCT
24. Quant1, Part1, Amt1->Invoice#, Line#  PC 
25. Quant1, Amt1->Invoice#, Line#, Part1  PCT
26. Part1->Invoice#, Line#, Quant1, Amt1  FC!T
27. Part1, Amt1->Invoice#, Line#, Quant1  PCT
28. Amt1->Invoice#, Line#, Quant1, Part1  FC!T


EXAMPLES

partially taken from Maciej Suchomski's exercise slides
(NEW: click "try it" to run the example):


(1)
A B C D E
---------
a b z w q
e b r w p
a d z w t
e d r w q
a f z s t
e f r s t
try it
(2) (default)
A B C
-----
a b x
a b y
a d x
a d y
c f x
c f y
try it
(3)
A B C D E
---------
a b x v q
e b y v z
a d x v t
e d y v p
a f x p t
e f y p z
try it
Cust# Name  Address
-------------------
43    Jones 121_1st
55    Smith 222_2nd
try it
Invoice# Line# Quant1 Part1      Amt1
-------------------------------------
1001     1     200    Screw      2.00
1001     2     300    Nut        2.25
1001     3     100    Whatever   0.75
1002     1       1    Motor     52.00
1002     2      10    Saw      121.00
1003     3       5    Brace     44.44
try it
Project_No Pers_ID Dept_No Job Salary
-------------------------------------
5 1 1 Analysis  13
5 1 2 Leader    18
7 1 1 Leader    18
8 1 1 Marketing 15
8 1 2 Leader    18
try it
transitive dependency?
A B C
-----
a a 1
b a 1
c b 1
d b 1
e c 2
f c 2
try it