Analytisk relationsdatabasdesign Att förbättra kvaliteten i databaser Presenter s Name Organization name www.horton.com Domän-regler och främmande nyckel regler via DDL Datatyp! Datatyp! Maxvärde! Maxvärde! Min-värde! Min-värde! Tabellerna ovan, inklusive datatyper och främmande nycklar (och andra regler) kan definieras via SQL DDL SQL har en DDL-del (lite mer okänd än DML-delen) DDL Data Definition Language, DML Data Manipulation Language Via DDL definierar vi tabeller, regler etc. Via DML kan vi sen ställa frågor mot de tabeller vi skapat 1
DDL Datatyp! Datatyp! FÖRETAG Företagsnamn: String 1..1 Antal_anställda: Int 1..1 FÖRETAG Företagsnamn Antal_anställda Min-värde! Min-värde! CREATE TABLE FÖRETAG (Företagsnamn Varchar(25) NOT NULL, Antal_anställda Integer NOT NULL, Primary key (Företagsnamn)) DDL Främmande nyckel-regler ANSTÄLLD FÖRETAG Anstnr Mitt_företag Företagsnamn Antal_anställda 11111 22222 33333 Maria Paul Petia SKRUV AB SKRUV AB 2 1 CREATE TABLE ANSTÄLLD (Anstnr String NOT NULL, String NOT NULL, Mitt_företag Varchar(25) NOT NULL, Primary key(anstnr), Foreign key(mitt_företag) REFERENCES FÖRETAG(Företagsnamn) ON DELETE restrict ON UPDATE cascade) 2
DDL Främmande nyckel-regler ANSTÄLLD FÖRETAG Anstnr Mitt_företag Företagsnamn Antal_anställda 11111 Maria 2 22222 33333 Paul Petia SKRUV AB SKRUV AB 1 CREATE TABLE ANSTÄLLD (Anstnr String NOT NULL, String NOT NULL, Mitt_företag Varchar(25) NOT NULL, Primary key(anstnr), Foreign key(mitt_företag) REFERENCES FÖRETAG(Företagsnamn) ON DELETE cascade ON UPDATE cascade) ANSTÄLLD Anstnr 11111 22222 Maria Paul Mitt_företag FÖRETAG Företagsnamn Antal_anställda 2 DDL Främmande nyckel-regler ANSTÄLLD FÖRETAG Anstnr Mitt_företag Företagsnamn Antal_anställda 11111 Maria 2 22222 33333 Paul Petia SKRUV AB SKRUV AB 1 CREATE TABLE ANSTÄLLD (Anstnr String NOT NULL, String NOT NULL, Mitt_företag Varchar(25) NOT NULL, Primary key(anstnr), Foreign key(mitt_företag) REFERENCES FÖRETAG(Företagsnamn) ON DELETE cascade ON UPDATE cascade) ANSTÄLLD Anstnr 11111 22222 33333 Maria Paul Petia Mitt_företag BULTIA AB BULTIA AB SKRUV AB FÖRETAG Företagsnamn BULTIA AB SKRUV AB Antal_anställda 2 1 3
Analytisk relationsdatabasdesign Att förbättra kvaliteten i databaser Presenter s Name Organization name www.horton.com Vad är ett bra relationsdatabasschema? PERSON&BIL Regnr Märke PERSON BIL ÄGANDE Regnr Märke Bil Ägare Den första lösningen är enkel. Men den andra lösningen är mer informativ den grupperar ihop saker som hänger samman och ger på det sättet mer struktur. Sådant som är beroende av varann hålls ihop. Detta kan erhållas genom konceptuell modellering och/eller och analytisk databasdesign (syntaktisk databasdesign påverkar just detta i mindre hög grad) 4
Redundans och uppdateringsanomalier PERSON&BIL 5566 Regnr ABC123 DEF456 GHI789 ABC123 ABC123 XXX999 Stina Märke Volvo Saab Skoda Volvo Volvo Skoda Redundans. Samma faktum upprepas flera gånger I tabellen. Uppdateringsanomalier. När man skall uppdatera en uppgift måste man ändra på flera ställen. Tidskrävande och riskfyllt. Normalformer Normalformsanalys. Genom att studera de funktionella beroendena I en tabell kan man bestämma dess normalform. Om en tabell har en låg normalform kan den ge upphov till problem. Man kan då transformera tabellen så den får en högre normalform. 5
Funktionella beroenden Ett värde på är associerat till högst ett värde på 7788 5566 Greta Olle Stina Funktionella beroenden Gäller det att Regnr? Det skulle betyda att givet ett värde på Regnr så finns högst ett värde på : ABC123 DEF456 GHI789 Olle Men det är tänkbart att en bil ägs av flera personer och då gäller inte det funktionella beroendet: ABC123 DEF456 GHI789 Olle 6
Funktionella beroenden syntax Här skriver man den eller de kolumner som bestämmer andra kolumner Kolumner Kolumner Här skriver man de kolumner som är beroende av kolumnerna till vänster Pil Här skriver man en pil som skiljer kolumnerna från varandra Funktionella beroenden semantik Antag att man har ett funktionellt beroende Det betyder att unikt bestämmer, det vill säga att om två tupler i en tabell har samma värde på så skall de ha samma värde på. Mer precist kan man skriva upp det så här. För varje par av tupler, s och t, i en tabell skall följande gälla: S[] = t[] s[] = t[] Med andra ord: om en s-tuppel (s-rad) och en t-tuppel (t-rad) har samma värde i kolumnen så ska de även ha samma värde i kolumnen! 7
Funktionella beroenden exempel PERSON&BIL Regnr Köpdatum ABC123 060101 DEF456 051231 GHI789 040601 ABC123 050601 ABC123 060601 5566 Stina XXX999 060701 Gäller? Ja Funktionella beroenden exempel PERSON&BIL Regnr Köpdatum ABC123 060101 DEF456 051231 GHI789 040601 ABC123 050601 ABC123 060601 5566 Stina XXX999 060701 Gäller Regnr? Nej 8
Funktionella beroenden övning PERSON&BIL Regnr Köpdatum ABC123 060101 DEF456 051231 GHI789 040601 ABC123 050601 ABC123 060601 5566 Stina XXX999 060701 Gäller Köpdatum? Nej Armstrongs axiom Låt A, B, C, X och D utgöra mängder av attribut (kolumner) (ibland med bara ett element) i en relation R Reflexiva lagen: Om B är en delmängd av A så gäller A B Transitiva lagen: Om A B och B C så gäller A C Additiva lagen: Om A B och A C så gäller A BC Dekomponeringslagen: Om A BC så (A B OCH A C) Augmentativa lagen: Om A B så gäller XA XB 9
Funktionella beroenden inom en klass Det finns ingen bra notation för att visa funktionella beroenden INOM en klass - alltså funktionella beroenden mellan attribut! PERSON : String 1..1 Vikt: Integer 1..1 Adressort: String 1..1 Postnr: Integer 1..1 1..1 ägs_av HUND 0..* : String 1..1 Vikt: Integer 1..1 Favoritmat: String 1..1 Första normalform En tabell är i första normalform om samtliga kolumner i tabellen har atomära domäner. 2233 Inte 1NF Efternamn Persson Nyfjord Förnamn Per, Bo, Ulf Olle Eriksson, Stina 1NF Som vi tidigare definierat domäner och relationsscheman är faktiskt alla tabeller i första normalform 2233 Efternamn Persson Persson Persson Nyfjord Eriksson Eriksson Förnamn Per Bo Ulf Olle Stina 10
Partiellt funktionellt beroende A B kallas ett partiellt funktionellt beroende om det finns ett C som är en äkta delmängd av A och C B. Man säger då att B är partiellt beroende av A. 5566 Regnr ABC123 DEF456 GHI789 CBA321 FED654 IHF987 Stina Märke Volvo Saab Skoda Fiat Skoda Fiat är partiellt beroende av (, Regnr) Märke är partiellt beroende av (, Regnr) B är fullt funktionellt beroende av A om B är funktionellt beroende av A och inte partiellt beroende av A., Regnr, Regnr Märke Regnr Märke Andra normalform En tabell är i andra normalform om varje kolumn som inte ingår i primärnyckeln är fullt funktionellt beroende av primärnyckeln Varje kolumn skall vara beroende av hela nyckeln, inte bara av en del av nyckeln. 5566 Regnr ABC123 DEF456 GHI789 CBA321 FED654 IHF987 Stina Märke Volvo Saab Skoda Fiat Skoda Fiat Denna tabell är inte i andra normalform eftersom inte är fullt funktionellt beroende av primärnyckeln, Regnr, Regnr Märke Regnr Märke 11
Andra normalform - exempel PERSON 2233 Ulf Bo Per Erik Nils Postnr Ort Lund Är denna tabell i andra normalform?, Postnr, Ort Postnr, Ort Postnr Ort Nej, eftersom Postnr och Ort inte är fullt funktionellt beroende av primärnyckeln. Normalisering till andra normalform PERSON Postnr Ort Ulf Bo Per 2233 Lund Erik Nils Postnr, Ort PERSON POST Postnr Ort Ulf Bo 2233 Lund Per 2233 Erik Nils Om det finns ett partiellt funktionellt beroende så bryt ut kolumnerna i detta till en egen tabell. Hurdå? Jo, de kolumner som är beroende av bara en del av nyckeln bryts ut till en egen tabell. Tillsammans med den del av nyckeln som de var beroende av. Vid normaliseringen bildas en främmande nyckel mellan tabellerna: PERSON.() utgör främmande nyckel mot POST.() 12
Andra normalform - övning PRODUKT Produkt Färg Penna Blå Pris 3 Produkt, Färg Pris Produkt Pris Penna Röd 3 Skruv Grön Skruv Vit Skruv Svart Vas Vit PRODUKT Produkt Färg Penna Blå Penna Röd Skruv Grön Skruv Vit Skruv Svart Vas Vit 5 5 5 9 PRIS Produkt Penna Skruv Vas Pris 3 5 9 Normalisera denna tabell till andra normalform! Vid normaliseringen bildas en främmande nyckel mellan tabellerna: PRODUKT.(Produkt) utgör främmande nyckel mot PRIS.(Produkt) Utrymme vs Tid vs Konsistens Titel Författare Librettot Vikt Antal Sidor Förlag Hamlet Shakespeare Once upon.the End. 35 1000 Bonniers Hamlet Shakespeare Once upon.the End. 46 1500 Pierson Hamlet Shakespeare Once upon.the End. 60 2000 Nordstedts etc. Hamlet Shakespeare Once upon.the End. 79 2500 Prentice-Hall 1984 Orwell 20 100 Bonniers etc. Titel, Förlag Författare, Librettot, Vikt, AntalSidor Titel Författare, Librettot Titel Författare Librettot Hamlet Shakespeare Once upon The End. 1984 Orwell Titel Vikt Ant.sid. Förlag Hamlet 35 1000 Bonniers Hamlet 46 1500 Pierson Hamlet 60 2000 Nordstedts etc. 1984 20 100 Bonniers etc. 13
Transitivt beroende C är transitivt beroende av A via B om det finns funktionella beroenden A B och B C, och där det gäller att A inte är funktionellt beroende av B eller C 2233 4455 5566 6677 Postnr 16739 Ort Lund Bromma Lund Postnr, Ort Postnr Ort Ort är transitivt beroende av via Postnr Tredje normalform En tabell är i tredje normalform om och endast om den är i andra normalform, och varje kolumn som inte ingår i primärnyckeln är funktionellt men ej transitivt beroende av primärnyckeln Varje kolumn skall vara beroende av nyckeln, och ingenting annat än nyckeln. 2233 4455 5566 6677 Postnr 16739 Ort Lund Bromma Lund Postnr, Ort Postnr Ort Denna tabell är inte i tredje normalform eftersom Ort är transitivt beroende av 14
Normalisering till tredje normalform POST 2233 4455 5566 Postnr 16739 Ort Lund Bromma Om en kolumn är transitivt beroende av primärnyckeln via en annan kolumn så bryt ut dessa till en egen tabell (kan också vara grupper av kolumner) 6677 POST 2233 4455 5566 6677 Postnr 16739 Lund POSTNR Postnr Ort Lund 16739 Bromma Postnr, Ort Postnr Ort Vid normaliseringen bildas en främmande nyckel mellan tabellerna: POST.(Postnr) utgör främmande nyckel mot POSTNR.(Postnr) Tredje normalform - övning Kurs AA1 BB2 Lärare Sal B A AntalPlatser 100 50 Kurs Lärare, Sal, AntalPlatser Sal AntalPlatser CC3 B 100 DD4 EE5 FF6 Kurs AA1 BB2 CC3 DD4 EE5 FF6 Nils Lärare Nils A C A 50 200 50 Sal B A B A C A Sal A B C Normalisera denna tabell till tredje normalform! AntalPlatser 50 100 200 15
Problem vid ofullständig normalisering Ofullständig normalisering leder till så kallade uppdateringsanomalier: INSÄTTNING: Man kan inte lägga in uppgifter om en sals antal sittplatser om salen ifråga inte används av en kurs BORTTAG: När den enda kursen som en sal används i tas bort så försvinner även alla uppgifter om salen UPPDATERING: Om man bygger om en sal och följdaktligen kanske vill ändra angivelsen av antal platser (om nu salen blivit mindre/större) så måste man ändra på ALLA rader där just denna sal förekommer - risk för inkonsistens! Armstrongs axiom Låt A, B, C, X och D utgöra mängder av attribut (kolumner) (ibland med bara ett element) i en relation R Reflexiva lagen: Om B är en delmängd av A så gäller A B Transitiva lagen: Om A B och B C så gäller A C Additiva lagen: Om A B och A C så gäller A BC Dekomponeringslagen: Om A BC så (A B OCH A C) Augmentativa lagen: Om A B så gäller XA XB 16
Armstrongs axiom en svårare övning Om vi vet att (a) X--> Y (b) Z --> WY (c) YW --> ZX gäller Gäller det då även att (d) Z --> X? SANT. Bevis: Vi använder först dekomponeringslagen på (b): (e) Z --> W OCH (f) Z --> Y Sen använder vi (f) och (e) och additiva lagen och får: (g) Z --> YW Sen tar vi transitiva lagen på (g) och (c) och får: (h) Z --> ZX Slutligen används dekomponeringslagen en gång till på (h) och vi får Z --> X, vilket skulle bevisas. En svårare övning forts. OM vi vet att följande gäller: (a): XY Z (b): ZY W Gäller då följande: (c) XW Z? FALSKT. Visas med ett motbevis: X Y Z W a b c b a m q b Både (a) och ( b) är uppfyllda men INTE (c) 17