X->Y
is used to denote that when
supplied values to the field(s) in set X
, the assigned
value for each field in set Y
can be determined. For
example, if a database table is to contain fields for the social
security number (S
), name (N
),
address (A
), and phone (P
)
and each person has been assigned a unique value for S
,
the S
field functionally determines the N
,
A
and P
fields. This is written as
S->NAP
.
Develop a program that will identify each redundant FD in each input
group of FDs. An FD is redundant if it can be derived using other FDs
in the group. For example, if the group contains the FDs
A->B
, B->C
, and A->C
, then the
third FD is redundant since the field set C
can be
derived using the first two. (The A
fields determine
values for the B
fields, which in turn determine values
for the fields in C
.) In the group A->B
,
B->C
, C->A
, A->C
,
C->B
, and B->A
, all the FDs are redundant.
-
and >
. The lists of
field names contain only uppercase alphabetic characters. Functional
dependency lines contain no blanks or tabs. There are no trivially
redundant FDs (for example, A->A
). For identification
purposes, groups are numbered sequentially, starting with 1; the FDs
are also numbered sequentially, starting with 1 in each group.
No redundant FDs
.
3 A->BD BD->C A->C 6 P->RST VRT->SQP PS->T Q->TR QS->P SR->V 5 A->B A->C B->D C->D A->D 3 A->B B->C A->D 0
Set number 1 FD 3 is redundant using FDs: 1 2 Set number 2 FD 3 is redundant using FDs: 1 FD 5 is redundant using FDs: 4 6 2 Set number 3 FD 5 is redundant using FDs: 1 3 --OR-- FD 5 is redundant using FDs: 2 4 Set number 4 No redundant FDs.