# Intro to Databases: Relational Design Theory, Functional Dependencies

Functional dependencies are a generally useful concept
data storage – compression
reasoning about queries – optimization

Example: College application info
Student(SSN, sName, address, HScode, HSname, HScity, GPA, priority)
Apply(SSN, cName, state, date, major)

suppose priority iss determined by GPA
if GPA > 3.8 priority = 1
3.3 < GPA <= 3.8 priority = 2 GPA <= 3.3 priority = 3 Any two tuples that have the same priority have the same GPA GPA -> priority

Functional Dependency
based on knowledge of real world
all instances of relation must adhere
A -> B

Student(SSN, sName, address, HScode, HSname, HScity, GPA, priority)

SSN -> sName
SSN -> address
HScode -> HSname, HScity
HSname, HScity -> HScode
SSN -> GPA
GPA -> priority
SSN -> priority

Apply(SSN, cName, state, date, major)
REAL WORLD CONSTRAINTS, below are stretches
cName -> date
SSN, cName -> major
SSN -> state

Functional Dependencies and Keys
relation with no duplicates
suppose that set of attributes A -> set of attributes B
cannot have two tuples with set of attributes A

Trivial Functional Dependency
A -> B if B is a subset of A

NonTrivial Functional Dependency
A -> B if B is not a subset of A

Completely nontrivial Functional Dependency
A -> B where A and B have no intersection

Rules for Functional Dependencies

Splitting Rule
If set of attributes A -> set of attributes B, then A -> B1 etc. If A values are the same, then B values must be the same
Cannot Split the Left-Hand Side
If set of attributes A -> set of attributes B
then A1 does not determine set of attributes B

Combining Rule
If set of attributes A -> B1, B2, Bn then set of attributes A -> set of attributes B

Trivial Dependency Rule
If A -> B then A -> A union B
If A -> B then A -> A intersect B

Transitive Rule
If A -> B and B -> C then A -> C

Closure of Attributes

Given relations, Functional Dependencies, set of attributes A
Find all B such that set of attributes A -> B
{A1, …, An}+

start with {A1, …, An }
repeat until no change:
if A -> B and and A in set
add B to set

Closure Example

Student(SSN, sName, address, HScode, HSname, HScity, GPA, priority)

SSN -> sName, address, GPA
HScode -> HSname, HScity
GPA -> priority

{SSN, HScode}+
{SSN, HScode, sName, address, GPA, priority, HSname, HScity}

functionally determines all attributes
therefore, A KEY

Closure and Keys

is set of attributes A a key for R?

compute the closure of A and if = all attributes then A is a key

How can we find all keys given a set of functional dependencies?

consider every subset of attributes

Specifying Functional Dependencies for a relation

given S1 and S2 sets of functional dependencies
S2 “follows from” S1 if every relation instance satisfying S1 also satisfies S2

S2 {SSN -> priority}
S1 {SSN -> GPA, GPA -> priority}

How to test?
Does A -> B follow from S?

1) compute closure of A based on S and check if B is in the set

2) Armstrong’s Axioms (not explained)

Specifying Functional Dependencies for a relation
Want: Minimal set of completely nontrivial FDs such that all FDs that hold on the relation follow from the dependencies in this set.

November 8, 2011 | Comments Off on Intro to Databases: Relational Design Theory, Functional Dependencies | Categories: Posts | Permalink

Comments are closed.