Chapter 3 Notes. 3.1 Functional Dependencies A functional dependency is a statement that – two...

33
Chapter 3 Notes

Transcript of Chapter 3 Notes. 3.1 Functional Dependencies A functional dependency is a statement that – two...

Page 1: Chapter 3 Notes. 3.1 Functional Dependencies A functional dependency is a statement that – two tuples of a relation that agree on some particular set.

Chapter 3

Notes

Page 2: Chapter 3 Notes. 3.1 Functional Dependencies A functional dependency is a statement that – two tuples of a relation that agree on some particular set.

3.1 Functional Dependencies

• A functional dependency is a statement that

– two tuples of a relation that agree on some particular set of attributes must also agree on some other particular set of attributes.

Page 3: Chapter 3 Notes. 3.1 Functional Dependencies A functional dependency is a statement that – two tuples of a relation that agree on some particular set.

Functional Dependencies continued

• Functional dependencies (FDs) are used to specify formal measures of the "goodness" of relational designs

• FDs and keys are used to define normal forms for relations

• FDs are constraints that are derived from the meaning and interrelationships of the data attributes

• A set of attributes X functionally determines a set of attributes Y if the value of X determines a unique value for Y

Page 4: Chapter 3 Notes. 3.1 Functional Dependencies A functional dependency is a statement that – two tuples of a relation that agree on some particular set.

Examples of FD constraints

• social security number determines employee nameSSN -> ENAME

• project number determines project name and locationPNUMBER -> {PNAME, PLOCATION}

• employee ssn and project number determines the hours per week that the employee works on the project{SSN, PNUMBER} -> HOURS

Page 5: Chapter 3 Notes. 3.1 Functional Dependencies A functional dependency is a statement that – two tuples of a relation that agree on some particular set.

Keys of a Relation

• A set of one or more attributes is a key of a relation if– Those attributes functionally determine all other attributes

of the relation.– No proper subset of the prospective key functionally

determine all other attributes of the relation

• A superkey for a relation is a set of attributes that functionally determines all the attributes of the relation .

• A key is a superkey, no proper subset of which is also a superkey

Page 6: Chapter 3 Notes. 3.1 Functional Dependencies A functional dependency is a statement that – two tuples of a relation that agree on some particular set.

3.2 Reasoning About Functional Dependencies

• There are many rules that let us infer that one FD X → A holds in any relation instance that satisfies some other given set of FD's .

• To verify that X → A holds , compute the closure of X , using the given FD's to expand X until it includes A .

Page 7: Chapter 3 Notes. 3.1 Functional Dependencies A functional dependency is a statement that – two tuples of a relation that agree on some particular set.

Armstrong’s inference rules

IR1. (Reflexive) If Y subset-of X, then X -> Y

IR2. (Augmentation) If X -> Y, then XZ -> YZ(Notation: XZ stands for X U Z)

IR3. (Transitive) If X -> Y and Y -> Z, then X -> Z

IR1, IR2, IR3 form a sound and complete set of inference rules

Page 8: Chapter 3 Notes. 3.1 Functional Dependencies A functional dependency is a statement that – two tuples of a relation that agree on some particular set.

More inference rules

(Decomposition) If X -> YZ, then X -> Y and X -> Z

(Union) If X -> Y and X -> Z, then X -> YZ

(Psuedotransitivity) If X -> Y and WY -> Z, then WX -> Z

The last three inference rules, as well as any other inference rules, can be deduced from IR1, IR2, and IR3 (completeness property)

Page 9: Chapter 3 Notes. 3.1 Functional Dependencies A functional dependency is a statement that – two tuples of a relation that agree on some particular set.

One more inference

• Closure of a set F of FDs is the set F+ of all FDs that can be inferred from F

• Closure of a set of attributes X with respect to F is the set X + of all attributes that are functionally determined by X

• X + can be calculated by repeatedly applying IR1, IR2, IR3 using the FDs in F

• Closure algorithm on page 76

Page 10: Chapter 3 Notes. 3.1 Functional Dependencies A functional dependency is a statement that – two tuples of a relation that agree on some particular set.

Equivalence of Sets of FDs

• Two sets of FDs F and G are equivalent if:– every FD in F can be inferred from G, and– every FD in G can be inferred from F

• Hence, F and G are equivalent if F + =G +

Definition: F covers G if every FD in G can be inferred from F (i.e., if G + subset-of F +)

• F and G are equivalent if F covers G and G covers F• There is an algorithm for checking equivalence of sets of FDs

Page 11: Chapter 3 Notes. 3.1 Functional Dependencies A functional dependency is a statement that – two tuples of a relation that agree on some particular set.

3.2.7 Minimal Basis for a set of FD's

• For any set of FD 's, there is at least one minimal basis, – which is a set of FD's equivalent to the original

(each set implies the other set), with singleton right sides ,

– no FD that can be eliminated while preserving equivalence, and

– no attribute in a left side that can be eliminated while preserving equivalence.

Page 12: Chapter 3 Notes. 3.1 Functional Dependencies A functional dependency is a statement that – two tuples of a relation that agree on some particular set.

3.3 Design of Relational Database Schemas

• Problems that arise when our schema is poorly designed– Redundancy– Update anomalies– Deletion anomalies

• The accepted way to eliminate anomalies is to decompose relations.– Split attributes of a relation to make the schemas of two

new relations

Page 13: Chapter 3 Notes. 3.1 Functional Dependencies A functional dependency is a statement that – two tuples of a relation that agree on some particular set.

Anomalies (1)

Consider the relation:EMP_PROJ ( Emp#, Proj#, Ename, Pname, No_hours) Update Anomaly: • Changing the name of project number P1 from “Billing” to

“Customer-Accounting” may cause this update to be made for all 100 employees working on project P1.

Page 14: Chapter 3 Notes. 3.1 Functional Dependencies A functional dependency is a statement that – two tuples of a relation that agree on some particular set.

Anomalies (2)

EMP_PROJ ( Emp#, Proj#, Ename, Pname, No_hours)

• Insert Anomaly: Cannot insert a project unless an employee is assigned to it.– Inversely, cannot insert an employee unless an he/she is assigned to a

project.

• Delete Anomaly: When a project is deleted, it will result in deleting all the employees who work on that project. – Alternately, if an employee is the sole employee on a project, deleting

that employee would result in deleting the corresponding project

Page 15: Chapter 3 Notes. 3.1 Functional Dependencies A functional dependency is a statement that – two tuples of a relation that agree on some particular set.

Normalization of Relations (1)

• Normalization: The process of decomposing unsatisfactory "bad" relations by breaking up their attributes into smaller relations

• Normal form: Condition using keys and FDs of a relation to certify whether a relation schema is in a particular normal form

Page 16: Chapter 3 Notes. 3.1 Functional Dependencies A functional dependency is a statement that – two tuples of a relation that agree on some particular set.

Normalization of Relations (2)

• 2NF, 3NF, BCNF based on keys and FDs of a relation schema

• 4NF based on keys, multi-valued dependencies : MVDs;

• 5NF based on keys, join dependencies : JDs

• Additional properties may be needed to ensure a good relational design (lossless join, dependency preservation)

Page 17: Chapter 3 Notes. 3.1 Functional Dependencies A functional dependency is a statement that – two tuples of a relation that agree on some particular set.

Boyce-Codd Normal Form

• A relation is in BCNF if the only nontrivial FD's say that some superkey functionally determines one or more of the other attributes.

• A major benefit of BCNF is that it eliminates redundancy caused by the existence of FD's.

Page 18: Chapter 3 Notes. 3.1 Functional Dependencies A functional dependency is a statement that – two tuples of a relation that agree on some particular set.

Decomposition into BCNF (1)

• By repeatedly choosing suitable decompositions, we can break any relation into a collection of subsets of its attributes

– These subsets are the schemas of relations in BCNF

– The data in the original relation is represented faithfully by the data in the decomposition relations

Page 19: Chapter 3 Notes. 3.1 Functional Dependencies A functional dependency is a statement that – two tuples of a relation that agree on some particular set.

Decomposition into BCNF (2)

• Two FDs exist in the relation TEACH:fd1: { student, course} -> instructorfd2: instructor -> course

• {student, course} is a candidate key for this relation and that the dependencies shown follow a pattern. So this relation is in 3NF but not in BCNF

• A relation NOT in BCNF should be decomposed so as to meet this property, while possibly forgoing the preservation of all functional dependencies in the decomposed relations.

Page 20: Chapter 3 Notes. 3.1 Functional Dependencies A functional dependency is a statement that – two tuples of a relation that agree on some particular set.

Decomposition into BCNF (3)

Three possible decompositions for relation TEACH1. {student, instructor} and {student, course}2. {course, instructor } and {course, student}3. {instructor, course } and {instructor, student}

• All three decompositions will lose fd1. We have to settle for sacrificing the functional dependency preservation. But we cannot sacrifice the non-additivity property after decomposition.

• Out of the above three, only the 3rd decomposition will not generate spurious tuples after join.(and hence has the non-additivity property).

• There is a test to determine whether a binary decomposition (decomposition into two relations) is nonadditive (lossless)

Page 21: Chapter 3 Notes. 3.1 Functional Dependencies A functional dependency is a statement that – two tuples of a relation that agree on some particular set.

3.4 Decomposition: The Good, Bad, and Ugly

• Distinct properties a decomposition should have– Elimination of anomalies by decomposition

– Recoverability of information, original relation from tuples in its decomposition

– Preservation of dependencies• If we check the projected FD’s in the decomposition relations, can

we be sure• When we reconstruct the original relation from the decomposition

by joining, the result will satisfy the original FD’s

Page 22: Chapter 3 Notes. 3.1 Functional Dependencies A functional dependency is a statement that – two tuples of a relation that agree on some particular set.

Lossless-Join Decomposition

• A useful property of a decomposition is that the original relation can be recovered exactly by taking the natural join of the relations in the decomposition.

• Any decomposition gives us back at least the tuples with which we start, but – a carelessly chosen decomposition can give tuples in the

join that were not in the original relation

Page 23: Chapter 3 Notes. 3.1 Functional Dependencies A functional dependency is a statement that – two tuples of a relation that agree on some particular set.

The Chase

• We can test whether a decomposition has the lossless - join property by setting up a tableau – – a set of rows that represent tuples of the original relation.

• We chase a tableau by applying the given functional dependencies to infer that certain pairs of symbols must be the same.

• The decomposition is lossless with respect to a given set of FD' s if and only if – the chase leads to a row identical to the tuple whose membership in

the join of the projected relations we assumed.

Page 24: Chapter 3 Notes. 3.1 Functional Dependencies A functional dependency is a statement that – two tuples of a relation that agree on some particular set.

Dependency-Preserving Decomposition

• Another desirable property of a decomposition is that we can check all the functional dependencies that hold in the original relation by checking FD's in the decomposed relations.

Page 25: Chapter 3 Notes. 3.1 Functional Dependencies A functional dependency is a statement that – two tuples of a relation that agree on some particular set.

Third Normal Form and BCNF

• Sometimes decomposition into BCNF can lose the dependency - preservation property.

• 3NF can be thought of as a relaxed form of BCNF– allows an FD X → A even if X is not a superkey , provided A

is a member of some key .

• 3NF does not guarantee to eliminate all redundancy due to FD's , but often does so.

Page 26: Chapter 3 Notes. 3.1 Functional Dependencies A functional dependency is a statement that – two tuples of a relation that agree on some particular set.

3.5 Third Normal form in the text

• A relation is in third normal form (3NF) if

– Whenever A1A2….An → B1B2….Bm is a nontrivial FD,

– either { A1A2….An} is a superkey, or

– those of B1B2….Bm that are not among the A’s are each of member of some key (not necessarily the same key)

Page 27: Chapter 3 Notes. 3.1 Functional Dependencies A functional dependency is a statement that – two tuples of a relation that agree on some particular set.

Synthesis Algorithm for 3NF

• If we take a minimal basis for a given set of FD's, • turn each of these FD's into a relation, and • add a key for the relation, if necessary, • the result is a decomposition into 3NF that has the

lossless-join and dependency-preservation properties.

Page 28: Chapter 3 Notes. 3.1 Functional Dependencies A functional dependency is a statement that – two tuples of a relation that agree on some particular set.

3.6 Multivalued Dependencies

• A multivalued dependency is a statement that two sets of attributes in a relation have sets of values that appear in all possible combinations.

• A multivalued dependency is a statement about some relation R that when you fix the values for one set of attributes, the the values in certain other attributes are independent of the values of all other attributes in the relation

Page 29: Chapter 3 Notes. 3.1 Functional Dependencies A functional dependency is a statement that – two tuples of a relation that agree on some particular set.

Multivalued Depenency (MVD) intro 1 of 2

• In many cases relations have constraints that cannot be specified as functional dependencies.

• Multivalued dependencies are a consequence of the first normal form (1NF) which disallows an attribute in a tuple to have a set of values.

Page 30: Chapter 3 Notes. 3.1 Functional Dependencies A functional dependency is a statement that – two tuples of a relation that agree on some particular set.

MVD intro 2 of 2

• If we have two or more multivalued independent attributes in the same relation schema,

• we get into a problem of having to repeat every value of one of the attributes with every value of the other attribute – to keep the relation state consistent and – to maintain the independence among the attributes

involved.

• This constraint is specified by a multivalued dependency

Page 31: Chapter 3 Notes. 3.1 Functional Dependencies A functional dependency is a statement that – two tuples of a relation that agree on some particular set.

Fourth Normal Form

• MVD's can also cause redundancy in a relation.

• 4NF is like BCNF, but also forbids nontrivial MVD's whose left side is not a superkey.

• It is possible to decompose a relation into 4NF without losing information.

• 4NF implies BCNF implies 3NF

Page 32: Chapter 3 Notes. 3.1 Functional Dependencies A functional dependency is a statement that – two tuples of a relation that agree on some particular set.

3.7 An Algorithm for Discovering MVD’s

Chase-based test for whether X → Y follows from F can be summarized as:

1. Start with a tableau having tow rows that agree on only X.

2. Chase the tableau using the FD’s of F3. If the final tableau agrees in all columns of Y, then X → Y

holds; otherwise it does not

Page 33: Chapter 3 Notes. 3.1 Functional Dependencies A functional dependency is a statement that – two tuples of a relation that agree on some particular set.

Reasoning About MVD's

• We can infer MVD's and FD's from a given set of MVD's and FD's by a chase process.

– We start with a two-row tableau that represent the dependency we are trying to prove.

– FD's are applied by equating symbols , and MVD's are applied by adding rows to the tableau that have the appropriate components interchanged .