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



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

Informationssystem och Databasteknik

IT i organisationer och databasteknik

Informationssystem och Databasteknik

Informationssystem och databasteknik

Analytisk relationsdatabasdesign

IT i organisationer och databasteknik

Relationsmodellen och syntetisk databasdesign

Design och underhåll av databaser

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

Databasens består av: Tabell Kolumner fält Rader poster (varje post är unik)

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

Karlstads Universitet, Datavetenskap 1

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

Konceptuell modellering

Databaser och Datamodellering Foreläsning IV

! Webprogrammering. ! Databasteori och praktik. ! Fö, le, la + projekt. ! Examination (tenta, dugga + labb, ! Studera användarna och deras problem

Webprogrammering och databaser. Konceptuell datamodellering med ER-modellen

Lösningsförslag till Exempel tentamen

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

Databaser design och programmering. Design processen ER- modellering

Tentamen. Databasmetodik Lördag 27 september 2014 kl

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

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

Webprogrammering och databaser. Konceptuell datamodellering med ER-modellen

Föreläsning 6: Normalisering & funktionella beroenden

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

Konceptuella datamodeller

Exempel-Tentamen III

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

Informationssystem och Databasteknik, 2I-1100 HT2001. Relationsalgebra. Relationsalgebran är sluten: R 1 op R 2 R 3.

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

Logisk databasdesign

! Teori och praktik. ! Ändringar från förra året. ! Examination (tenta, projekt) LiU. ! Varför ni? ! Varför överhuvudtaget? LiU

Reducering till relationsscheman

Webprogrammering och databaser. 729G28 Webprogrammering och databaser. Kursöversikt. Praktisk info. Webprogrammering. Ändringar mot förra året

Relationsdatabasdesign, 2I-4067

Webprogrammering och 729G28 databaser Webprogrammering och databaser Kursöversikt Webprogrammering Designprocessen Lösningsförslag

Databaser - Design och programmering. Kursöversikt. Exempel: telefonbok. Varför databaser?

Tentamen DATABASTEKNIK - 1DL116

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

Modul DB1-2 Datamodellering

Lite om databasdesign och modellering

Databasdesign. E-R-modellen

Databaser design och programmering. Fö 2: Design processen, ER-modellering

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

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

Tentamen 4,5 hp Delkurs: Databaser och databasdesign 7,5hp Tentander: VIP2, MMD2, INF 31-60, ASP

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

732G16: Databaser - Design och programmering

SQLs delar. Idag. Att utplåna en databas. Skapa en databas

Databaser - Design och programmering

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

Karlstads Universitet, Datavetenskap 1

Normalisering. Christer Stuxberg Institutionen för Informatik och Media

Universitetet: ER-diagram

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

DDL Kommandon CREATE/DROP Database CREATE /ALTER/DROP Table ALTER/ADD/DROP Column CREATE /ALTER/DROP Index

Databaser Design och programmering

Disposition. 1. Kopplingen mellan Processanalys (DFDdiagram) 2. Treskikts Client-Server arkitektur (Fig 1.8) 3. Data layer

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

Grunderna för relationsmodellen!

Vad är en databas? Exempel på databaser: Databas = Organiserad samling och lagring av information.

Relationell databasdesign

Övningar i SQL. SQLAccess.doc Ove Lundgren

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

Tentamen för DD1370 Databasteknik och informationssystem

Relationsdatabasdesign

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

Tentamen i Databasteknik

Databaskunskap 7,5 högskolepoäng Provmoment: Ladokkod: Tentamen ges för:

Kompendium till databaser och informationssystem 10p för SY2 2000

Vyer, Prepared Statements, Triggers

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

729G28 Webprogrammering och databaser. Föreläsning 1: Diverse praktiskt om kursen Webprogrammering Databaser, terminologi

1.Lär känna MS SQL Observera. Tips. Förberedelse

Idag. Hur skapar vi och underhåller en databas? DD1370 (Föreläsning 4) Databasteknik och informationssystem 7,5 hp Hösten / 20

Tentamen för DD1370 Databasteknik och informationssystem

D1. Create Domain TEXT30 char(30) Default INGET VÄRDE! ;

Databasteori. Övningar

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

NORMALISERING. Mahmud Al Hakim

2. Objekt, operatorer och integritetsregler 3. Databasobjekt

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

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

Kursens mål. Databasteknik TDDB48. Lärare. Kursorganisation. Laborationsinformation. Inlämning av laborationer. Responsible:

Tentamen Databasteknik

Databasteknik för D1, SDU1 m fl

Tentamen plus lösningsförslag

Tentamen för DD1370 Databasteknik och informationssystem

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

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

Föreläsning 2: Översikt över ett databassystem

Ett arbetsexempel Faktureringsrutin

Modul DB1-1 Databasmodellering

08/11/13. Databasteknik och informationssystem DD1370 F3. Ett urval ur databasen bestäms av en SQL-fråga. Påminnelse: Deadline på tisdag

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

(Data)Modellering. nikos dimitrakas rum 2423

Webbprogrammering, grundkurs 725G54

Transkript:

Föreläsning 3 Transformation från konceptuell datamodell till relationsschema ( Syntetisk databasdesign ) Vad är ett databashanteringssystem? En mängd program som tillåter användaren att skapa och underhålla databaser Normalisering (Analytisk databasdesign) 1 2 DATABASSYSTEM Användare/Programmerare Applikationsprogram/Frågor Relationsdatabas DBMS Program för att hantera frågor/program Program för att hantera lagrade data Lagrad databasdefinition (metadata) Lagrad databas En relationsdatabas är en databas som uppfattas av användaren som en samling tabeller - oberoende av hur datamängden fysiskt är lagrad. 3 4

Relations schema Project PRNR START KLART PLATS BUDGET Attribut Domän t.ex. Domänen för attributen BUDGET är Integer större än noll Grad - antal attribut Relation Project PRNR Prnr1 Prnr2 Prnr3 Prnr4 START 940201 930126 951115 920101 KLART 960131 951231 970630 960701 PLATS Goteborg Falun Stockholm Lund BUDGET 90 45 220 550 Cell Kardinalitet - antalet rader (tuppler) Tuppel ( sveng elska ) (Rad) 5 6 Egenskaper hos relationer Atomära värden i varje cell Grafisk notation för konceptuella scheman - avbildningsreglerna avgör vad som kan utgöra identifierare! APA : Sträng 1..1 0..* äter 1..1 BANAN Värdena i varje kolumn är av samma typ Varje rad (tuple) är unik Ordningen mellan attributen är inte alltid oväsentlig Ordningen mellan raderna är oväsentlig et för varje attribut är unikt för en relation TOTALITET Textsträng 1..1 0..1 APA ENVÄRDHET alternativ, starkare, notation: UNICITET (båda max-värdena = 1, alternativt ENVÄRT+INJEKTIVT) TOTALITET 0..* äter 1..1 BANAN 7 8

Från ett konceptuellt schema till en relationsdatabas Enkelt objekt - envärda attribut : String 1..1 UNIK Ålder: String 1..1 äger 0..* 0..* Regno: String 1..1 UNIK Märke: String 1..1 nr: String 1..1 UNIK : String 1..1 Ett sätt: Ett annat sätt: ((), Ålder) ÄGER((, Regnr)) ((Regnr), Märke) 0..* ÄGANDE Regnr Ålder Regnr Märke nr Identifierande attribut är skuggat. 9 10 Enkelt objekt - flervärda attribut nr nr: String 1..1 UNIK : String 1..1 Titel: String 0..* Titel nr Titel 561224-5689 Civ.ing. 231003-4433 Fil.dr 231003-4433 Civ.ing nr Nycklar? Titel nr Titel 561224-5689 Civ.ing. 231003-4433 Fil.dr 231003-4433 Tekn.dr En nyckel är ett antal attribut (t ex ett) som unikt identifierar en rad. Den/de attribut som väljs som identifierare kallas primärnyckel. Eventuella övriga nycklar blir alternativnycklar. En främmande nyckel är ett/flera attribut i en tabell som svarar mot primärnyckeln i en annan tabell. nr i tabellen TITEL ingår i primärnyckeln för tabellen TITEL men utgör även främmande nyckel mot tabellen. Främmande nyckel-attribut är det som relaterar olika tabeller till varandra. Alla värden som förekommer i främmande-nyckel kolumerna måste ha sin motsvarighet som primärnyckel i en annan tabell, eller också måste de vara NULL. De två sista villkoren brukar kallas referential integrity. 11 12

Entity integrity Ingen del av primärnyckeln får vara NULL (primärnyckeln identifierar ju en rad och måste alltid finnas). Referential integrity Alla värden för kolumner som utgör främmande nyckel kolumner mot en annan tabell måste svara mot existerande primärnyckel-värden för denna andra tabell. Eller också måste värdena i främmande nyckelkolumnerna vara NULL. Detta betyder bland annat att främmande nyckel kolumnerna i en tabell måste ha samma domäner som primärnyckel kolumnerna i den tabell som de refererar till. Identifierare Objekt kan identifieras med hjälp av attribut och/eller samband mellan objekt. Avbildningsreglerna för ett attribut som ensamt ska tjäna som identifierare måste alltid vara UNIKT och TOTALT (se nedan). Detta betyder att alla sådana attribut kan väljas ensamma som primärnyckel. Motsatsen till totala attribut kallas f. ö. PARTIELL(a) attribut (eller partiella relationer). En identifierare för ett objekt kan sättas samma av ett eller flera attribut som hör till objektet eller ett attribut plus ett eller flera samband mellan objektet och andra objekt. A attributename: Datetype 1..1 UNIK 13 14 Sammansatta identifierare Sammansatta identifierare KURSDELTAGANDE nr: String 1..1 Kurskod: String 1..1 Nivå: String 1..1 Entitetstypen KURSDELTAGANDE modellerar att en student går en viss kurs. Man kan läsa kurser på flera olika nivåer där C-nivån har en svårare tenta än A-nivån. Här finns inget attribut som ensamt är både unikt och totalt (en viss student kan läsa flera kurser än en så kurskod är inte unikt, en kurs har flera deltagare så personnummer är inte unikt. Detsamma gäller nivå där flera studenter kan läsa t ex B-nivån). Kombinerar man ihop attributen personnummer och kurskod får man dock en unik identifierare (detta under förutsättning att man inte kan läsa samma kurs på flera olika nivåer. Om detta gäller måste även nivå inkluderas i identifieraren). KURS Kurskod: String 1..1 UNIK : String 1..1 Vad identifierar KURS? Jo, Kurskod! (Unikt och totalt) hör_till 1..1 0..* KURSTILLFÄLLE Kursansvarig: String 1..1 Starttid: String 1..1 Sluttid: String 1..1 Inget av attributen hos klassen KURSTILLFÄLLE är unikt och totalt. Inte ens om man kombinerar ihop alla attributen är det säkert att detta blir unikt (en lärare kan vara ansvarig för olika kurser som går under samma tidsperiod). KURSDELTAGANDE nr Kurskod Nivå Om vi däremot väljer att identifiera ett kurstillfälle med attributen starttid, sluttid och kurskod (dvs KURSTILLFÄLLES relation mot KURS) har vi en unik identifierare. 15 16

KURS Kurskod: String 1..1 UNIK : String 1..1 hör_till 1..1 0..* KURSTILLFÄLLE Kursansvarig: String 1..1 Starttid: String 1..1 Sluttid: String 1..1 Surrogatnycklar Vanliga användarspecificerade nycklar kan vara bristfällig ett par avseenden: KURS Kurskod KURSTILLFÄLLE Kurskod Tabellen KURSTILLFÄLLE har en primärnyckel som består av kolumnerna Kurskod, Starttid och Sluttid. Kolumnen Kurskod ingår i PN men utgör även FN mot tabellen KURS. Starttid Sluttid Kursansvarig 1. De kan förändras Exempelvis händer det att attribut som t ex avdelningsnummer/namn förändras när ett företag organiseras om. 2. Olika användarnamn kan användas för att identifiera samma entitet. T ex KUNDER KUND CUSTOMER jfr homonymer. Surrogat är systemgenererade entitetsidentifierare vars unikhet är garanterad för alltid och som alltså ej kan förändras. 17 18 Surrogatnycklar Från konceptuellt schema till databas, fortsättning ANVÄNDARE BEHÖVER INTE VARA MEDVETNA OM ATT SURROGAT-NYCKLAR ANVÄNDS, EFTERSOM DESSA BARA ANVÄNDS INTERNT. FORTFARANDE HAR MAN "I LEVANDE LIVET" BEHOV AV ATT KUNNA IDENTIFIERA OBJEKT, OCH BEHOVET AV "ENTITY INTEGRITY" GÖR ATT (ANVÄNDARNAS) PRIMÄR-NYCKEL BEHÖVS. INTERNT KOMMER DOCK SURROGATET ATT ANVÄNDAS SOM ENVÄRDA UNIKA PRIMÄR-NYCKLAR OCH ÄVEN I Partiella relationer (och för all del attribut) ger upphov till problem med NULL-värden. Har man inte modellerat bort risken för NULL-värden bör man ta hand om det vid transformationen från konceptuell modell till relationsschema. Partiella relationer och attribut undviks t ex om man använder isahierarkier. REFERENSER SOM FRÄMMANDE NYCKLAR. 19 20

NULL ANSTÄLLDA NULL Null-värden kan ge problem vid join. AVDELNING Pnr Anst.nr Adress Avd.nr Avdelning Avd.nr Vad betyder egentligen NULL? Värde saknas? Värde finns men är ej känt? (just nu...) Värde är ej tillämpligt? (jfr arvs-hierarkier ) 11111 1A Byv. 3 3 Forskning 3 22222 3B Solsv. 6 5 Försäljn. 5 33333 1AA Byv. 5 3 Admin. 1 44444 2B Byv.7 1 55555 1X Solv. 7 NULL 66666 3Y Byv. 11 NULL En join mellan anställda över Avd.nr kommer att resultera i att de två sista anställda inte kommer med. Beroende på omständigheterna kan detta vara vad som avsågs eller felaktigt. Pnr Anst.nr Adress Avd.nr Avdelning Avd.nr 11111 1A Byv. 3 3 Forskning 3 22222 3B Solsv. 6 5 Försäljn. 5 33333 1AA Byv. 5 3 Forskning 3 44444 2B Byv.7 1 Admin 1 21 22 : String 1..1 UNIK Ålder: String 1..1 0..1 äger 0..1 Regno: String 1..1 UNIK Märke: String 1..1 Partiella relationer alternativ lösning: : String 1..1 UNIK Ålder: String 1..1 0..1 äger 0..1 Regno: String 1..1 UNIK Märke: String 1..1 nr Bil Regnr Ägs-av Typ AIB 436 610234-7411 Volvo BPL 845 561224-5689 Fiat FJK 359 NULL Saab Det sammanbindande attributet läggs så att det får så få nullvärden som möjligt! Här antas att det finns fler personer utan bilar än tvärtom. nr 1 0-0 1 ÄGANDE Bil / Ägs-av Regnr 610234-7411 AIB 436 561224-5689 BLP 845 Bil Regnr Typ AIB 436 Volvo BPL 845 Fiat FJK 359 Saab 23 24

Samband där avbildningarna har M ( många, * ) på en av sidorna : String 1..1 UNIK Ålder: String 1..1 0..1 äger 0..* Regno: String 1..1 UNIK Märke: String 1..1 Regel: Främmande nyckeln ska placeras i den.tabell som sitter på * ( många ) - sidan! nr Bil Regnr Ägs-av Typ AIB 436 610234-7411 Volvo BPL 845 610234-7411 Fiat FJK 359 NULL Saab 25 26 M:M ( många till många, * : * ) måste lösas : String 1..1 UNIK Ålder: String 1..1 0..* äger 0..* Regno: String 1..1 UNIK Märke: String 1..1 M:M- relationer måste alltid lösas med ett relationsobjekt (jämför med reifiering). Nullvärden undviks dessutom. nr Vid den första konceptuella modellen fick ju M:M samband finnas (såvida inte sambandet hade egna attribut). Vid övergång till ett relationsschema bildar man en en ny tabell som innehåller identiferarna från respektive entitet som sammankopplades via M:Msambandet. 1 0-0 1 ÄGANDE Bil / Ägs-av Regnr 610234-7411 AIB 436 561224-5689 AIB 436 561224-5689 BPL 845 561224-5689 JTL 739 Bil Regnr Typ AIB 436 Volvo BPL 845 Fiat FJK 359 Saab JTL 739 BMW 27 28

ANSTÄLLD Arvssamband nr :String 1..1 UNIK : String 1..1 KONSULT Avdelning: String 1..1 Projekt: String 1..1 Översättning av entitet med sammansatta icke-lexikala identifierare nr: String 1..1 UNIK : String 1..1 0..* 1..1 RUM Rumsnr: String 0..* 1..1 bor_på 1..1 ingår_i HOTEL Hnamn: String 1..1 UNIK Typ: String 1..1 Rumsnummer räcker inte till för att identifiera (= vara möjlig att välja som primärnyckel) tabellen RUM! Anställd nr Avd. 610234-7411 Dam 561224-5689 Herr nr Konsult nr Projekt 231003-4433 PR nr Rumsnr H 650321 Anna 2A Astoria 111111 Lisa 3B Ritz 222222 Eva 4S Astoria 444444 Pelle 2A Plaza RUM Rumsnr 2A 3B 4S 2A H Astoria Ritz Astoria Plaza HOTEL H Typ Astoria 5* Ritz 3* Plaza 5* 29 30 Informationsförlust? Från ett konceptuellt schema till en relationsdatabas Övning: Översätt följande två scheman til två olika relationsdatabasstrukturer: nr: String 1..1 UNIK nr: String 1..1 UNIK : String 1..1 UNIK Ålder: Integer 0..* äger 0..* Regno: String 1..1 UNIK Märke: String 1..1 ISA ANSTÄLLD Anstnr: String 1..1 UNIK 1..1 gift_med 1..1 ANSTÄLLD Anstnr: String 1..1 UNIK Ett sätt: ((), Ålder) ÄGER((, Regnr)) ((Regnr), Märke) Ett annat sätt: ÄGANDE Regnr Ålder Regnr Märke Vart tog alla regler vägen? 31 32

Vart tog alla regler vägen fortsättning? Domändefinition - Domänbeskrivningar - Referensregler (Främmande Nyckel-specifikationer) - Integritetsregler (triggers) Kontroll av data skall ske så tidigt (så nära källan) som möjligt! Domänkarakteristika datatyp längd format Exempel numeric, integer, char* 5 siffror, 30 tkn ååmmdd, nnnn-nnnnnnn Systemet skall inte kontrollera att data inte är fel, utan undanröja möjligheterna till att det blir fel * siffra, heltal, tecken 33 34 Domäner för nycklar Inför SQL (DDL-delen): PK AK FK ej null, unika unika, men får vara null, eller delvis null måste vara samma (domänspecifikt) som PK i föräldratabell EMPLOYEE Eid: String 1..1 UNIK Detta blir två tabeller: EMPLOYEE((EID), BID) 1..* 1..1 works_at BUSINESS Bid: String 1..1 UNIK och BUSINESS(BID) Hur defineras tabellen EMPLOYEE ovan? SQL har en DDL-del (lite mer okänd än DML-delen). DDL betyder Data Definition Language. DML betyder Data Manipulation Language. Med DDL kan vi definiera tabeller, regler etc. Med DML kan vi sen ställa frågor mot de tabeller vi skapat. 35 36

SQL: DDL-exempel Mera främmande nycklar... CREATE TABLE EMPLOYEE (EID VARCHAR(11) NOT NULL UNIQUE, BID CHAR(7) NOT NULL, PRIMARY KEY(EID), FOREIGN KEY(BID) REFERENCES BUSINESS ON DELETE CASCADE ON UPDATE CASCADE) Med hjälp av DDL-satsen ovan har vi realiserat ett antal regler. Entity integrity regler: Ingen del av primärnyckeln får vara NULL och PN måste vara unik för varje förekomst av entiteten. Alltså måste det (de) attribut som väljs till PN deklareras som NOT NULL och UNIQUE *. Vidare bör man ta ställning till vad som ska hända med främmande nyckel-attributet vid DELETE respektive UPDATE av en föräldra -entitet. DELETE och UPDATE-regler talar om just vilka effekter ett borttag eller en uppdatering av en föräldraentitet får på barn -entiteten. Här har vi valt att låta såväl DELETE som UPDATE vara CASCADES. Dvs ett borttag av en föräldraentiet innebär att även barnentiteten tas bort. En uppdatering av en föräldraentitet innebär att även främmande nyckelfältet i barnentiteten uppdateras. Vilka andra typer av effekter på DELETE/ INSERT kunde man valt? CREATE TABLE EMPLOYEE (EID VARCHAR(11) NOT NULL UNIQUE, BID CHAR(7) NOT NULL, PRIMARY KEY(EID), FOREIGN KEY(BID) REFERENCES BUSINESS ON DELETE CASCADE ON UPDATE CASCADE) Här talar man om att BID i tabellen EMPLOYEE refererar till (är främmande nyckel mot) tabellen BUSINESS. Det måste alltså finnas en primärnyckel i BUSINESS vars värden svarar mot värdena för BID i tabellen EMPLOYEE. Om man inte skriver SQL kan man fortfarande visa vilka främmandenyckelrelationer som råder. T ex genom *) ibland innebär själva deklarationen av ett attribut som PN just att NOT NULL resp. UNIQUE upprätthålls. Då behöver man inte ange detta specifikt. EMPLOYEE. BID = BUSINESS.BID 37 38 DDL / Arvssamband nr :String 1..1 UNIK : String 1..1 TRIGGERS ANSTÄLLD KONSULT Avdelning: String 1..1 Projekt: String 1..1 Anställd(nr:char(10), Avd:varchar(20)) PK nr FK nr REFERENCES UPDATE OF.nr CASCADES DELETE OF CASCADES (nr:char(10), :varchar(20)) PK nr Konsult(nr:char(10), Projekt:varchar(20)) PK nr FK nr REFERENCES UPDATE OF.nr CASCADES DELETE OF CASCADES Regler för verksamheten som tas med i modellen! - Beställningspunkt skall kontrolleras vid utleverans - Inrapporterad körsträcka måste överstiga förgående inrapporterade körsträcka - Kunds kreditgräns får ej överskridas - Om beställningspunkt är större än antal-i-lager skall beställningsmeddelande skrivas ut TIDSINSTÄLLDA TRIGGERS aktiveras vid tider eller efter tidsintervall 39 40

Triggers händelse som utlöser (insert, update, delete, retrieve) objekt (attribut eller entitet) som berörs villkor som utlöser triggern åtgärder när triggern utlöses Triggers exempel CREATE TRIGGER Signalera_stora_ökningar: AFTER UPDATE OF SALARY ON EMPLOYEE REFERENCING NEW AS n OLD AS o FOR EACH ROW MODE DB2SQL IF n.salary > 1.1 * o.salary SIGNAL SQLSTATE 75000 ( Salary increase > 10 % ) EMPLOYEE Name Adress Salary Kalle Byvägen 3 10000 Olle Solstigen 4 20000 Stina Ekgränd 2 18000 Kurt Byvägen 5 17000 41 42 Funktionellt beroende: Pnr Funktion (i vanlig mat. betydelse): Kontrollera relationer genom normalisering (Analytisk databasdesign) 610321 11111 22222 33333 Ej funktion: Maria Eva Sture Olle För varje värde på Pnr, tex 22222, får det finnas högst ett värde på ett. Däremot får två (eller flera) Pnr ha samma värde på. Dessutom finns det som inte pekas ut av något Pnr. Liksom det finns Pnr:er som inte pekar ut något. 610321 11111 33333 22222 Maria Eva Sture Olle Här är det funktionella beroendet inte uppfyllt. Pnr:et 22222 pekar ut två värden på, nämligen Maria och Eva. 43 44

610321 11111 22222 33333 Funktionellt beroende: Maria Eva Sture Olle Pnr Funktion (i vanlig mat. betydelse): För varje värde på Pnr, tex 22222, får det finnas högst ett värde på ett. Däremot får två (eller flera) Pnr ha samma värde på. Dessutom finns det som inte pekas ut av något Pnr. Liksom det finns Pnr:er som inte pekar ut något. Semantiken i funktionella beroenden Primärnyckeln i en tabell bestämmer övriga attribut funktionellt (dvs givet en viss primärnyckel finns det maximalt ett värde på alla övriga attribut/kolumner) Dessutom är vissa normalformer definerade i termer av funktionella beroenden. 610321 11111 33333 22222 Ej funktion: Maria Eva Sture Olle Här är det funktionella beroendet inte uppfyllt. Pnr:et 22222 pekar ut två värden på, nämligen Maria och Eva. Kom ihåg att funktionella beroenden är ett uttryck för semantiken, betydelsen, i en applikation. Det svåra i en designprocess är att klarlägga denna semantik. 45 46 Funktionellt beroende, exempel Produkt Prodnr Mtrl Färg Lagerplats 1234 trä gul hylla1 2567 stål grå hylla5 Prodnr Prodnr Prodnr Mtrl Färg Lagerplats 1NF, 2NF och 3NF 1NF A relation is in first normal form iff the domains for all attributes are atomic 2NF A relation is in second normal form iff it is in first normal form and all the nonkey attributes are fully functionally dependent on the key När man ibland talar om Fullständigt funktionellt beroende har det att göra med primärnyckelns "minimalitet", dvs attributen skall vara beroende av hela (sammansatta) nyckeln. I en del litteratur gör man inte denna distinktion. 3NF A relation is in third normal form iff it is in second normal form and no nonkey attribute is transitively dependent on the key 47 48

1 NF En relation (tabell) är i 1NF omm varje attribut i tabellen består av atomära värden. Hur skulle en tabell se ut om den inte var i 1NF (dvs. i 0NF)? Pnr Ort Postnr 610321 Ann, Maria Kista 12345 22222 Kalle Södertälje 77999 33333 Maria Södertälje 77888 55555 Lisa Kista 12345 Attributet innehåller en mängd värden, dvs tabellen är inte i 1 NF. Två möjliga lösningar: 1. Pnr Ort Postnr 610321 Ann Kista 12345 610321 Maria Kista 12345 22222 Kalle Södertälje 77999 33333 Maria Södertälje 77888 55555 Lisa Kista 12345 2. Pnr Ort Postnr 610321 Kista 12345 22222 Södertälje 77999 33333 Södertälje 77888 55555 Kista 12345 1NF Pnr 610321 Ann 610321 Maria 22222 Kalle 33333 Maria 55555 Lisa Observera att def. av 1NF inte talar om vare sig nycklar eller funktionella beroenden. Alla attribut ska vara atomära. Punkt slut. Lösning nr 2 bygger dock intuitivt på att vi i den ursprungliga tabellen insåg att Pnr funktionellt bestämde alla de andra attributen (i alla fall så länge utgjorde en mängd värden). I den ursprungliga tabellen kunde alltså Pnr väljas till primärnyckl (PN). I så fall kan man alltid övergå till 1 NF genom att bryta ut PN plus det attribut som inte var atomärt och skapa en en ny tabell av dessa två. I den gamla tabellen blir Pnr, Ort och Postnr kvar. 49 50 1. Nycklar... Pnr Ort Postnr 610321 Ann Kista 12345 610321 Maria Kista 12345 22222 Kalle Södertälje 77999 33333 Maria Södertälje 77888 55555 Lisa Kista 12345 2. Pnr Ort Postnr Pnr 610321 Kista 12345 610321 Ann 22222 Södertälje 77999 610321 Maria 33333 Södertälje 77888 22222 Kalle 55555 Kista 12345 33333 Maria 55555 Lisa Det (de) attribut som ska utgöra primärnyckel måste funktionellt bestämma alla övriga attribut. Vilka funktionella beroenden finns i 1? Jo, Pnr, Ort, Postnr Pnr och får utgöra PN Vilka funktionella beroenden finns i 2? I första tabellen har vi Pnr Ort, Postnr så där får Pnr bli PN. I andra tabellen finns inga funktionella beroenden utan båda attributen behövs för att identifiera en rad. Partiellt funktionellt beroende A --> B kallas ett partiellt funktionellt beroende omm det existerar ett C som är en äkta delmängd av A OCH C --> B En relation, R, är i 2NF omm den är i 1NF och om det för varje attribut i R gäller ETT av följande villkor: 1. Attributet ingår i en kandidatnyckel (ev. den som väljs som PN) 2. Attributet är INTE partiellt beroende av en kandidatnyckel (ev. PN). Mao, alla attribut ska vara fullständigt funktionellt beroende av hela primärnyckeln, inte bara en del av denna. 51 52

2NF En tabell är i 2NF omm den är i 1NF och alla attribut är funktionellt beroende av hela primärnyckeln. Dvs Pnr, Ort, Postnr Vi fortsätter exemplet från 1NF: gäller. Dvs. för varje par av värden på Pnr och så finns det högst ett värde på såväl Ort som Postnr. Pnr Ort Postnr 610321 Ann Kista 12345 610321 Maria Kista 12345 22222 Kalle Södertälje 77999 33333 Maria Södertälje 77888 55555 Lisa Kista 12345 2NF 2NF -NAMN Pnr Ort Postnr Pnr 610321 Kista 12345 610321 Ann 22222 Södertälje 77999 610321 Maria 33333 Södertälje 77888 22222 Kalle 55555 Kista 12345 33333 Maria 55555 Lisa Men både Ort och Pnr bestämms också av enbart Pnr. Alltså gäller Pnr Ort, Postnr. Ort och Postnr är alltså inte beroende av hela nyckeln. Bryt ut Pnr och de attribut som Pnr bestämmer till en egen tabell! Som synes får vi samma lösning som lösning 2. när vi försökte gå från 0NF till 1NF. Lösning 2. var alltså redan i 2NF! ENTITET/ KLASS a: Datatype 1..1 UNIK b: Datatype 1..1 c: Datatype 1..1 c: Datatype 1..1 Identifierare - Primärnyckel? TABELL blev ju en tabell: a b c d Observera att om a har avbildningsregeln 1..1 UNIK och övriga attribut (dvs. b, c, d) 1..1 så finns det ett funktionellt beroende: a b, c, d dvs a kan väljas till PN. TABELL a b c d 53 54 Transitivt beroende Ett funktionellt beroende X --> Y för en relation R utgör ett transitivt beroende om följande båda saker gäller: 1. Det existerar en mängd attribut Z, sådan att Z varken utgör en kandidatnyckel för R eller ingår i en kandidatnyckel för R 3NF En tabell är i 3NF omm den är i 2NF och det inte existerar några transitiva beroenden mellan något icke-nyckel attribut och nyckeln. 2NF 2NF (och 3NF!) -NAMN Pnr Ort Postnr Pnr 610321 Kista 12345 610321 Ann 22222 Södertälje 77999 610321 Maria 33333 Södertälje 77888 22222 Kalle 55555 Kista 12345 33333 Maria 55555 Lisa I vårt fall bestämmer Postnr Ort, dvs. Postnr Ort. Dessutom är ju Ort bestämd av Pnr, dvs Pnr Ort. Och Postnr är inte någon kandidatnyckel, inte heller del av någon sådan. 2. X --> Z OCH Z --> Y Något svagare definition (baserad på primärnyckel istället för kandidatnyckel): Z får varken utgöra primärnyckel eller ingå i primärnyckeln. 3NF POST Postnr Ort 12345 Kista 77999 Södertälje 77888 Södertälje 3NF Pnr Postnr 610321 12345 222222 77999 33333 77888 55555 12345 Ort är transitivt beroende av nyckeln (Pnr). Lösning: Bryt ut det transitiva beroendet till en egen tabell. 55 56

Tabell i 2N Kurs Datum Lärare Sal Antal_sittplatser DB:1 990321 Maria F1 100 DB:3 990417 Kalle F1 100 PP:4 990321 Kalle F2 50 SYS:1 990828 Maria F1 50 SÄK:3 990817 Kurt F1 100 Tabell i 3NF Kurs Datum Lärare Sal Mera 3NF Kurs, Datum --> Lärare, Sal, Antal_sittplatser Sal --> Antal_sittplatser Tabell i 3NF Sal Antal_sittplatser Problem vid ofullständig normalisering Ofullständig normalisering leder till sk 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 DB:1 990321 Maria F1 DB:3 990417 Kalle F1 PP:4 990321 Kalle F2 SYS:1 990828 Maria F1 SÄK:3 990817 Kurt F1 F1 100 F2 50 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! 57 58