ÖVNING 10 2NF Hästnamn, KursId, StartDatum, SlutDatum KursId NY! 3NF Hästnamn, Art, NY! NY! NY! NY! KursId, StartDatum, SlutDatum KursId NY!



Relevanta dokument
2NF Hästnamn, KursId, StartDatum, SlutDatum KursId NY!, där RIDKURS.KursId = KURS.KursId 3NF Hästnamn, Art, NY! NY! NY! NY!

ÖVNING 10 2NF Hästnamn, KursId, StartDatum, SlutDatum KursId NY! 3NF Hästnamn, Art, NY! NY! NY! NY! KursId, StartDatum, SlutDatum KursId NY!

Pga att (Nummer och Typ) tillsammans bestämmer övriga attribut funktionellt väljer vi (Nummer, Typ) till primärnyckel:

Logisk databasdesign

Lösningsförslag till Tentamen,

Tentamen 2I1033, IT i Organisationer och Databasteknik lördag 17/4 2004, kl LÖSNINGSFÖRSLAG

Tentamen plus lösningsförslag

Idag. Databaskvalitet(??) Databaskvalitet... Databaskvalitet...

Informationssystem och databasteknik

Karlstads Universitet, Datavetenskap 1

Databaser Design och programmering

Universitetet: ER-diagram

Normalisering. Varför? För att åstadkomma en så bra struktur i databasen som möjligt med minimalt med dubbellagrad info.

Karlstads Universitet, Datavetenskap 1

Konceptuella datamodeller

IT i organisationer och databasteknik

Analytisk relationsdatabasdesign

NORMALISERING. Mahmud Al Hakim

Tentamen Databasmetodik DB:DSK/FK/DVK/ATD/SP/EIT mfl. äldre kurstillfällen Lördag 8 juni kl

Normalisering. Christer Stuxberg Institutionen för Informatik och Media

Lösningsförslag Tentamen, 25 april 03

Grunderna för relationsmodellen!

Tentamen Databasmetodik DB:DSK/FK/DVK/ATD/SP/EIT mfl. äldre kurstillfällen 8 augusti 2013 kl. 9-13

Funktionella beroenden - teori

Föreläsning 6: Normalisering & funktionella beroenden

Kvalitetstänkande. Utgångsläge Samtliga ER-diagram har överförts till scheman

Lösningsförslag till Exempel tentamen

Relationell databasdesign

Tentamen EIT:DB Databastmetodik 11/ kl Lösningsförslag

Föreläsning 4 Dagens föreläsning går igenom

Tentamen i Databasteknik

TENTAMEN. För kursen. Databasteknik. Ansvarig för tentamen: Cecilia Sönströd. Förfrågningar: Anslås inom 3 veckor

TENTAMEN. För kursen. Databasteknik. Ansvarig för tentamen: Cecilia Sönströd. Förfrågningar: Anslås inom 3 veckor

Exempel tentamen. Skriv bara på en sida av pappret Skriv namn på varje papper Skriv läsligt, annars rättas inte tentamen Alla hjälpmedel är tillåtna

Idag. Hur vet vi att vår databas är tillräckligt bra?

Programdesign, databasdesign. Databaser - Design och programmering. Funktioner. Relationsmodellen. Relation = generaliserad funktion.

Concepts learned this far. ER till relationer. ER till relationer. ER till relationer. TDDD12 Database Technology

Vad är en databas? Databaser. Relationsdatabas. Vad är en databashanterare? Vad du ska lära dig: Ordlista

Vad är en databas? Databaser. Relationsdatabas. Vad är en databashanterare? Vad du ska lära dig: Ordlista

Exempel-Tentamen III

Föreläsning 3 Transformation från konceptuell datamodell till relationsschema ( Syntetisk databasdesign ) Vad är ett databashanteringssystem?

Föreläsning 4 Transformation från konceptuell datamodell till relationsschema ( Syntetisk databasdesign ) Normalisering (Analytisk databasdesign)

Relationsdatabasdesign

Databaser - Design och programmering. Relationsmodellen. Relationer - som tabeller. Relationer som tabeller. Alternativa notationer: Relationsschema

Exempel-tentamen 1. + Lösningsförslag. Inga hjälpmedel är tillåtna.

Relationsmodellen och syntetisk databasdesign

Tentamen Databasteknik

TENTAMEN För kursen. Databasteknik. Ansvarig för tentamen: Anna Palmquist. Förfrågningar: Anslås inom 3 veckor

Inst. för Data- och Systemvetenskap SU Maria Bergholtz. Tentamen. 21/ kl Inga hjälpmedel är tillåtna (annat än ordbok).

Tentamen för DD1370 Databasteknik och informationssystem

Skriftlig tentamen i kurserna TDDD12 och TDDB48 Databasteknik kl

TENTAMEN. För kursen. Databasteknik. Ansvarig för tentamen: Cecilia Sönströd. Förfrågningar: Anslås inom 3 veckor

Databasteori. Övningar

Databasdesign. E-R-modellen

Tentamen för DD1370 Databasteknik och informationssystem

TDDI60 Tekniska databaser

Databaser och databasdesign. Den relationella modellen, normalisering och modellering (2)

Lösningsförslag, tentamen i Databaser

TENTAMEN. För kursen. Databasteknik. Ansvarig för tentamen: Cecilia Sönströd. Förfrågningar: Anslås inom 3 veckor

Tentamen för DD1370 Databasteknik och informationssystem

Tentamen. Databasmetodik Lördag 27 september 2014 kl

Tentamen. i Databasteknik. lördagen den 13 mars Tillåtna hjälpmedel: Allt upptänkligt material

Lite om databasdesign och modellering

Uppdelning. Relationell databasdesign, FB Teori Låt R vara ett relationsschema. R 1, R 2,..., R n är en uppdelning av

TENTAMEN. TDDD12 Databasteknik TDDD46 Databasteknik. 16 augusti 2010, kl 14-18

Tentamen DATABASTEKNIK - 1DL116

Databasteori Övningar

TENTAMEN TDDB77 Databaser och Bioinformatik 12 juni 2007, kl 14-18

Karlstads Universitet, Datavetenskap 1

Del 2: ER-modellering och överföring till Databasstruktur v0.9

TENTAMEN TDDB77 Databaser och Bioinformatik 15 mars 2002, kl 14-18

Tentamen NDA01G Öppen för alla. Tentamenskod: Inga hjälpmedel är tillåtna

Informationssystem och Databasteknik

Tentamen i Databasteknik

Tentamen. TDDB38 - Databasteknik

GIS, databasteknik och kartografi. Kursmaterial för databasdelen

Informationssystem och Databasteknik

Databasteori. Övningar

Lösningar till tentamen i EDAF75

TER3. Försättsblad till skriftlig tentamen vid Linköpings universitet G28 TEN1 Webprogrammering och databaser Tentamen IDA 1 (7)

Tentamen i. Databasteknik

Tentamenskod: Tentamensdatum: Tid: 14:00-19:00. Inga hjälpmedel är tillåtna

Skriftlig tentamen i kurserna TDDD12 och TDDB48 Databasteknik kl

Databaser. Vad du ska lära dig: Ordlista

Fiktiv tentamen för DD1370 Databasteknik och informationssystem

Tentamen för DD1370 Databasteknik och informationssystem

Tentamen och lösning,

DIVISIONSEXEMPEL RELATIONSALGEBRA OCH SQL. r s använder vi för att uttrycka frågor där ordet alla figurerar:

Tentamen ISGB01 (delkurs i ISGB24) Databasdesign 7,5 Poäng

TENTAMEN TDDB77 Databaser och Bioinformatik 17 mars 2005, kl 8-12

Tentamen för DD1370 Databasteknik och informationssystem

TENTAMEN TDDD12 Databasteknik 7 januari 2010, kl 14-18

Webbprogrammering, grundkurs 725G54

Databasteori. Övningar

Lösningsförslag till fiktiv tentamen för DD1370 Databasteknik och informationssystem

Grundläggande 1 övningar i kombinatorik

Transkript:

ÖVNING 10 2NF HÄST (Hästnamn, Mankhöjd, Favoritmat, Art, Medelvikt, Spiltnummer, Bredd, Höjd) PERSON(Personnummer, Namn, Adress, Telefon) RIDKURS(KursId, StartDatum, SlutDatum, Ledare) KURS(KursId, Svårighetsgrad) NY! 3NF HÄST (Hästnamn, Mankhöjd, Favoritmat, Art, Spiltnummer) ART(Art, Medelvikt) NY! NY! SPILTA(Spiltnummer, Bredd, Höjd) NY! NY! PERSON(Personnummer, Namn, Adress, Telefon) RIDKURS(KursId, StartDatum, SlutDatum, Ledare) KURS(KursId, Svårighetsgrad) NY!

ÖVNING 11 a) PERSON(Namn, Ålder, Stad, Land) Följande funktionella beroenden råder: Namn Ålder, Stad, Land Stad Land Denna tabell är inte ens i 3NF men väl i 2NF (om vi förutsätter att den är i 1NF). Den är i 2NF eftersom alla icke-nyckel attribut är fullständigt funktionellt beroende av primärnyckeln. Vi har ju bara ett attribut i nyckeln och då måste vi alltid ha 2NF om vi överhuvudtaget har 1NF. Men tabellen är inte i 3NF (och därmed inte heller i BCNF) eftersom det finns ett funktionellt beroende mellan två icke-nyckel attribut nämligen Stad Land och därmed ett transitivt beroende mellan ett icke-nyckelattribut och nyckeln. Varken STAD eller LAND ingår ju i primärnyckel eller eventuella kandidatnycklar (har vi inga här). Alltså måste vi först ordna till 3NF och sen kontrollera om vi på köpet hamnade i BCNF eller om vi måste gå vidare för att komma dit. Men först övergår vi till 3NF: PERSON(Namn, Ålder, Stad) STAD(Stad, Land) Dessa tabeller är i såväl 3NF som BCNF. Att de är i 3NF beror på att inga transitiva beroenden finns mellan icke-nyckelattributen och nyckeln. Att tabellerna är i BCNF beror på att ALLA determinanter är kandidatnycklar. (De enda funktionella beroenden vi hade var ju Namn Ålder, Stad respektive Stad Land och både Namn och Stad är ju primärnycklar. OBS att Stad i tabellen PERSON inte längre utgör en determinant i denna tabell. Det kan även vara bra att kontrollera om nedbrytning var non-loss. Jag gör det genom att JOIN:a PERSON med STAD-LAND och kontrollera att jag bara får tillbaka de tupler jag ursprungligen hade. Om jag får det så är dekomponeringen non-loss! Jag gör en NATURAL JOIN dvs. FN-attributet STAD kommer bara med en gång: Vi utgår från följande exempel tupler (där alla funktionella beroenden är uppfyllda): PERSON NAMN ÅLDER STAD LAND Maria 8 S-tälje Sverige Lisa 7 Säffle Sverige Detta blev (efter 3NF-nedbrytning) : PERSON STAD-LAND NAMN ÅLDER STAD STAD LAND Maria 8 S-tälje S-tälje Sverige Lisa 7 Säffle Säffle Sverige

NATURAL JOIN på PERSON och STAD-LAND: (jag återgår till det gamla namnet PERSON på den resulterande tabellen) PERSON NAMN ÅLDER STAD LAND Maria 8 S-tälje Sverige Lisa 7 Säffle Sverige Samma tupler som vi ursprungligen hade, dvs dekomponeringen var non-loss! b) FÖRELÄSNING(Kurs, Lärare, Tid) Följande funktionella beroenden råder: Kurs Lärare Lärare, Tid Kurs FÖRELÄSNING(Lärare, Tid, Kurs) där alltså valts till PN = Lärare, Tid (En alternativ primärnyckel är Kurs+Tid) Gör en exempellistning som visar beroendena: FÖRELÄSNING LÄRARE TID KURS Maria oktober *62 Maria november *62 Petia november *58 Maria december DSVL1:5 Vi testar beroendena ett och ett: först Lärare,Tid Kurs: Eftersom alla fyra tuplerna har OLIKA värden på kombinationen Lärare,Tid så måste beroendet Lärare, Tid Kurs vara uppfyllt! Nu provar vi om Kurs Lärare håller: * 62 har bara ett värde på lärare nämligen Maria *58 har bara ett värde på lärare nämligen Petia DSVL1:5 har bara ett värde på lärare nämligen Maria Dvs även beroendet Kurs Lärare håller! Nu ska vi kontrollera om tabellen är i BCNF: Den är i 3NF (den är i 2NF eftersom det enda icke-nyckelattributet, Kurs, är fullständigt funktionellt beroende av primärnyckeln. Den är i 3NF eftersom det inte finnas några transitiva beroenden mellan vårt enda icke-nyckelattribut och nyckeln).

Men, den är INTE i BCNF eftersom vi har en determinant ("det som står till vänster i ett funktionellt beronde") som INTE är en kandidatnyckel nämligen KURS. Alltså måste vi bryta ner tabellen FÖRELÄSNING till (till exempel...): KURS-LÄRARE KURS LÄRARE *62 Maria *58 Petia DSVL1:5 Maria LÄRARE-TID LÄRARE TID Maria oktober Maria november Petia november Maria december Nu är tabellerna i BCNF (De är i 3NF och alla determinanter är kandidatnycklar). Vi provar även här att testa om komponeringen är non-loss eller inte: Vi gör alltså NATURAL JOIN över LÄRARE-TID Och KURS-LÄRARE (även här återtar jag namnet FÖRELÄSNING på den resulterande tabellen). FÖRELÄSNING LÄRARE TID KURS Maria oktober *62 Maria oktober DSVL1:5 Maria november *62 Maria november DSVL1:5 Petia november *58 Maria december *62 Maria december DSVL1:5 Här har vi fått tre NYA tupler (som inte fanns i ursprungliga föreläsningen) nämligen andra, fjärde och sjunde tupeln. Dekomponeringen var alltså INTE non-loss. De funktionella beroendena är inte längre uppfyllda t ex har samma kombinationa av LÄRARE,TID (Maria, Oktober i första och andra tupeln) TVÅ OLIKA värden på KURS!

Vi provar istället med att göra följande nedbrytning: KURS-LÄRARE KURS LÄRARE *62 Maria *58 Petia DSVL1:5 Maria KURS-TID KURS TID *62 oktober *62 november *58 november DSVL1:5 december Och så slår vi ihop dem via NATURAL JOIN igen: LÄRARE TID KURS Maria oktober *62 Maria november *62 Petia novmeber *58 Maria december DSVL1:5 Jepp, bara de tupler som ursrpungligen fanns! Se Fundamentals sid 495!

NEDAN GES ETT RELATIONSDATABASSCHEMA FÖR ADMINISTRATION av kurser, kursanmälningar och tentamensresultat vid en skola. Schemat är inte i 3NF (nycklar är i fetstil). a) Skriv upp alla funktionella beroenden som finns. Här får Du själv göra egna antaganden. b) Överför det givna schemat till ett schema i 2NF. Ange nycklar och främmande nycklar. c) Överför schemat från b) till ett schema i 3NF. Ange nycklar och främmande nycklar. STUDENT(Namn, Kurs, StartDatum, Ålder, Intagningsår, KursResultat) KURS(Kurs, StartDatum, AntalPoäng, Kursansvarig, Assistenter, LadokKod, AntalStuderande) TENTAMENSFRÅGA(Kurs, Tentamensdatum, Student, Fråga, MaxPoäng, StudentsErhållnaPoäng, GränsFör3, GränsFör4, GränsFör5, AntalGodkändaStudenter) LEKTION(Sal, Tid, Kurs, LadokKod, Byggnad, ByggnadGatuadress, Lärare, LärareTelNr, LektionsNr, Dator) LektionsNr anger numret på den aktuella lektionen (t.ex. Seminarium 4 inom en kurs 2I-1100). Dator är en Boolean som anger om datorutrustning behövs för lektionen. Lösningsförslag: a) Givna funktionella beroenden: Namn, Kurs, StartDatum Ålder, Intagningsår, Kursresultat Kurs, Startdatum AntalPoäng, Kursansvarig, Assistenter, LadokKod, AntalStuderande) Kurs, Tdat, Student, Fråga MaxPoäng, StudPoäng, GränsFör3, GränsFör4, GränsFör5, AntalG) Sal, Tid, Kurs (LadokKod, Byggnad, Byggnadsadress, Lärare, LärarTelnr, LektionsNr, Dator) Förslag på ytterligare funktionella beroenden: Student Ålder Kurs Antal_poäng, LadokKod Kurs, Tdat, Fråga MaxPoäng Kurs, Tdat Gränsför3, Gränsför4, Gränsför5, AntalG Lärare LärarTelnr Byggnad Byggnadsadress Lektionsnr Dator Om dessa är alla så hamnar vi i 2NF via: STUDENT(Namn, Kurs, StartDatum, Intagningsår, KursResultat) STUDENTUPPGIFT(Student, Ålder) KURS(Kurs, Antal_poäng, LadokKod) KURSTILLFÄLLE(Kurs, StartDatum, Kursansvarig, Assistenter, AntalStuderande) (Här förutsätts att assistenter inte är flervärd) TENTAMENSFRÅGA(Kurs, Tdat, Fråga, MaxPoäng) TENTAMEN(Kurs, Tentamensdatum, GränsFör3, GränsFör4, GränsFör5, AntalGodkändaStudenter) STUDRESULTATPERFRÅGA(Kurs, Tentamensdatum, Student, Fråga,StudentsErhållnaPoäng) LEKTION(Sal, Tid, Kurs, LadokKod, Byggnad, ByggnadGatuadress, Lärare, LärareTelNr, LektionsNr, Dator)

Och i 3NF via: STUDENT(Namn, Kurs, StartDatum, Intagningsår, KursResultat) STUDENTUPPGIFT(Student, Ålder) KURS(Kurs, Antal_poäng, LadokKod) KURSTILLFÄLLE(Kurs, StartDatum, Kursansvarig, Assistenter, AntalStuderande) (Här förutsätts att assistenter inte är flervärd) TENTAMENSFRÅGA(Fråga, MaxPoäng) TENTAMEN(Kurs, Tentamensdatum, GränsFör3, GränsFör4, GränsFör5, AntalGodkändaStudenter) STUDRESULTATPERFRÅGA(Kurs, Tentamensdatum, Student, Fråga,StudentsErhållnaPoäng) LEKTION(Sal, Tid, Kurs, LadokKod, Byggnad, Lärare, LektionsNr) BYGGNAD(Byggnad, ByggnadsGatuAdress) LÄRARE(Lärare, LärarTelefonnr) UTRUSTNINGSBEHOV(LektionsNr, Dator)