Databaser Desig och programmerig Fortsättig på relatiosmodelle: Normaliserig fuktioella beroede ormalformer iformatiosbevarade relatiosschemauppdelig Varför ormalisera? Metod att skydda oss frå dum desig Lagra samma data flera ggr i oöda Ite kua lagra viss iformatio Otydlig betydelse av e tupel som ka komma frå otydlig betydelse av etitetsistas tel.r. pr koto e- Uiversitetet: ER-diagram e- f- tjästerum f- studet aställd e-post 1 ast.r löse m reg. på hålls av jobbar på betyg kurskod 1 läsperiod kurs asv. av 1 istitutio 1 driver projekt år poäg adress budget tidspla Relatiosmodell Uiversitetet Studet (pr, e-, f-, epost, koto, löse) Kurs (, kurskod, läsår, period, poäg, kursasv, istitutio) Aställd (f-, e-, astummer, rum, telefo, istitutio) Istitutio (, adress) Projekt(istitutio,, tidspla, budget) RegistreradPå (studetpr, kursr, läsår, betyg)
Relatioe kurs (exempel) Problem med kurs Kurskod År Nam Läsperiod Poäg Kursasvarig Asv Ist 729G68 2008 Databaser vt2 7.5 Eva Ragemalm IDA 732G16 2008 Databaser vt2 7.5 Eva Ragemalm IDA HIBB31 2006 Databaser Vt1 5 Magus Igmarso IDA HIBB31 2005 Databaser Vt2 5 Eva Ragemalm IDA Samma, poäg och istitutio återkommer: redudas Tar plats. Uppdaterigsaomali Isättigsaomali Borttagigsaomali Otydlig tolkig Hur udvika redudas? Normaliserig 1:a Normalform E metod att fia redudas Normaliserigs-villkor: ormalformer Begrepp: fuktioella beroede kom ihåg: ycklar och primattribut iformatiosbevarade schemauppdelig Alla attribut ska vara atomära (odelbara) Relatiosmodelle atar att alla attribut är odelbara. 2:a ormalform, 3:e ormalform, BCNF baseras på Fuktioella beroede i relatioe.
Fuktioellt beroede X är e delmägd av attribute i e relatio. Om X etydigt bestämmer värdet på ett attribut Y, kallas det att Y är fuktioellt beroede av X eller att X bestämmer Y. X Y X kallas determiat i det fuktioella beroedet. Exempel För ycklar fis alltid fb till alla attribut i hela tupel: ex: Studet {pr} {e-, f-, koto, epost, löse} me äve: {epost} {pr, e-, f-, koto, löse} {koto} {pr, e-, f-, epost, löse} Fuktioella beroede, forts Fuktioella beroede baseras på relatioes sematik. Ett fb ska gälla i alla möjliga istaser av database OBS: Att det fis ett fb X Y betyder ite att det fis ett fb Y X Fuktioella beroede ka härledas Trasitivitet: om X Y och Y Z så X Z Ka iblad vara svårt att avgöra vilket som kom först (ex: pr, koto, löse) Reflexivitet: X X alltid. Om Y"X så X Y Augmetatio: Om X Y och ett fb X Z så har vi också ett fb {XY} Z
Fullt fuktioellt beroede Givet X Y. Om iget attribut ka tas bort ur X uta att vi förlorar det fuktioella beroedet (dvs X är miimal), kallas det fullt fuktioellt beroede, ffb ex: Kurs (, kurskod, läsår, period, poäg, kursasv, istitutio) {kurskod, läsår} {kursasv} FFB {kurskod, läsår} {poäg} Ej FFB för e kurs får ite ädra poäg hur som helst Fullt fuktioellt beroede, forts exemplet kurs {kurskod} {poäg} FFB Ett attribut (poäg) är ej FFB av yckel Adra FFB i Kurs: {kurskod} {} FFB {kurskod} {istitutio} FFB OBS att verklighete styr Adra ormalforme - 2NF Exempel 2NF Defiitio: Ett relatiosschema R är i 2NF om det är i 1:a ormalform och varje icke-primattribut A i R är FFB av varje kadidatyckel i R. Fråga: Är alla attribut som ite är primattribut FFB av alla kadidatycklar? Relatioe Studet (pr, e-, f-, epost, koto, löse) Har FFB: {pr} {e-, f-, löse} {koto} {e-, f-, löse} {epost} {e-, f-, löse}
Exemplet kurs Kurs (, kurskod, läsår, period, poäg, kursasv, istitutio) {kurskod, läsår} {kursasv} FFB {kurskod, läsår} {läsperiod} {kurskod} {poäg} {kurskod} {} {kurskod} {istitutio} FFB FFB FFB FFB Relatiosschemauppdelig Lyft ut det/de problematiska fuktioella beroedet/a till e ege tabell Exempel: Kurs (kurskod,, poäg, istitutio) KursÅr(kurskod, läsår, kursasv, läsperiod) aturlig sammasättig Uppfyller ej 2NF Iformatiosbevarade relatiosschemauppdelig Om vi delar upp e relatio R i relatioera R1 och R2 så kallas uppdelige iformatiosbevarade om R1 atural joi R2 iehåller samma iformatio som R. Iformatiosbevarade relatiosschemauppdelig, exempel Perso(Pr,Nam,Adress) med fuktioella beroede: Pr Nam, Pr Adress, ite Nam Adress Varke mer eller midre pr pr Adress 7908101234 Aa Ågata 3 7908101234 Aa 8112237890 Aa Rydsv.12 8112237890 Aa Adress Ågata 3 Rydsv.12 Aa Aa
Exempel Exempel, forts E firma som admiistrerar adrahadsuthyrig av lägeheter vill hålla reda på kotraktisiformatioe. Ma vill hålla reda på vem hyr vad (kud, kudummer, lägehetsummer, lägehetsadress) är (start och slutdatum) samt till vilke hyra (som är olika för varje lägehet). De lagrar också iformatio om vem som egetlige äger lägehete. För tills vidare -kotrakt registreras slutdatum som ull. Varje perso atas bara hyra varje lägehet e gåg och ka bara hyra e lägehet åt gåge. E ägare ka dock låta firma hatera flera lägeheter. Möjlig relatiosmodell: Kotrakt(kudNr, lghnr, knam, lghadr, start, slut, hyra, ägarnr, änam) Exempel, forts Exempel, forts 1:a ormalform? 2:a ormalform? Fuktioella beroede? Kotrakt(kudNr, lghnr, knam, lghadr, start, slut, hyra, ägarnr, änam) Fb1, 5 och 6 visar kadidatycklara: {kudnr, lghnr}, {lghnr, start} samt {kudnr, start} Primattribut? kudnr, lghnr, start Det iebär att följade attribut är ickeprimattribut: knam, lghadr, slut, hyra, ägarnr, änam 2NF?
Exempel, forts Dela upp relatioe så att de problematiska beroedea får e ege relatio. Kud(kudNr, knam) Lgh(lghNr, lghadr, hyra, ägarnr, änam) Hyra(kudNr, lghnr, start, slut) Är dessa i 2NF? Övig på iformatiosbevarade relatiosschemauppdelig Är iformatioe bevarad? Tredje ormalform - 3NF Defiitio: Ett relatiosschema R är i 3NF om det är i 2NF och det för varje FFB X A som fis i R, gäller ågot av följade villkor: a) X är e superyckel för R b) A är ett primattribut i R Fråga för 3NF: Exempel (3NF) För varje beroede: är X e superyckel eller Y ett primattribut? Dela upp ige. LghIfo(lghNr, lghadr, hyra, ägarnr) Ägare (ägarnr, änam) Kud(kudNr, knam)
Boyce-Codd ormalform - BCNF Ett relatiosschema R är i BCNF om det är i 3NF och för varje beroede X A som fis i R, X är e superyckel för R. Dvs alla determiater är atige e kadidatyckel eller iehåller e (hel). Exempel (BCNF) Fråga för BCNF: är varje determiat e superyckel? LghIfo(lghNr, lghadr, hyra, ägarnr) Ägare (ägarnr, änam) Kud(kudNr, knam) Hyra(kudNr, lghnr, start, slut) 3NF/BCNF Ytterligare exempel Ite alltid möjligt att trasformera ett schema till BCNF och behålla beroedea. 3NF har de flesta av BCNF s fördelar. Det är ite självklart att ma måste uppfylla BCNF. OBS: 3NF tillåter ågo sorts redudas som BCNF ite gör (fuktioella beroede mella primattribut). Atag att uthyrigsfirma ispekterar varje lägehet mella uthyrigara och oterar brister och problem. När ispektio ska göras rekvirerar ma e bil som aväds uder dage. E bil ka dock avädas av flera persoer uder samma dag, me e ispektör bokar samma bil hela dage. E ispektör ka ispektera flera lägeheter uder samma dag, me varje lägehet ispekteras edast e gåg e viss dag.
Exempel på rapport Det fis alltså ett (eller flera) sådaa rapportformulär per lägehet. Fuktioella beroede? Exempel, forts. Facit: lgh(lghnr, lghadr) persoal(pnr, pnam) ispektio(lghnr, idatum, itid, kommetar, pnr) persobil(pnr, idatum, bil)