Dependencies

Introduction

The following is a list of functional and multi-valued dependencies for a company:

Employee_ID -> Supervisor_ID
Supervisor_ID ↠ Employee_ID
Employee_ID ↠ Child
Employee_ID ↠ {Salary, Year}
Employee_ID -> Spouse
{Employee_ID, Year} -> Salary
Year ↠ Salary
Employee_ID -> {Name, Address}

How can these dependencies help us design a schema?

First, extract the functional dependencies based upon a single attribute and see what they tell us:

Employee_ID -> Supervisor_ID
Employee_ID -> Spouse
Employee_ID -> {Name, Address}

These three dependencies imply that Employee_ID could be the primary key in a table that also contains Spouse, Name, Address, and Supervisor_ID, since these attributes depend only upon a single Employee_ID. The {Name, Address} group can be split into two separate attributes since neither appear anywhere else in the dependencies:

«table»
Employee
Spouse
Name
Address
Supervisor_ID
«PK»
Employee_ID

Now, extract the multi-valued dependencies based upon a single attribute:

Supervisor_ID ↠ Employee_ID
Employee_ID ↠ Child
Employee_ID ↠ {Salary, Year}
Year ↠ Salary

The dependency Employee_ID ↠ Child implies that one employee may have many children. However, there is no dependency from Child to any other attribute. This leaves us with a table that relates only Employee_ID and Child. Since an Employee_ID may repeat, the tables primary key cannot consist only of the Employee_ID. Since there is only one other attribute in the table, i.e. Child, the primary key must consist of Employee_ID and Child:

«table»
Children
«PK»
Child
Employee_ID

The dependencies Employee_ID ↠ {Salary, Year} and Year ↠ Salary implies a

Here is one possible normalization of these dependencies:

Schema Design

Here is some simple sample data that shows these dependencies:

Employee
Employee_ID Name Address Spouse Supervisor_ID
1 Znotinas, Dr. Nora Waterloo, ON NULL NULL
97 Brown, David Waterloo, ON Lori 1
64 Gartner, Manfred Kitchener, ON Elaine 1

Children
Employee_ID Child
97 Tasmin
97 Tristan
97 Deborah

Salary
Employee_ID Year Salary
1 2010 9,000.00
97 1986 400.00
97 1987 400.00
97 2010 2,300,000.00

Syntax

Examples