Från verksamhet till databas skola elev kurs lärare ämne bibliotek låntagare lån bok skola ((sNr), adress) elev ((eNr), förNamn, efterNamn) lärare ((lNr), förNamn, efterNamn) ämne ((äNamn), kursBok) ((sNr, eNr, lNr, äNamn) bibliotek ((bNamn), adress) låntagare ((ISBN), titel) ((bNamn, lNr, ISBN, datum) Världen Delmängd Modell Databasstruktur Från verksamhet till databas
Från konceptuellt schema till databas Huvudsteg 1. Varje objekttyp blir ett relationsschema 2. Varje 1-1 och 1-m attribut hos en objekttyp blir ett attribut i motsvarande relationsschema 3. Varje m-m attribut blir ett eget relationsschema - attributen i detta ges av nyckelattributen i de sammanbundna relationsschemana
Från konceptuellt schema till databas String String String Integer märke namn ålder regnr PERSON äger (m,m,p,p) BIL
Generalisering i relationsscheman regnr String FORDON String tillverkare ISA BIL märke String
Relationsalgebra Relationsalgebran är ett formellt språk för att extrahera data ur relationer. Språket är uppbyggt av ett litet antal operatorer. De primitiva operatorerna är Selektion Projektion Union Differens Kartesisk produkt
Selektion ANSTÄLLD Namn Lön Chef Avd Per Kvist 15000 Eva Berg Parfym Bo Gren 20000 Eva Berg Parfym Sten Rot 22000 Nils Hed Skor Nils Hed 30000 Eva Berg Skor Eva Berg 35000 Eva Berg Parfym Selektion innebär att man väljer ut ett antal tupler ur en relation baserat på något villkor. Namn Lön Chef Avd Per Kvist 15000 Eva Berg Parfym Bo Gren 20000 Eva Berg Parfym Eva Berg 35000 Eva Berg Parfym sAvd=ParfymANSTÄLLD
Projektion ANSTÄLLD Namn Lön Chef Avd Per Kvist 15000 Eva Berg Parfym Bo Gren 20000 Eva Berg Parfym Sten Rot 22000 Nils Hed Skor Nils Hed 30000 Eva Berg Skor Eva Berg 35000 Eva Berg Parfym Projektion innebär att välja ut ett antal attribut ur en relation. Namn Lön Per Kvist 15000 Bo Gren 20000 Sten Rot 22000 Nils Hed 30000 Eva Berg 35000 pNamn,LönANSTÄLLD
Övning i relationsalgebra ANSTÄLLD(Namn, Lön, Chef, Avd) Vad innebär följande uttryck i naturligt språk? pNamn(sLön > 20000 (ANSTÄLLD)) Skriv ett relationsalgebraiskt uttryck som ger namnen på cheferna för de anställda som tjänar mer än 25000 på skoavdelningen.
Kartesisk produkt AVDELNING ANSTÄLLD Namn Lön Chef Avd Anamn Våning Per Kvist 15000 Eva Berg Parfym Bo Gren 20000 Eva Berg Parfym Sten Rot 22000 Nils Hed Skor Nils Hed 30000 Eva Berg Skor Eva Berg 35000 Eva Berg Parfym Leksaker 2 Livsmedel 3 Parfym 3 Skor 2 Trädgård 1 Namn Lön Chef Avd Våning pNamn,Lön,Chef,Avd,Våning (sAvd = Anamn (ANSTÄLLD X AVDELNING)) Per Kvist 15000 Eva Berg Parfym 3 Bo Gren 20000 Eva Berg Parfym 3 Sten Rot 22000 Nils Hed Skor 2 Nils Hed 30000 Eva Berg Skor 2 Eva Berg 35000 Eva Berg Parfym 3
Join Utifrån de primitiva relationsalgebraiska operatorerna kan nya bildas. R |X| <condition> S = s condition (R X S) pNamn,Lön,Chef,Avd,Våning (ANSTÄLLD |X| Avd = Anamn AVDELNING))
Övning i relationsalgebra ANSTÄLLD(Namn, Lön, Chef, Avd) AVDELNING(Anamn, Våning) Skriv ett relationsalgebraiskt uttryck som ger namn och lön för de anställda som arbetar på andra våningen.
SQL - Structured Query Language SELECT Namn, Lön FROM ANSTÄLLD WHERE Lön > 17000 p X s
SQL - Structured Query Language ANSTÄLLD(Namn, Lön, Chef, Avd) Vad betyder följande SQL-fråga? SELECT Namn, Lön FROM ANSTÄLLD AS A, ANSTÄLLD AS B WHERE A.Chef = B.Namn AND A.Lön > B.Lön
Vyer i SQL CREATE VIEW VÅNTVÅ AS (SELECT * FROM ANSTÄLLD, AVDELNING WHERE ANSTÄLLD.Avd = AVDELNING.Anamn AND Våning = 2) SELECT * FROM VÅNTVÅ WHERE Lön > 20000
Nästlade SQL-frågor CREATE VIEW VÅNTVÅ AS (SELECT * FROM ANSTÄLLD, AVDELNING WHERE ANSTÄLLD.Avd = AVDELNING.Anamn AND Våning = 2) SELECT Namn FROM ANSTÄLLD WHERE Namn NOT IN (SELECT Namn FROM VÅNTVÅ)
Övning SQL ANSTÄLLD(Namn, Lön, Chef, Avd) - Avd främmande nyckel AVDELNING(Anamn, Våning) SÄLJER(Avd, Vara) - Avd främmande nyckel På vilka våningar finns anställda som tjänar mer än 20000? Vilka anställda arbetar på en avdelning som säljer skor? På vilka våningar finns anställda med en chef som tjänar mer än 20000? På vilka våningar säljs inte skor?
Systemkatalog SYSCOLUMNS SELECT COLUMN FROM SYSCOLUMNS COLUMN TABLE DOMAIN PK FK FK-TABLE Namn ANSTÄLLD String yes no Lön ANSTÄLLD Integer no no Chef ANSTÄLLD String no yes ANSTÄLLD Avd ANSTÄLLD String no yes AVDELNING Anamn AVDELNING String yes no Våning AVDELNING Integer no no SELECT COLUMN FROM SYSCOLUMNS WHERE FK = ”yes” AND TABLE = ”ANSTÄLLD”
Optimering Inläsning och parsing Frågeoptimering Kodgenerering Fråga Inläsning och parsing Bearbetad fråga Frågeoptimering Exekveringsplan Kodgenerering Kod för exekvering Resultat Frågeexekvering
Initialt frågeträd PNamn s Lön > 20000 X ANSTÄLLD X AVDELNING SELECT Namn FROM ANSTÄLLD, AVDELNING, SÄLJER WHERE Lön > 20000 AND ANSTÄLLD.Avd = AVDELNING.Anamn AND SÄLJER.Avd = AVDELNING.Anamn AND SÄLJER.Vara = ”Skor” PNamn s Lön > 20000 AND ANSTÄLLD.Avd = AVDELNING.Anamn AND SÄLJER.Avd = AVDELNING.Anamn AND SÄLJER.Vara = ”Skor” X ANSTÄLLD X AVDELNING SÄLJER
Transformerat frågeträd PNamn s ANSTÄLLD.Avd = AVDELNING.Anamn AND SÄLJER.Avd = AVDELNING.Anamn X s Lön > 20000 X ANSTÄLLD s SÄLJER.Vara = ”Skor” AVDELNING SÄLJER
Transformerat frågeträd PNamn |X| ANSTÄLLD.Avd = AVDELNING.Anamn s Lön > 20000 |X| Avd = Anamn ANSTÄLLD s SÄLJER.Vara = ”Skor” AVDELNING SÄLJER