In the previous slide we found that there exist functional dependencies such that it is impossible to remove any attribute from the left-hand side and still get a valid functional dependency. For example, licence# → employee#, first-name, last-name and employee# → licence#, first-name, last-name belong to such group of functional dependencies. Functional dependency that has such property is call full functional dependency.
A full functional dependency is a functional dependency X → Y such that removal of any attribute A from X causes that (X-A) not → Y.
A partial functional dependency is a functional dependency which is not full functional dependency.
For example, a functional dependency
student#, subject#, edate → grade
valid in a relational schema
ENROLMENT(student#, subject#, edate, grade)
is a full functional dependency because none of the attributes student#, subject#, edate can be removed from the left hand side of the functional dependency such that it is still valid.
In another example, a functional dependency
licence#, employee# → first-name, last-name
valid in a relational schema
DRIVER(licence#, employee#, first-name, last-name)
is a partial functional dependency because if either licence# or employee# attributes are removed from the left hand side of the functional dependency then it is still valid.
If a functional dependency X → Y is full and if a union of X and Y cover entire relational schema R then X is a minimal key in R.
For example, a functional dependency
student#, subject#, edate → grade
valid in a relational schema
ENROLMENT(student#, subject#, edate, grade)
is a full functional dependency because none of the attributes student#, subject#, edate can be removed from the left hand side of the functional dependency such that it is still valid.
For example, a functional dependency
licence#, employee# → first-name, last-name valid in a relational schema
DRIVER(licence#, employee#, first-name, last-name)
is a partial functional dependency because if either licence# or employee# attributes are removed from the left hand side of the functional dependency then it is still valid.