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. A->C  F  
2. A, B->C, D, E  PC! 
3. A, B, C->D, E  PC 
4. A, B, C, D->E  PC 
5. A, B, C, E->D  PC 
6. A, B, D->C, E  PC 
7. A, B, D, E->C  PC 
8. A, B, E->C, D  PC 
9. A, C, D, E->B  PC 
10. A, D->C  P  
11. A, D, E->B, C  PC 
12. A, E->C  P  
13. B->D  F  
14. B, C->A, D, E  PC! 
15. B, C, D->A, E  PC 
16. B, C, D, E->A  PC 
17. B, C, E->A, D  PC 
18. B, E->D  P  
19. C->A  F  
20. C, D->A  P  
21. C, D, E->A, B  PC 
22. C, E->A  P  


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