CS470: Introduction to Database Management Systems Functional Dependencies and Normal Forms Relational Database Design (Chapters 10 and 11) V Kumar School of Computing and Engineering University of Missouri-Kansas City Relational Database Design Logical database schema design is concerned with organizing data into a logical form acceptable to the underlying database system. One of the logical structures is Relational structure which we use to develop logical schema (Conceptual schema). It is a complicated process. Some of the important points which make it complicated are: 1. The designer is constrained by the limited data structure types supported by the data base system. 2. The database designer may have to consider the access path of the records. 3. The database designer may have to consider how to make database access and modification efficient. 4. The designer has to identify and select a set of most relevant attributes for an entity. 5. The designer has to identify the size of a relation and connect two or more relations for navigation. A good relational database is a set of good relational schema. A good relational schema contains a set of relevant attributes of the entity it represents where every attribute is clearly related (directly or indirectly) to other attributes of the relation. A good relation should require minimum storage space and have minimum data redundancy. I relational schema has a name and a set of related attributes. Let us consider the following relational schema – Dept.- of an entity “Department”. Example: A bad relational schema Dept Dept Dnumber Dlocation Dname Interest rate Dnumber Dlocation Dname Room size The first schema is bad because the attribute “Interest Rate” is nothing to do with entity Department as a result it is not related to other attributes (Dnmber, Dlocation, and Dname). The second schema is a good schema. Sport Sname Inst_id Inst_name Expertise Fee Football Tennis Baseball Golf 1 1 2 2 S1 Tom Tom Peter Peter Football Tennis Baseball Golf 200 200 300 300 S2 Inst_name Inst_id Expertise 1 Expertise 2 Fee Tom Peter 1 2 Football Baseball Tennis Golf 2/17 200 300 Sname Football Tennis Baseball Golf Inst_id 1 1 2 2 Functional Dependencies and Normal Forms When storage space requirement to store a schema is concerned, a good schema conserves space. To achieve this information redundancy (repetition of same data) is minimized. This is done by breaking (splitting) the relation into two or more smaller relations. This split helps to reduce information redundancy, which improves database consistency (correctness). Example: The schema Sport (given above) is a good schema but it can be further improved. The storage requirement of Sport can be reduced by splitting it into two relations S1 and S2. Suppose it takes one word to store the value of an attribute. Sport relation will require 20 words (this does not include the space the structure takes). When Sport is split into S1 and S2 relations, then S1 and S2 together need 18 words to store the same information. The duplications (Tom Tom and Peter Peter) are removed. Let us identify a few relational schema design problems. Consider the following Student relation records Student identify, the activity students take and fee they pay for these activities. Student Stu_id 100 100 150 175 175 200 200 Activity Skiing Golf Swimming Squash Swimming Swimming Golf Fee 200 65 50 50 50 50 65 Suppose Student 100 gave up skiing. The first record must be deleted from the database. If it is not then the database will have incorrect information (not consistent with the real world). This deletion has bad side effect which makes the database incomplete. Effect: Deleting this record also removes information about Skiing fee. Thus, more information is deleted than intended. This is not a good relation because a query “What is the fee for Skiing?” cannot be answered. Now suppose you want to add activity Baseball in the database and you are going to charge 200. Effect: You cannot add this information since there is no student enrolled in Baseball. You cannot leave Stu-id field for Baseball empty. We cannot add a fact about one attribute until we have an additional fact about another related attribute. To add this record you must have a student willing to learn baseball. You are not allowed to insert null value in Stu_id attribute. This is not a good relation. These problems are referred to as Modification Anomalies. There are many and we will discuss them in length. What we need is a relation where a delete operation deletes only the relevant tuples and an insert can insert any tuple at any time in other words we wants relations which have minimum or no modification anomalies. How to minimize or eliminate modification anomalies? To get an answer of this question we first need to understand the dependency theory to be able to design good relational schema. Dependency theory illustrates how one or more attributes of R depends on one or more attributes of R. Thus, how Ai depends on Aj (i = j, i ≠ j). 3/17 Functional Dependencies and Normal Forms Dependency Theory To maintain consistency a relation must satisfy a set of integrity constraints. A consistent relation reflects the facts. For example, if an instructor teaches a database course then the database must reflect this information, i.e., the relation which stores this information must satisfy constraints related to instructor and course attributes. With respect to database processing it means that assigning new values to a set of attributes must satisfy this set of constraints to maintain the correctness (fact) of the database. We need to formalize these concepts. We need the following notations: R = indicates a relational schema name. A1, A2, …, An = indicate attributes included in the R. R(A1, A2, …, An) = indicate the structure of the schema with name R. r = indicates a relation which is an instance of a relational schema. r(R) = indicates an instance of R(A1, A2, …, An). Let γ be an integrity constraint on a schema R. γ is a function that associates each relation r(R) a Boolean value γ(r). A relation r satisfies γ if γ(r) = true (i.e., γ(r) holds in r) and violates if γ(r) = false. Every database must satisfy a set of defined constraints for preserving correctness. For this reason every database schema is associated with a set of constraints which are usually expressed by means of closed sentences of some first-order predicate calculus. Integrity constraints can be classified into two main categories: 1. Intra-relational constraints. Each such constraint involve only one relation scheme. 2. Inter-relational constraints. Each such constraint spans over more than one relational scheme. We will deal mainly with intra-relational constraints. One of the most common intrarelational constraints is called Key dependency. Given a relation scheme R(U) where (U = A1, A2, …, An) a key dependency is expressed as key(K), where K ⊆ U, and is satisfied by a relation r, if and only if t1(K) ≠ t2(K). When intra-relational constraints encompass non-key attributes, then they are called as Functional Dependencies (FD) and key dependency becomes a subset of functional dependencies. These functional dependencies are the basis of relational database design. Inter-relational involves more than one relation, where attribute of one relation establishes relationship with the attribute of another relation in forming functional dependencies. Functional Dependencies (FD) We will study the reasons for modification anomalies discussed earlier and study possible solutions. These problems arise since attributes of a relation are logically and semantically related. A good relation require that the attributes of a relation must be related but on the other hand such relationships cause modification anomalies. Our aim is to minimize these anomalies because they cannot be eliminated completely. To do so we begin our discussion with Functional Dependency (FD). 4/17 Functional Dependencies and Normal Forms Schedule Pilot Cushing Cushing Clark Clark Clark Chin Chin Copley Copley Copley Flight 83 116 281 301 83 83 116 281 281 412 Date 9 Aug 10 Aug 8 Aug 12 Aug 11 Aug 13 Aug 12 Aug 9 Aug 13 Aug 15 Aug Departs 10:15a 1:25p 5:50a 6:35p 10:15a 10:15a 1:25p 5:50a 5:50a 1:25p Informally functional dependency defines the relationship among attributes of a relation, i.e., it defines the effect of a change of the value of a set of attributes on another set of attributes. For example, if we change the value of a SSN then the value of the corresponding Name attribute must also change to preserve consistency. We can represent this functional relationship (functional since an operation on a set of attribute initiates corresponding changes on other related attributes of a relation) in terms of a set of constraints. Consider the following relation SCHEDULE. We can identify the following restrictions: 1. Exactly one time for one flight. 2. For a {pilot, date, time} there is one flight. 3. For a {flight, date} there is one pilot. These restrictions indicate how this relation can be processed (modified, expand, contract etc.). These are examples of a relationship called Functional Dependencies (FD). We can say that an FD occurs when in a tuple the value of a set of attributes uniquely determines the values of another set of attributes. Notations: we will use → to indicate functional dependency between two set of attributes. So X → Y will mean X functionally determines Y. X is called the Left side of FD and Y the Right side of FD. X is also called the determinant of the FD X → Y Example: If we have Phone number → City name, then the value of phone number determines the city name and if the value of the phone number changes then the value of (name) city name will also change. Formally: Let r be a relation on R(X, Y). if r satisfies the FD X → Y then if t1(X) = t2(X), we must have t1(Y) = t2(Y). This means that the Y value of a tuple in r(R) is determined by the X value of that tuple in r(R), i.e., Y is functionally dependent on X or X functionally determines Y. Full functional dependency: X → Y is a full functional dependency if all members of attribute set X must be present to hold the dependency. For example, let X = {A, B, C} and Y = {D}. If {A, B, C} → {D} then it is full functional dependency, i.e., Y is fully functionally 5/17 Functional Dependencies and Normal Forms dependent on X. This means that the value of D can only be determined by the values of A, B, and C. On the other hand if we have {A, B} → {D} then Y is partially dependent on X (partial functional dependency) because the value of C is not necessary to determine the value of D. Prime attribute: Attribute ∈ primary key set. Non-prime attribute: Attribute ∉ primary key set. There is no formula to establish FD. The semantics of a relation should indicate how attributes of a relation are related. Algorithm to test if a given FD holds on a relation. SATISFY (<relational name>, FD). Output: true if relation satisfies FD X → Y, false otherwise 1. Sort the relation r on its X attribute values to bring tuples with equal X-values together. 2. If for each ti(X) = tj(X) there exist ti(Y) = tj(Y) then return true otherwise return false. Apply SATISFY (SCHEDULE, FD: Flight → Depart) to relation SCHEDULE. Schdule Pilot Cushing Clark Chin Cushing Chin Clark Copley Copley Clark Copley Flight 83 83 83 116 116 281 281 281 301 412 Date 9 Aug 11 Aug 13 Aug 10 Aug 12 Aug 8 Aug 9 Aug 13 Aug 12 Aug 15 Aug Departs 10:15a 10:15a 10:15a 1:25p 1:25p 5:50a 5:50a 5:50a 6:35p 1:25p Result: This FD exists because we have left hand side value Flight = 281 we have Depart = 5:50a as the right hand value. Similarly whenever we have left hand side value Flight = 83, we have Depart = 10:15a as the right hand value. Note that FD is the relationship among attributes of a relation. We can examine another FD: Departs → Flight. SATISFY (SCHEDULE, Departs → Flight). The relation schedule is analyzed as before to find this FD. It appears that this FD is not satisfied because for a left hand value Depart = 1:25p, there are two different values for Flight, i.e., Flight = 116 and Flight = 412. The following relation illustrates the result (False). Similarly FD: Date → Flight is not satisfied in this relation. Schedule Pilot Clark Copley Copley Cushing Flight 281 281 281 83 6/17 Date 8 Aug 9 Aug 13 Aug 9 Aug Departs 5:50a 5:50a 5:50a 10:15a Functional Dependencies and Normal Forms Clark Chin Cushing Chin Copley Clark 83 83 116 116 412 301 11 Aug 13 Aug 10 Aug 12 Aug 15 Aug 12 Aug 10:15a 10:15a 1:25p 1:25p 1:25p 6:35p Two extreme cases: X → ∅ trivially satisfied by any relation and ∅ → Y satisfied by those relations where every tuple has the same Y-value. Graphical representation of FD The head of the arrows pointing to the right side of FDs and the tails are connected to the left side of FDs. Schema Emp_Dept: SSN → {Ename, Bdate, Address, Dnumber}. Dnumber → {Dname, Dmgrssn}. Emp_Dept Ename SSN Bd ate Ad d ress Dnu mber Dname Dm grssn Schema: Emp_Proj FD (F): {SSN, Pnumber}→ Hours SSN→ Ename Pnumber → {Pname, Plocation} Emp_Proj SSN Pnu m ber H ou rs Enam e Pnam e Plocation IMPORTANT 1. One must remember that FDs in a relation are defined by the database designer. In the above examples these FDs may not be valid if they have not been defined, even though the occurrence of these relation schemas exhibit FDs. 2. A relational schema R may have n instances. If an FD for R is identified then every instance of R must satisfy the FD. A FD on R is false if one instance of a relation satisfies it while another instance does not. To verify if a certain FD is true one has to check all possible instances of R. Closure of a FD: Defining FDs of a schema requires semantic knowledge. A database designer defines a set of FDs for a schema. Let us call this set F. It is possible that some 7/17 Functional Dependencies and Normal Forms additional FDs may be the side effect of F. We will call them as derived FDs. Formally, the set of all such FDs derived by F is called the closure of F and represented by F+. For example consider schema EMP-DEPT: Emp_Dept Ename SSN Bd ate Ad d ress Dnu mber Dname Dm grssn Defined F = SSN → {Ename, Bdate, Address, Dnumber} Dnumber → {Dname, Dmgrssn} Derived F+ = SSN → {Dname, Dmgrssn} SSN → SSN Dnumber → Dname} It is very time consuming to discover all possible F+ for F for a given schema using a sequential scan of the relation. Even though the cardinality of a schema is finite, the degree of an instance may be very large and a multiple complete scanning of all possible instances of this schema would be prohibitively expensive. To discover F+ we define a set of rules called inference rules. We use notation F X → Y to indicate that F infers X → Y or defined FD set F derives X → Y. We define 6 inference rules. The first three are known as Armstron's inference rules. 1. Reflexsive rule: This rule states that a set of attributes determines themselves. For example, {SSN, Account No.} → {SSN, Account No.} or {SSN, Account No.} → {Account No.} Formally, if Y ⊆ X ⊆ U, then X → Y. This rule gives the trivial dependency, those that have a right side contained in the left side. Proof 1: The reflexivity axiom is clearly sound, i.e., using this rule we cannot deduce from F any dependency that is not in F+. We cannot have a relation r with two tuples that agree on X yet disagree on some subset of X. Let R be a schema with attribute subset X and Y where Y ⊆ X. Consider a pair of tuples t1 and t2 ∈ r(R). If t1 (X) = t2(X), then t1(A) = t2(A) for every A ∈ X. Then, since Y ⊆ X, t1(A) = t2(A) for every A ∈ Y, which is equivalent to t1(Y) = t2(Y). Therefore, X → Y must hold in r(R). If the attribute set has only one element, e.g., X, then X → X. Thus ΠX(σX=x(r)) always has at most one tuple. Consider a relation Emp: Emp SSN 123 111 100 110 Emp_Name A B C D 8/17 Salary 50K 60K 60K 65K Age 65 45 42 42 Functional Dependencies and Normal Forms Suppose X = {SSN, Emp_Name, Age} and Y = {Emp_Name, Age}. Thus, Y ⊆ X. We define X → Y. That is {SSN, Emp_Name, Age}→ {Emp_Name, Age}. We take two tuples t1 (X) = t1(123, A, 65) and t2(X) = t2(111, B, 60K), and t1(Y) = t1(A, 65) and t2(Y) = t2(B, 45). We see that t1(X) ≠ t2(X) and, therefore, t1(Y) ≠ t2(Y). Now suppose we say t1(X) = t2(X), which means t1 (X) = t1(123, A, 65) and t2(123, A, 65). This indicates that t1(Y) = t2(Y), i.e., t1(A, 65) = t2(A, 65). 2. Augmentation: This rule states that a new valid FD is generated if the same set of attributes is added to the left and right side of the existing FD. Formally, if X → Y then XZ → YZ or XZ → Y where Z ⊆ R. Proof: If r satisfies X → Y, then ΠY(σX = x (r)) has at most one tuple for any X-value x. This means that when we apply a select on r with predicate X = x then there will be at most one tuple and a projection on this will get the corresponding Y value. Similarly, if Z ⊆ R then σXZ=xz(r) ⊆ σX=x(r) and hence ΠY(σXZ=xz(r)) ⊆ ΠY(σX=x(r)). Thus ΠY(σXZ=xz(r)) has at most one tuple and r must satisfy XZ→Y. Example: F = A → B r(A a1 a2 a1 a3 B b1 b2 b1 b3 C c1 c1 c1 c2 D) d1 d1 d2 d3 We see that by axiom 2, F+ are AB → B, AC → B, AD → B, ABC → B, ADB → B, ACD → B and ABCD → B. It can also be seen that AC → BC, AD → BD, ACD → BCD and so on. AC → BC means whenever t1(AC) = t2(AC), there will be tuples where t1(BC) = t2(BC). The text book (Elmasri/Navathe) proves it by contradiction. 3. Transitive Rule: This establishes that if X → Y and Y → Z then A → Z. Proof: Let r's F = {X→Y, Y→Z}. Let t1 ∈ r and t2 ∈ r. We know that if t1(X) = t2(X), then t1(Y) = t2(Y) and also if t1(Y) = t2(Y), then t1(Z) = t2(Z). Therefore if t1(X) = t2(X), then t1(Z) = t2(Z). This is one of the most important axioms. Example: F = A → B, B → C, r satisfies A → C r(A a1 a2 a3 a1 B b1 b2 b1 b1 C c2 c1 c2 c2 D) d1 d2 d1 d3 The rest of the three axioms can be proved by using the first three axioms. 9/17 Functional Dependencies and Normal Forms 4. Projectivity (Decomposition): This rule states that some attributes can be removed from the right hand side without affecting the FD. Formally, if X → YZ then X → Y. Proof: If r satisfies X → YZ, then ΠYZ(σX=x (r)) has at most one tuple for any X-value x. Since ΠY(ΠYZ(σX=x (r))) = ΠY(σX=x (r)), ΠY(σX=x (r)) can have at most one tuple. Hence r satisfies X → Y. 5. Union or additive rule: This axiom allows us to combine two or more FDs with the same left side. Formally, if X → Y and X → Z, then X → YZ . Proof: If r satisfies X → Y and X → Z then ΠY(σX=x (r)) and ΠZ(σX=x (r)) both have at most one tuple for any X-value x. If ΠYZ(σX=x (r)) had more than one tuple, then at least one of ΠY(σX=x (r)) and ΠZ(σX=x (r)) would have more than one tuple. Thus X → YZ. 6. Pseutransitivity rule: This rule allows us to extend the transitive rule further. Formally, if {X → Y, WY → Z} then WX → Z. Let r satisfy X → Y, WY → Z and let t1 and t2 be tuples in r. We know that if t1(X) = t2(X), then t1(Y) = t2(Y) and also t1(WY) = t2(WY) then t1(Z) = t2(Z). From t1(WX) = t2(WX) we can deduce that t1(X) = t2(X) and so t1(Y) = t2(Y) and further t1(WY) = t2(WY), which implies t1(Z) = t2(Z). Thus WX → Z. Reflexivity, Augmentation and Transitivity rules are called Armstrong’s inference rules. The other three rules can be proved by the first three. Using these 6 rules, it is possible to derive other inference rules for FDs. Normal forms and Modification Anomalies Normal forms (NF): A NF of a relation defines the type of modification anomalies it eliminates. There are First normal form (1NF), Second normal form (2NF), Third normal form (3NF), Boyce-Codd normal form (BCNF), Fourth normal form (4NF), Domain/Key normal form (DK/NF) and Fifth normal form (5NF). We will study several of them. Normalization: The process of transforming a relation from a lower normal, including nonnormal form to upper normal forms is called normalization. Degree Student Name John Kumar Year 1990 2002 1967 1969 1983 Degree MS BS BS MS Ph.D. Repeating Groups: If one value of an attribute determines more than one value of another attribute, then these multiple values are called repeating groups. For example, in relation Degree Student Name and Degrees are two attributes. For one value of Student Name = John, there are three value of Degree (BS, MS, Ph.D.). Relation Degree is in a non-normalized 10/17 Functional Dependencies and Normal Forms form. Year vales are repeated for one value of Student Name, thus, Year has repeating groups. Degree is a non-normalized relation and not allowed in relational model. Relation Degree must be normalized before it can be processed by relational database systems. The normalized relation Degree is given below. Degree Student Name John John Kumar Kumar Kumar Year 1990 2002 1967 1969 1983 Degree MS BS BS MS Ph.D. We now define these in terms of Normal Forms (NF). 1NF: A relation is in 1NF if it does not contain repeating groups, i.e., all its attributes are atomic. Normalized: Order Ono 12489 12491 12491 12494 12495 12498 12498 12500 Date 90287 90287 90287 90487 90487 90587 90587 90587 Pno AX12 BT04 BZ66 CB03 CX11 AZ52 BA74 BT04 No_Ordered 11 1 1 4 2 2 4 1 Order relation is in 1NF, since it does not have repeating groups. Degree: 4. Cardinality: 8 Primary Key (PK): {Order_number, Part_number}. Only one attribute cannot be a candidate key. There are many superkeys. We want to identify if this relation has any modification anomalies. If it has then we try to minimize or eliminate them. Consider the following relation. It is in 1NF. Order Ono 12489 12491 12491 12494 12495 12498 12498 12500 Date Part_descrip 90287 Iron 90287 Stove 90287 Washer 90487 Bike 90487 Mixer 90587 Skates 90587 Baseball 90587 Stove 11/17 Pno AX12 BT04 BZ66 CB03 CX11 AZ52 BA74 BT04 No_Ordered 11 1 1 4 2 2 4 1 Functional Dependencies and Normal Forms Modification anomalies Update: A change to the description of BT04 requires several changes since BT04 has been duplicated as a result of normalization. Inconsistent data: In the absence of incomplete update, BT04 may have different values in other attributes. Additions: We cannot add ZZ14 until we have an order for ZZ14. Deletion: By deleting BT04 we lose that BT04 represents Stove. Conclusion: We conclude that Order has modification anomalies, which should be minimized or eliminated. Minimization or elimination process: A relation with modification anomalies is further normalized to higher normal form. Usually the normalization to one higher normal form resolves the issue. If not then it is normalized to next higher normal form. Further normalization is usually done by splitting (vertically) the relation into two or more relations. So the solution for Order is to normalize it to 2NF. We first define 2NF. 2NF: A relation schema is in 2NF if it is in 1NF and non-prime attribute is fully functionally dependent on PK. Dependency diagram of Order Ord er_N o Date Part_N o PK: {Order_no, Part_no} Part_Desc N o_Ord ered Price Order is 1NF: All attributes are atomic. Order is not in 2NF, because non-key attribute Part_desc is dependent upon Part_no, which is a portion of the PK. Also Date is dependent upon Order_no (part of the PK). There is partial dependency among attributes of Order. Order Order N o. 12489 12491 12494 12495 12498 12500 Part D ate 90287 90287 90487 90487 90587 90587 Part N o. AX12 AZ52 BA74 BH 22 BT04 BZ66 CA14 CB03 CX11 Order_line Part_D esc. Iron Skates Baseball Toaster Stove Washer Skillet Bike Mixer Part N o. AX12 BT04 BZ66 CS03 CX11 AZ52 BA74 BT04 N o_Ordered Order_N o 11 1 1 4 2 2 4 1 12489 12491 12491 12494 12495 12498 12498 12500 Price 14.95 402.99 311.95 175.00 57.95 22.95 4.95 402.99 1NF → 2NF: Split the relation into two or more via projection as follows 1. Identify the set of attributes that makes up the PK: {Order_no, Part_no}. 2. Create all subsets of the above set: {Order_no}, {Part_no} and {Order_no and Part_no}. 12/17 Functional Dependencies and Normal Forms 3. Designate each of these subsets as the PK of a relation that contains those attributes, which are dependent on these PKs: Primary Keys: {Order_no}, {Part_no} and {Order_no, Part_no} Relational schemas Order (Order_no, Date). Date is functionally dependent on Order_no (see diagram above). Part (Part_no, Part_desc). Part_desc is functionally dependent on Part_no. Order_line (Order_no, Part_no, No_ordered, Price) All these relations are in 2NF. Anomalies have been eliminated and can be verified as follows: Change: If BT04 is changed to something else then it requires only one change in Part relation. Add a new part and its description: If a new tuple is added in Part then there is no need to have an order exist for that part. Delete order 12489: This delete does not cause AX12 to be deleted from Part, thus we do not loose the description of AX12. Information loss: none. Q. Does this imply that relations in 2NF do not have modification anomalies? A. No. Relations in 2NF may suffer with all modification anomalies. Example Customer Cust_no 124 256 311 315 405 412 522 567 587 622 Name Sally A Ann S Don C Tom D Al W Sally A Mary N Joe B Judy R Dan M Address 4747 Troost 215 Oak 48 College 914 Cherry 519 Watson 16 Elm 108 Pine 808 Ridge 512 Pine 419 Chip Slsrep_no 2 6 12 6 12 3 12 6 6 3 Slsrep_name Tom J Bill S Sam B Bill S Sam B Mary J Sam B Bill S Bill S Mary J The dependency diagram of Customer Cu st_N o N am e Ad d ress Slsrep _N o Slsrep _N am e Customer is in 2NF. It suffers with all the anomalies 13/17 Functional Dependencies and Normal Forms Update: A change to Slsrep_name requires multiple changes. Inconsistent data: There is nothing in the design that would prohibit a Slsrep_name from having two different names. Additions: To add Slsrep_no 47, there must be a customer for 47 first. Deletions: If we delete all the customers of a sales rep then we lose the name of the Sales rep also. Reason for these anomalies: Slsrep_no, which is not a PK, determines Slsrep_name. As a result Slsrep_no can appear many times in the relation Remedy: Normalize Customer relation by transforming it into 3NF relations. 3NF: A relation scheme R is in 3NF if it is in 2NF and no non-prime attribute of R is transitively dependent on the primary key. Transitive dependency: A transitive dependency exists among 3 or more attributes. Example Ename SSN Bd ate Ad d ress Dnu mber Dname Dm grssn SSN → Dnumber Dnumber → Dname and Dnumber → Dmgrssn Therefore SSN → Dname and SSN → Dmgrssn transitively. Example Housing relation is in 2NF. Fee is transitively dependent on SID so it is not in 3NF. This relation has all modification anomalies. Housing can be converted to 3NF by normalization process. Housing SID Building Fee 100 150 200 250 300 Randolph Ingersol Randolph Pitkin Randolph 1200 1100 1200 1100 1200 SID Building Fee 2NF → 3NF Housing Fee SID Building Building Fee 100 150 200 250 300 Randolph Ingersol Randolph Pitkin Randolph Randolph Ingersol Pitkin 1200 1100 1100 3NF also have modification anomalies. Consider the Advisor relational. 14/17 Functional Dependencies and Normal Forms Relationships 1. 2. 3. 4. A student can have one or more majors. A major can have several faculty as advisors. A faculty member advises in only one major area. SID cannot be a key since a student can have many majors and therefore many advisors. 5. A a student cannot have many advisors in the same area. Keys are: (SID, Major) → Fname. (SID, Fname)→Major. One of these sets can be selected as a primary key. Determinant: Fname→ Major Advisor SID 100 150 200 250 300 300 Major Fnam e Math Psychology Math Math Psychology Math Cau chy Ju ng Riem ann Cau chy Perls Riem ann SID Major Fnam e This relation does not have transitive dependency. Advisor is in 3NF since there is no transitive dependency but it has modification anomalies. Deletion: Delete SID 300, we lose the fact that Perls advises in Psychology. Addition: Cannot add the fact that Keynes advises in Economics if there is no student enrolled. Update: If Cauchy advises in Physics then multiple changes are required. Inconsistency: Any change in Cauchy-Math will make Advisor inconsistent. Solution: Further normalization to Boyce/Codd Normal form. Boyce/Codd Normal Form (BCNF): A relation is in BCNF if every determinant is a candidate key. Advisor is not in BCNF because Fname → Major, and Fname is not a candidate key. 3NF to BCNF Advisor SID 100 150 200 250 300 300 Major Fnam e Major Fnam e Cauchy Jung Riemann Cauchy Perls Riemann Math Psychology Math Math Psychology Math Cau chy Ju ng Riem ann Cau chy Perls Riem ann Relations in BCNF are not entirely free from anomalies. Consider Student relation: Student SID 100 100 100 100 150 Major Music Accounting Music Accounting Math 15/17 Activity Swimming Swimming Tennis Tennis Jogging Functional Dependencies and Normal Forms Semantics: A student can enroll in more than one major and in more than one activity. PK: All three attributes. What is the relationship between SID and Major? It is not functional dependency, because students have several majors. There is some sort of relationship. This relationship can be illustrated by an example. Suppose: Student 100 wants to enroll in Skiing. Add: tuple 100 Music Skiing. Resulting relation Student SID Major Activity 100 Music Skiing 100 Music Swimming 100 Accounting Swimming 100 Music Tennis 100 Accounting Tennis 150 Math Jogging Semantics: It implies that Student 100 Skis as a Music major but he/she does not know to ski as an Accounting major. Illogical. Solution: Add tuple: 100 Accounting Skiing. The resulting relation is consistent. The relationship between SID and Major is a Multivalued dependency. SID determines not a single value but several values. Thus (SID 100) determines majors (Music, Accounting) and activities (Skiing, Swimming, Tennis). The relation is in BCNF since all attributes make the primary key. It has anomalies. Addition: If one tuple (100 Accounting Skiing) is added then several other tuples must be added to preserve consistency. Student SID Major 100 Music 100 Accounting 100 Music 100 Accounting 100 Music 100 Accounting 150 Math Activity Skiing Skiing Swimming Swimming Tennis Tennis Jogging Delete: If (100 Music Skiing) is deleted then (100 Accounting Skiing) also has to be deleted even though Major and Activity are not related. Solution: Break this relation into two by projection S_major S_Activity SID Major SID Activity 100 100 150 Mu sic Accou nting Math 100 100 100 150 Sking Sw imming Tennis Jogging 16/17 Functional Dependencies and Normal Forms Multivalued dependency always occur in pairs. For the Student relation SID →→ Major because Major depends only on the value of SID and not on the value of Activity. Similarly, SID →→ Activity. Activity does not dependent on Major since having a particular major implies nothing about Activity. The no relationship between Major and Activity creates problem in the sense that whenever we add a new Major, we must add a tuple for every value of Activity. Multivalued dependencies always occur in pairs. In a relational scheme R, if A→→B, then A→→C. This must be so because if B is unrelated to C then C must also be unrelated to B. The independence among attributes is not a problem if the attributes have a single value. Example Student_shoe SID 100 150 200 250 Shoe-size 8 10 5 12 Marital_status M S S S Primary Key: SID. In Student_shoe, Shoe_size and Marital_status are independent and have single value, anomalies cannot occur. We can delete or add any tuple with no problem. This observation leads to the definition of 4NF 4NF: A relation is in 4NF if it is in BCNF and it has no multivalued dependencies. 17/17 Functional Dependencies and Normal Forms
© Copyright 2024