Presensational content template slides Relationsmodellen och syntetisk databasdesign Den teoretiska grunden för relationsdatabaser Från konceptuellt schema till databas Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. Relationsmodellen Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. Bil Ägare En En relationsdatabas relationsdatabas är är en en databas databas som som uppfattas uppfattas av av användaren användaren som som en en samling samling tabeller tabeller -- oberoende oberoende av av hur hur datamängden datamängden fysiskt fysiskt är är lagrad. lagrad. Relationsmodellen Relationsmodellen är är grunden grunden för för relationsdatabaserna. relationsdatabaserna. 1 Presensational content template slides Relationsmodellens grundbegrepp Tabell/Relationsnamn Varje tabell identifieras av sitt namn Relationsschema (tabell-definition) En lista av attribut (kolumner) som specificerar vad relationen handlar om Attribut (kolumn) En etikett som kan användas för att beskriva data i en tabell . Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. TABELLNAMN Personnr: String Namn: String Ålder: Integer Lön: Integer 1122 Eva 22 19000 2233 Olle 33 29000 3344 Erik 44 39000 4455 Pelle 55 49000 5566 Stina 66 59000 Tuppel (rad) En lista, en n-tuppel, av värden som passar med relationsschemat Domän En mängd av värden som används för att ange tillåtna värden hos en kolumn Relation (tabell) En mängd av tupler Ett relationsschema Tabell/Relationsnamn Varje tabell identifieras av sitt namn Relationsschema (tabelldefinition) En lista av attribut (kolumner) som specificerar vad relationen handlar om TABELLNAMN Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. Personnr: String Namn. String Ålder: Integer Lön: Integer Graden Graden för för ett ett relationsschema relationsschema är är lika lika med med antalet antalet kolumner kolumner ii schemat. schemat. II detta detta exempel exempel är är graden graden 4. 4. Attribut (kolumn) En etikett som kan användas för att beskriva data I en tabell Domän En mängd av värden som används för att ange tillåtna värden hos en kolumn Ett relationsschema kan skrivas linjärt på följande enkla sätt (där identifierande attribut vanligen är understruket): TABELLNAMN(Personnr, Namn, Ålder, Lön) 2 Presensational content template slides Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. En relation Personnr: String Namn: String Ålder: Integer Lön: Integer 1122 Eva 22 19000 2233 Olle 33 29000 3344 Erik 44 39000 4455 Pelle 55 49000 5566 Stina 66 59000 Kardinaliteten Kardinaliteten för för en en relation relation är är lika lika med med antalet antalet tuppler tuppler ii schemat. schemat. II detta detta exempel exempel är är kardinaliteten kardinaliteten 5. 5. Relation (tabell) En mängd av tupler Tuppel (rad) En lista, en n-tuppel, av värden som passar med relationsschemat Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. Relationer och relationsscheman Personnr: String Namn: String Ålder: Integer Lön: Integer 1122 Eva 22 19000 2233 Olle 33 29000 3344 Erik 44 39000 4455 Pelle 55 49000 5566 Stina 66 59000 Personnr: String Namn: String Ålder: Integer Lön: Integer 1122 Lisa 22 19000 2233 Pia 33 29000 6677 Nils 77 69000 4545 Pelle 44 29000 7788 Greta 55 59000 Det Det kan kan finnas finnas flera flera relationer relationer som som instansierar instansierar samma samma relationsschema. relationsschema. 3 Presensational content template slides Egenskaper hos relationer En relation är en mängd Varje rad (tuppel) är unik En mängd har inga dublett-element! Ordningen mellan raderna är oväsentlig Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. Elementen i en mängd är oordnade! Men, Men, fysiskt, fysiskt, då, då, raderna raderna måste måste väl väl ändå ändå ligga ligga ii någon någon slags slags ordning? ordning? Javisst, Javisst, på på en en dators dators hårddisk hårddisk kommer kommer raderna raderna förstås förstås att att ligga ligga på på olika olika ställen, ställen, eventuellt eventuellt sorterade sorterade ii sekvens. sekvens. Användaren Användaren behöver behöver dock dock inte inte känna känna till till något något om om hur hur raderna raderna ligger ligger lagrade lagrade fysiskt fysiskt för för att att kunna kunna använda använda databasen! databasen! När När man man optimerar optimerar databaser databaser måste måste man man dock dock ta ta hänsyn hänsyn till till hur hur raderna raderna är är sorterade sorterade fysiskt. fysiskt. Egenskaper hos relationer En relation är en mängd Varje rad (tuppel) är unik En mängd har inga dublett-element! Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. PERSON PERSON Personnr Namn Personnr Namn 111111-1111 Olle 111111-1111 Olle 111111-2222 Pelle 111111-1111 Olle 999999-9999 Lisa 999999-9999 Lisa Relation Ej relation! 4 Presensational content template slides Egenskaper hos relationer En relation är en mängd Ordningen mellan raderna är oväsentlig Elementen i en mängd är oordnade! Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. PERSON PERSON Personnr Namn Personnr Namn 111111-1111 Olle 111111-2222 Pelle 111111-2222 Pelle 111111-1111 Olle 999999-9999 Lisa 999999-9999 Lisa Samma relation Egenskaper hos relationer En rad är en n-tuppel Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. Ordningen mellan attributen är väsentlig! Personnr Namn Vikt 111111-1111 Olle 81 111111-2222 Pelle 59 …. …. 999999-9999 Lisa En 63 tabe ll! Olika tabeller! Namn Personnr Vikt Olle 111111-1111 81 Pelle 222222-2222 59 …. …. Lisa 999999-9999 En an ann ell! tab 63 5 Presensational content template slides Nycklar Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. Ett Ett sätt sätt att att visa visa vad vad som som utgör utgör primärnyckelprimärnyckelkolumn kolumn (kolumner (kolumner om om primärnyckeln primärnyckeln är är sammansatt) sammansatt) är är att att stryka stryka under under den! den! Personnr Namn Vikt 111111-1111 Olle 81 111111-2222 Pelle 59 …. …. 999999-9999 Lisa 63 En nyckel är en mängd attribut (t ex ett) som unikt identifierar en rad. Mängden av alla sådana möjliga nycklar för en viss tabell kallas tabellens kandidatnycklar. Det nyckel som av databas-administratören valts att användas som identifierare av en rad kallas primärnyckel – de övriga nycklarna kallas, efter valet av primärnyckel, för alternativnycklar. Övning - primärnyckel FILMVISNING Filmtitel Biograf Startid Pris Vilka attribut identifierar en rad unikt? Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. Filmtitel Filmtitel, Biograf Filmtitel, Biogfraf, Starttid Filmtitel, Biograf, Startid, Pris 6 Presensational content template slides En möjlig lösning - primärnyckel FILMVISNING Filmtitel Biograf Startid Pris Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. Filmtitel Filmtitel, Biograf Filmtitel, Biogfraf, Starttid Filmtitel, Biograf, Startid, Pris Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. NULL-värde Regnr Märke Ägare ABC123 Volvo Pelle DEF456 Saab Eva GHI789 Skoda NULL NULL används för att beteckna ett ’okänt’ värde på ett visst attribut på en viss rad. NULL-värden anses problematiska eftersom de kan tolkas på olika sätt. Vad betyder NULL? Värde finns men är okänt, just nu. Det kanske registreras en ägare till bil GHI789 senare Värde är ej tillämpligt (på alla rader, jfr ”arvs-hierarkier”) Värde saknas 7 Presensational content template slides Primärnyckel Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. PERSON Personnr Namn Vikt 111111-1111 Olle 81 111111-2222 Pelle 59 …. …. 999999-9999 Lisa 63 Att Att välja välja en en kolumn kolumn (eller (eller flera flera kolumner) kolumner) till till primärnnyckel primärnnyckel innebär innebär att att ingen ingen del del av av dessa dessa kolumner kolumner någonsin någonsin får får vara vara NULL NULL (primärnyckelns (primärnyckelns roll roll är är ju ju att att identifiera identifiera en en rad rad och och den den måste måste alltså alltså alltid alltid finnas!). finnas!). Alternativnycklar Alternativnycklar får får däremot däremot vara vara NULL NULL (men (men måste måste inte inte vara vara det). det). Denna Denna regel regel brukar brukar kallas kallas entity entity integrity. integrity. Vad är en främmande nyckel? Kolumen Kolumen ‘Ägare’ ‘Ägare’ ii tabellen tabellen BIL BIL utgör utgör främmande främmande nyckel nyckel mot mot primärnyckeln primärnyckeln ii tabellen tabellen PERSON PERSON BIL Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. PERSON Personnr Namn Regnr Ägare 111111-1111 Olle ABC123 111111-1111 111111-2222 Pelle DEF111 222222-2222 222222-2222 Pelle BEF222 999999-8888 999999-8888 Lisa TAX455 999999-8888 En främmande nyckel i en tabell är ett eller flera attribut som refererar till primärnyckeln i en ANNAN tabell (eller i vissa specialfall mot samma tabell) Alla kolumnvärden som förekommer i främmande nyckel-kolumnerna (kolumnen) måste motsvaras av värden i den tabell som den främmande nyckeln refererar till, eller också vara NULL. Denna regel brukar kallas referential integrity 8 Presensational content template slides Vad är en främmande nyckel? BIL Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. PERSON Personnr Namn Regnr Ägare 111111-1111 Olle ABC123 111111-1111 111111-2222 Pelle DEF111 222222-2222 222222-2222 Pelle BEF222 777777-1111 999999-8888 Lisa TAX455 999999-8888 Brott Brott mot mot referential referential integrity integrity – – främmande främmande nyckelnyckelvärdet värdet ‘777777-1111’ ‘777777-1111’ refererar refererar inte inte till till något något existerande existerande primärnyckelvärde! primärnyckelvärde! Främmande nycklar - syntax HOTELL KUND Pnr Rum Hotellnamn Antal_stjärnor Hotell } RUM Rumsnr Hotellnamn Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. } Främmande Främmande nycklar nycklar kan kan specificeras specificeras grafiskt, grafiskt, som som ovan, ovan, via via pilar. pilar. Pilen Pilen utgår utgår från från den den (de) (de) kolumn kolumn (-er) (-er) som som utgör utgör främmande främmande nyckel nyckel och och pekar pekar på på motsvarande motsvarande primärnyckel-kolumner. primärnyckel-kolumner. Ett Ett annat annat sätt sätt är är att att skriva skriva ut ut vilka vilka främmande främmande nyckel-kolumner nyckel-kolumner som som svarar svarar mot mot vilka vilka primärnyckel-kolumner. primärnyckel-kolumner. II fallet fallet ovan ovan har har KUND KUND en en sammansatt sammansatt främmande främmande nyckel nyckel mot mot RUM RUM och och RUM RUM har har en en främmande främmande nyckel nyckel mot mot HOTELL: HOTELL: KUND.(Rum, KUND.(Rum, Hotell) Hotell) utgör utgör FN FN mot mot RUM.(Rumsnr, RUM.(Rumsnr, HotellNamn) HotellNamn) RUM.Hotellnamn RUM.Hotellnamn utgör utgör FN FN mot mot HOTELL.Hotellnamn HOTELL.Hotellnamn 9 Presensational content template slides Surrogatnycklar BOENDE Namn Från Till Olle 2000-08-28 2000-09-01 Lisa 1999-09-01 2006-01-02 Petia 2004-05-06 2004-05-07 Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. Vanliga användardefinierade nycklar kan vara bristfälliga på olika sätt: De förändras över tid. T ex kan verksamhetsreglerna ändras, det attribut som en gång var unikt kanske inte längre är det Olika användargrupper kan använda olika kolumner för att identifiera en och samma tabell Nycklar bestående av “riktiga” attribut kan bli mycket långa (i värsta fall alla kolumnerna i tabellen) En En surrogatnyckel surrogatnyckel är är en en konstgjord konstgjord identifierare, identifierare, genererad genererad av av databashanteringssystemet databashanteringssystemet som som garanterar garanterar att att den den alltid alltid är är unik. unik. Surrogatnycklar el ck y n t ga rro u S Id Namn Från Till 111111-1111 Olle 2000-08-28 2000-09-01 111111-2222 Pelle 1999-09-01 2006-01-02 999999-8888 Lisa 2004-05-06 2004-05-07 Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. Användarna behöver inte vara medvetna om surrogatet Surrogatnycklar är vanligen inte synliga i användargränssnitt mot databasen. Fortfarande har man alltså behov av att kunna använda ‘naturliga’ attribut (som Namn, Från, Till, etc.) i sökningar mot databasen Analys av vilka naturliga kolumner som eventuellt identifierar en rad skall alltså alltid göras oberoende av om surrogatnyckel används eller ej Surrogatet används dock internt som en unik identifierare och även i främmande nyckel-referenser 10 Presensational content template slides Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. Syntetisk databasdesign – från konceptuellt schema till relationsdatabasschema: översättningsregler Klassiagram Relationsdatabasschema Klass Tabell Envärt attribut Kolumn Flervärt attribut Tabell + främmande nyckel 0/1:1 association Främmande nyckel/tabell 0/1:M association Generalisering Främmande nyckel/tabell Tabell + främmande nycklar Främmande nyckel/tabell Regler Nyckel, främmande nyckel Regler Domändef, triggers etc. M:M association Från klass till tabell PERSON Personnr: String 1..1 Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. Namn: String 1..1 Varje Varje klass klass ii klassdiagrammet klassdiagrammet översätts översätts till till en en tabell tabell ii relationsdatabasschemat. relationsdatabasschemat. Attributen Attributen ii klassen klassen ger ger upphov upphov till till kolumner kolumner och och ibland ibland till till nya nya klasser. klasser. Klassens Klassens identifierande identifierande attribut attribut blir blir en en nyckel nyckel ii tabellen. tabellen. PERSON Personnr Namn 11 Presensational content template slides Från envärt attribut till kolumn PERSON Varje Varje envärt envärt attribut attribut ii en en klass klass ger ger upphov upphov till till en en kolumn kolumn II motsvarande motsvarande tabell. tabell. Personnr: String 1..1 Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. Namn: String 1..1 PERSON Personnr Namn Från flervärt attribut till tabell Varje Varje flervärt flervärt attribut attribut ger ger upphov upphov till till en en extra extra tabell. tabell. PERSON Personnr: String 1..1 Namn: String 1..1 Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. Titel: String 1..* Primärnyckeln Primärnyckeln ii den den nya nya tabellen tabellen är är sammansatt sammansatt av av det det flervärda flervärda attributet attributet tillsammans tillsammans med med den den gamla gamla primärnyckelprimärnyckelkolumnen. kolumnen. Den Den nya nya tabellen tabellen har har en en främmande främmande nyckelnyckelkolumn som refererar kolumn som refererar till till primärnyckeln primärnyckeln ii den den första första tabellen. tabellen. TITEL PERSON Personnr Namn Personnr Titel 12 Presensational content template slides Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. Översättning av associationer Varje Varje 1:1 1:1 eller eller 0:1 0:1 association association mellan mellan två två klasser klasser kan kan översättas översättas som som en en främmande främmande nyckel nyckel mellan mellan de de två två tabeller tabeller som som svarar svarar mot mot klasserna. klasserna. Men Men om om man man har har en en 0:1 0:1 association association så så kan kan man man väl väl råka råka ut ut för för NULL-värden? NULL-värden? Jo, Jo, så så är är det det och och NULLNULLvärden värden vill vill man man ju ju helst helst undvika. undvika. Därför Därför kan kan man man ibland ibland behöva behöva introducera introducera extra extra tabeller tabeller vid vid översättning översättning av av associationer. associationer. Från 0:1 association till främmande nyckel-kolumn PERSON BIL 0..1 Personnr: String 1..1 Namn: String 1..1 Märke: String 1..1 BIL PERSON Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. 0..1 Regnr: String 1..1 äger Personnr Namn Regnr Märke Ägare 1122 Pelle ABC123 Volvo Pelle 2233 Eva DEF456 Saab Eva 3344 Nisse GHI789 Skoda NULL En En association association med med max-värde max-värde 1 1 ii BÅDA BÅDA rollerna rollerna ger ger upphov upphov till till en en främmande främmande nyckel nyckel ii endera endera tabellen! tabellen! Vi Vi får får välja! välja! Vet Vet vi vi att att fler fler PERSON:er PERSON:er saknar saknar BIL BIL än än BIL:ar BIL:ar som som saknar saknar ägare ägare så så väljer väljer vi vi lösningen lösningen ovan! ovan! Men Men NULL-problem NULL-problem blir blir det det hursomhelst hursomhelst eftersom eftersom båda båda rollerna rollerna har har 00 ii minimivärde! minimivärde! 13 Presensational content template slides Från 0:1 association till extra tabell PERSON BIL 0..1 0..1 Regnr: String 1..1 äger Personnr: String 1..1 Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. Namn: String 1..1 PERSON Märke: String 1..1 BILÄGANDE BIL Personnr Namn Ägare Bil Regnr Märke 1122 Pelle Pelle ABC123 ABC123 Volvo 2233 Eva Eva DEF456 DEF456 Saab 3344 Nisse GHI789 Skoda II denna denna översättning översättning introducerar introducerar vi vi en en extra extra tabell tabell för för att att hantera hantera associationen associationen ”äger”. ”äger”. På På detta detta sätt sätt undviker undviker man man NULL-värden. NULL-värden. Från 0/1:M association till främmande nyckel-kolumn PERSON BIL 0..1 Personnr: String 1..1 Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. Namn: String 1..1 Märke: String 1..1 Notera Notera att att ‘M’ ‘M’ (“många”) (“många”) också också ofta ofta symboliseras symboliseras av av ‘*’ ‘*’ eller eller ‘n’ ‘n’ BIL PERSON Personnr 0..* Regnr: String 1..1 äger Namn Regnr Märke Ägare En En 0:M 0:M eller eller 1:M 1:M (där (där alltså alltså EN EN av av rollerna rollerna har har M M som som max-värde) max-värde) association association översätts översätts till till en en främmande främmande nyckel. nyckel. Den Den nya nya kolumnen kolumnen placeras placeras på på ”många-sidan”, ”många-sidan”, d.v.s. d.v.s. ii den den tabell tabell som som svarar svarar mot mot den den klass klass som som ligger ligger på på många-sidan många-sidan av av associationen. associationen. Just Just här, här, eftersom eftersom båda båda rollerna rollerna dessutom dessutom har har 00 ii minimivärde minimivärde så så gäller gäller samma samma NULL-problematik NULL-problematik som som ii tidigare tidigare bild. bild. 14 Presensational content template slides Från M:M association till extra tabell PERSON BIL 0..* 0..* Regnr: String 1..1 äger Personnr: String 1..1 Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. Namn: String 1..1 BILÄGANDE PERSON Personnr Märke: String 1..1 Namn Ägare BIL Bil Regnr Märke En En M:M M:M association association måste måste alltid alltid översättas översättas till till en en extra extra tabell. tabell. Denna Denna tabell tabell kommer kommer att att innehålla innehålla främmande främmande nycklar nycklar till till primärnycklarna primärnycklarna ii de de tabeller tabeller som som svarar svarar mot mot de de associerade associerade klasserna. klasserna. Översättning av generalisering ANSTÄLLD ISA Avd.: String 1..1 Personnr: String 1..1 ISA KONSULT Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. PERSON Namn: String 1..1 Projekt: String 1..1 ANSTÄLLD PERSON KONSULT Personnr Namn Personn Avd Personnr Projekt 1122 Pelle 1122 Sko 2233 Proj1 2233 Eva Vid Vid generalisering generalisering så så blir blir var var och och en en av av subklasserna subklasserna en en egen egen tabell tabell med med en en primärnyckel primärnyckel som som kommer kommer från från superklassen. superklassen. Denna Denna primärnyckel primärnyckel blir blir också också en en främmande främmande nyckel nyckel mot mot primärnyckeln primärnyckeln ii den den tabell tabell som som svarar svarar mot mot superklassen. superklassen. 15 Presensational content template slides Övning PERSON PERSON Personnr: String 1..1 Personnr: String 1..1 Namn: String 1..1 Namn: String 1..1 1..1 1..1 gift_med Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. ISA ANSTÄLLD Anstnr: String 1..1 ANSTÄLLD Anstnr: String 1..1 Översätt Översätt de de två två klassdiagrammen klassdiagrammen ovan ovan till till två två olika olika relationsdatabasscheman! relationsdatabasscheman! Övning forts. PERSON Personnr: String 1..1 Namn: String 1..1 Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. ISA ANSTÄLLD Anstnr: String 1..1 ANSTÄLLD PERSON Personnr Namn Personnr Anstnr 16 Presensational content template slides En svårare övning PERSON Personnr: String 1..1 Namn: String 1..1 Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. 1..1 1..1 gift_med ANSTÄLLD Anstnr: String 1..1 ANSTÄLLD PERSON Personnr Namn Personnr Anstnr En svårare övning PERSON PERSON Personnr: String 1..1 Personnr: String 1..1 Namn: String 1..1 Namn: String 1..1 Informationsförlust! 1..1 gift_med Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. ISA 1..1 ANSTÄLLD Anstnr: String 1..1 Anstnr: String 1..1 ANSTÄLLD PERSON Personnr Relationsmodellen ANSTÄLLD är semantiskt fattig! Namn Personnr Anstnr 17 Presensational content template slides Översättning av sammansatta identifierare KURS KURSTILLFÄLLE 1..1 Kurskod: Integer 1..1 0..* av Från: Date 1..1 Till: Date 1..1 Kursnamn: String 1..1 Ansvarig_lärare: String 1..1 Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. Översätt klasschemat till ett relationsdatabasschema! Men Men inget inget av av attributen attributen ii klassen klassen KURSTILLFÄLLE KURSTILLFÄLLE är är ju ju unikt? unikt? Inte Inte ens ens om om vi vi kombinerar kombinerar ihop ihop alla alla attributen attributen har har vi vi en en unik unik identifierare identifierare (t (t ex ex kan kan en en lärare lärare vara vara ansvarig ansvarig för för flera flera kurstillfällen kurstillfällen som som går går samtidigt)? samtidigt)? Det Det beror beror på på att att en en del del av av ett ett KURSTILLFÄLLE.s KURSTILLFÄLLE.s identifierare identifierare helt helt enkelt enkelt utgörs utgörs av av dess dess association association mot mot KURS! KURS! Översättning av sammansatta identifierare KURS KURSTILLFÄLLE 1..1 Kurskod: Integer 1..1 Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. Kursnamn: String 1..1 0..* Från: Date 1..1 Till: Date 1..1 Ansvarig_lärare: String 1..1 KURSTILLFÄLLE KURS Kurskod av Kursnamn Kurs Från Till Ansvarig Den Den sammansatta sammansatta primärnyckeln primärnyckeln ii tabellen tabellen KURSTILLFÄLLE KURSTILLFÄLLE utgörs utgörs av av kolumnerna kolumnerna ‘Kurs’, ‘Kurs’, ‘Från’, ‘Från’, och och ‘Till’. ‘Till’. Två Två KURSTILLFÄLLE:n KURSTILLFÄLLE:n av av samma samma KURS KURS kan kan alltså alltså inte inte ges ges samtidigt! samtidigt! Kolumnen Kolumnen ‘Kurs’ ‘Kurs’ utgör utgör vidare vidare främmande främmande nyckel nyckel mot mot tabellen tabellen KURS. KURS. 18 Presensational content template slides Övning översättning av sammansatta identifierare Klass KlassRUM RUMidentifieras identifieras av avsitt sitt‘Rumsnamn’ ‘Rumsnamn’ och sin association och sin association mot motHOTEL. HOTEL. Klass KlassKUND KUND identifieras identifierasav avsitt sitt ‘Pnr’. ‘Pnr’. KUND HOTELL RUM Pnr: Integer 1..1 Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. Klass KlassHOTELL HOTELL identifieras identifierasav avsitt sitt ‘Hotelnamn’. ‘Hotelnamn’. Namn: String 1..1 1..1 Rumsnr: Integer 0..* 1..1 1..* Hotelnamn: String 1..1 1..1 Antal_stjärnor: Int 1..1 Översätt Översätt klasschemat klasschemat ovan ovan till till ett ett relationsdatabasrelationsdatabasschema! Ange tabellnamn, namn schema! Ange tabellnamn, namn på på alla alla kolumner, kolumner, primärnycklar och främmande nycklar! primärnycklar och främmande nycklar! Lösning översättning av sammansatta identifierare KUND Pnr: Integer 1..1 1..1 Rumsnr: Integer 0..* 1..1 1..* Hotellnamn: String 1..1 1..1 Antal_stjärnor: Int 1..1 HOTELL KUND Rum Hotellnamn Antal_stjärnor Hotell } RUM Rumsnr Hotellnamn } Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. Namn: String 1..1 Pnr HOTELL RUM Notera Notera att att främmande främmande nyckel-kolumnerna nyckel-kolumnerna inte inte behöver behöver heta heta likadant likadant som som de de primärnycklar primärnycklar de de svarar svarar mot! mot! (De (De kan kan dock dock göra göra det det som som vi vi sett sett förut!) förut!) 19 Presensational content template slides Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. Från klasschema till relationsdatabas – Regler Vart Vart tog tog alla alla regler regler som som fanns fanns ii det det konceptuella konceptuella schemat schemat vägen vägen när när vi vi översatte översatte till till databas? databas? Datatyp! Datatyp! Min-värde! Min-värde! Översättning av regler fortsättning Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. Men Men vissa vissa regler regler har har väl väl redan implementerats redan implementerats när när vi vi översatte översatte från från konceptuellt konceptuellt schema schema till till databas? databas? Javisst, Javisst, tt ex ex har har funktionella funktionella beroenden beroenden mellan mellan attribut attribut ii en en klass klass gett gett upphov upphov till till val val av av primärnycklar primärnycklar när när klassen klassen översattes översattes till till en en tabell. tabell. Attribut Attribut med med max-värde max-värde == 11 har har gett gett upphov upphov till till kolumner. kolumner. Flervärda Flervärda attribut attribut har har gett gett upphov upphov till till tabeller. tabeller. 20 Presensational content template slides Översättning av regler fortsättning Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. Vart Vart tog tog alla alla andra andra regler regler vägen? vägen? Domänbeskrivningar Referensregler (främmande nyckel-regler) Andra domän-regler, t ex triggers (triggers går vi igenom på SQL-föreläsningen) Kontroll Kontroll av av data data ska ska ske ske så så tidigt tidigt som som möjligt! möjligt! Systemet Systemet ska ska inte inte kontrollera kontrollera att att informationen informationen inte inte är är felaktig, felaktig, det det ska ska så så långt långt det det är är möjligt möjligt undanröja undanröja möjligheten möjligheten att att felaktig felaktig information information matas matas in in eller eller lagras! lagras! Domän Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. Ett värdeförråd ur vilket ett eller flera attribut får sina värden Regler som begränsar tillåtna värden Två attribut är jämförbara endast om de får sina värden ur samma domän Alla värden är atomära 21 Presensational content template slides Domän Varför Varför är är det det bra bra att att använda använda domän-konceptet domän-konceptet för för kontroll kontroll av av datavärden? datavärden? Det Det flyttar flyttar kontrollen kontrollen från från applikationsnivå applikationsnivå till till systemnivå systemnivå (DBMS) (DBMS) Varje Varje domän domän behöver behöver deklareras gång deklareras endast endast en en gång Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. Flexibelt,enklare Flexibelt,enklare att att ändra, ändra, enklare enklare dokumentation dokumentation Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. Domän-regler Domänregler Exempel Datatyp Heltal, flyttal, textsträng, tecken… Längd 5 signifikanta siffror, 30 tkn, … Format ååmmdd, nnnnnnnnnnnn Defaultvärde ‘John Doe’ Max/Min-.värden (kardinalitetsregler) Minst en, högst fyra, … 22 Presensational content template slides Domän-regler och främmande nyckel regler via DDL Datatyp! Datatyp! MaxMaxvärde! värde! Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. 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 DDL Datatyp! Datatyp! FÖRETAG Företagsnamn: String 1..1 Antal_anställda: Int 1..1 Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. FÖRETAG Min-värde! Min-värde! Företagsnamn Antal_anställda CREATE TABLE FÖRETAG (Företagsnamn Varchar(25) NOT NULL, Antal_anställda Integer NOT NULL, Primary key (Företagsnamn)) 23 Presensational content template slides DDL – Främmande nyckel-regler FÖRETAG Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. ANSTÄLLD Anstnr Namn Mitt_företag Företagsnamn Antal_anställda 11111 Maria ‘BULT AB’ ‘BULT AB’ 2 22222 Paul ‘BULT AB’ ‘SKRUV AB’ 1 33333 Petia ‘SKRUV AB’ CREATE TABLE ANSTÄLLD (Anstnr String NOT NULL, Namn 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) DDL – Främmande nyckel-regler FÖRETAG Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. ANSTÄLLD Anstnr Namn Mitt_företag Företagsnamn Antal_anställda 11111 Maria ‘BULT AB’ ‘BULT AB’ 2 22222 Paul ‘BULT AB’ ‘SKRUV AB’ 1 33333 Petia ‘SKRUV AB’ CREATE TABLE ANSTÄLLD (Anstnr String NOT NULL, Namn 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) FÖRETAG ANSTÄLLD Anstnr Namn Mitt_företag Företagsnamn Antal_anställda 11111 Maria ‘BULT AB’ ‘BULT AB’ 2 22222 Paul ‘BULT AB’ 24 Presensational content template slides DDL – Främmande nyckel-regler FÖRETAG Copyright © 2004-2005 NameOfTheOrganization. All rights reserved. ANSTÄLLD Anstnr Namn Mitt_företag Företagsnamn Antal_anställda 11111 Maria ‘BULT AB’ ‘BULT AB’ 2 22222 Paul ‘BULT AB’ ‘SKRUV AB’ 1 33333 Petia ‘SKRUV AB’ CREATE TABLE ANSTÄLLD (Anstnr String NOT NULL, Namn 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 FÖRETAG Anstnr Namn Mitt_företag Företagsnamn Antal_anställda 11111 Maria ‘BULTIA AB’ ‘BULTIA AB’ 2 22222 Paul ‘BULTIA AB’ ‘SKRUV AB’ 1 33333 Petia ‘SKRUV AB’ 25