Presentation is loading. Please wait.

Presentation is loading. Please wait.

CMSC424: Database Design Instructor: Amol Deshpande

Similar presentations


Presentation on theme: "CMSC424: Database Design Instructor: Amol Deshpande"— Presentation transcript:

1 CMSC424: Database Design Instructor: Amol Deshpande amol@cs.umd.edu

2 Today… Relational Database Design

3 Where did we come up with the schema that we used ? E.g. why not store the actor names with movies ? Topics: Formal definition of what it means to be a “good” schema. How to achieve it.

4 Movies Database Schema Movie(title, year, length, inColor, studioName, producerC#) StarsIn(movieTitle, movieYear, starName) MovieStar(name, address, gender, birthdate) MovieExec(name, address, cert#, netWorth) Studio(name, address, presC#) Movie(title, year, length, inColor, studioName, producerC#, starName) MovieStar(name, address, gender, birthdate) MovieExec(name, address, cert#, netWorth) Studio(name, address, presC#) Changed to:

5 TitleYearLengthinColorStudioNameprodC#StarName Star wars1977121YesFox128Hamill Star wars1977121YesFox128Fisher Star wars1977121YesFox128H. Ford King Kong2005187YesUniversal150Watts King Kong1933100noRKO20Fay Issues: 1.Redundancy  higher storage, inconsistencies (“anomalies”) 2.Need nulls Unable to represent some information without using nulls How to store movies w/o actors (pre-productions etc) ? Movie(title, year, length, inColor, studioName, producerC#, starName)

6 TitleYearLengthinColorStudioNameprodC#StarNames Star wars1977121YesFox128{Hamill, Fisher, H. ford} King Kong2005187YesUniversal150Watts King Kong1933100noRKO20Fay Issues: 3. Avoid sets - Hard to represent - Hard to query Movie(title, year, length, inColor, studioName, producerC#, starNames)

7 NameAddress FoxAddress1 Studio2Address1 UniversialAddress2 This process is also called “decomposition” Issues: 4. Requires more joins (w/o any obvious benefits) 5. Hard to check for some dependencies What if the “address” is actually the presC#’s address ? No easy way to ensure that constraint (w/o a join). Split Studio(name, address, presC#) into: Studio1 (name, presC#) Studio2(name, address)??? NamepresC# Fox101 Studio2101 Universial102 Smaller schemas always good ????

8 movieTitlestarName Star WarsHamill King KongWatts King KongFaye Issues: 6. “joining” them back results in more tuples than what we started with (King Kong, 1933, Watts) & (King Kong, 2005, Faye) This is a “lossy” decomposition We lost some constraints/information The previous example was a “lossless” decomposition. Decompose StarsIn(movieTitle, movieYear, starName) into: StarsIn1(movieTitle, movieYear) StarsIn2(movieTitle, starName) ??? movieTitlemovieYear Star wars1977 King Kong1933 King Kong2005 Smaller schemas always good ????

9 Desiredata No sets Correct and faithful to the original design Avoid lossy decompositions As little redundancy as possible To avoid potential anomalies No “inability to represent information” Nulls shouldn’t be required to store information Dependency preservation Should be possible to check for constraints

10 Approach We will encode and list all our knowledge about the schema somehow Functional dependencies (FDs) SSN  name (SSN “implies” length) If two tuples have the same “SSN”, they must have the same “name” movietitle  length --- Not true. But, (movietitle, movieYear)  length --- True. We will define a set of rules that the schema must follow to be considered good “Normal forms”: 1NF, 2NF, 3NF, BCNF, 4NF, … Rules specify constraints on the schemas and FDs

11 Functional Dependencies Let R be a relation schema   R and   R The functional dependency    holds on R iff for any legal relations r(R), whenever two tuples t 1 and t 2 of r have same values for , they have same values for . t 1 [  ] = t 2 [  ]  t 1 [  ] = t 2 [  ] On this instance, A  B does NOT hold, but B  A does hold. 14 1 5 37 A B

12 Functional Dependencies Difference between holding on an instance and holding on all legal relation Title  Year holds on this instance Is this a true functional dependency ? No. Two movies in different years can have the same name. Can’t draw conclusions based on a single instance TitleYearLengthinColorStudioNameprodC#StarName Star wars1977121YesFox128Hamill Star wars1977121YesFox128Fisher Star wars1977121YesFox128H. Ford King Kong1933100noRKO20Fay

13 Functional Dependencies Functional dependencies and keys: A key constraint is a specific form of a FD. E.g. if A is a superkey for R, then: A  R Similarly for candidate keys and primary keys.

14 Definitions A relation instance r satisfies a set of functional dependencies, F, if the FDs hold on the relation F holds on a relation schema R if not legal (allowable) relation instance of R violates it A functional dependency, A  B, is trivial if: B is a subset of A e.g. Movieyear, length  length

15 Definitions 4. Given a set of functional dependencies, F, its closure, F +, is all FDs that are implied by FDs in F. e.g. If A  B, and B  C, then clearly A  C We will see a formal method for inferring this later

16 BCNF Given a relation schema R, and a set of functional dependencies F, if every FD, A  B, is either: Trivial A is a superkey of R Then, R is in BCNF (Boyce-Codd Normal Form) Why is BCNF good ?

17 BCNF What if the schema is not in BCNF ? Decompose (split) the schema into two pieces. Careful: you want the decomposition to be lossless Rule: A decomposition of R into (R1, R2) is lossless, iff: R1 ∩ R2  R1 or R1 ∩ R2  R2


Download ppt "CMSC424: Database Design Instructor: Amol Deshpande"

Similar presentations


Ads by Google