Från verklighet via modell till databas. Idag. Testa reglerna på varuhusmodellen. Från verklighet via modell till databas

Relevanta dokument
Idag. 1. Från modell till databasstruktur. 2. Prata med databaser (frågepsråket SQL)

Idag. 1. En enkel databas. 2. Prata med databaser (frågepsråket SQL)

Idag. Varför modellera? Modellering. Modelleringsverktygets egenskaper. Modelleringsverktyget

Idag. Modellering. Varför modellera? Konceptuell modell Modelleringsverktyg Objektklasser Sambandsklasser Knepiga attribut Modelleringsprocessen

Idag. Modellering. Varför modellera? Konceptuell modell Modelleringsverktyg Objektklasser Sambandsklasser Knepiga attribut Modelleringsprocessen

Idag. Exempel. Exempel modellen (1) Exempel...

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

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

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

Idag. Varför modellera? Modellering. Modelleringsverktygets egenskaper. Modelleringsverktyget

Övningar i SQL. SQLAccess.doc Ove Lundgren

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

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

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

Introduktion till frågespråket SQL (v0.91)

Tentamen i Databasteknik

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

Fiktiv tentamen för DD1370 Databasteknik och informationssystem

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

Tentamen. i Databasteknik. lördagen den 13 mars Tillåtna hjälpmedel: Allt upptänkligt material

Structured Query Language (SQL)

Tentamen för 1E1601. Måndag 10 mars 2003, kl Alla hjälpmedel tillåtna

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

Tentamen i Databasteknik

07/11/14. Databasteknik och informationssystem DD1370 F2. Allmänna frågor. Är Lab0 svårbegriplig? Nu: Clickers. Är Kurswebben svårbegriplig?

Fiktiv tentamen för DD1370 Databasteknik och informationssystem

Databasteknik. Vad är. Vad är databaser bra till? data? föreläsare: Kjell Lindqvist. och NADA. databaser? och. vad är de bra för?

Databasspråket SQL - online.

Grunderna i SQL del 1

Databasspråket SQL - online.

SQL. Structured Query Language. Frågespråk för att används för. Kommandon. data åtkomst data manipulation

Karlstads Universitet, Datavetenskap 1

Tentamen i Databasteknik

Relationsdatabasdesign 2I-4067 HT99. Relationsalgebra. som resultat!

Structured query language (SQL)

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

Tentamen för DD1370 Databasteknik och informationssystem

Tabeller och kolumner SQL. Lägga till en ny post. Lägga till en ny post

Databaser och SQL - en kort introduktion

Databaser. Vad du ska lära dig: Ordlista

Idag. Hur skapar vi och underhåller en databas? Index? Vad är det och varför behövs de? Behöver jag bry mig om index?

Databasspråket SQL - online.

Design och underhåll av databaser

Databaser och. SQL, utsökningar mot en tabell

Databaser och. SQL, utsökningar mot flera tabeller TENTA. # radnr (#) studnr (#) kursnr * tentadatum * betyg

Databasspråket SQL - online.

Databasspråket SQL - online.

Grunderna i SQL del 1

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

16/12/14. Databasteknik och informationssystem DD1370. Dagens föreläsning (den sista!) Motivera med kokbok! Idag: Inga knappar L. Dagens föreläsning

Tentamen för DD1370 Databasteknik och informationssystem

9. Between 10. Group by 11. Aggregatfunktionerna max, min, sum och avg 12. Nästlade sökningar

Tentamen för DD1370 Databasteknik och informationssystem

Exempel-Tentamen III

MODELLER OCH SPRÅK FÖR RELATIONSDATABASER: Relationsalgebra, Relationskalkyl (Tuple calculus) & SQL

13/11/14. Databasteknik och informationssystem DD1370 F3. Ett urval ur databasen bestäms av en SQL-fråga. Påminnelse: Vad är en Databas?

02/12/14. Databasteknik och informationssystem DD1370. Behövs Föreläsning 8? Dagens föreläsning. Om Lab 1. De 11 Stegen (Kokbok)

Tentamen i. Databasteknik

Frågespråk och SQL. nikos dimitrakas rum 2423

WCMS-15, Webbutvecklare CMS

Databaser och Datamodellering Foreläsning IV

Innehåll MySQL Intro. Allmänt om Lagrade Procedurer Enkel utformning Skapa en lagrad procedur Använda parameter som indata

Tentamen för DD1370 Databasteknik och informationssystem

Lösningsförslag, tentamen i Databaser

Databasutveckling Introduktion till SQL och TSQL

SQL, nästlade delfrågor Nästlade delfrågor. En nästlda delfråga är ett select-from-where uttryck inom where-klausulen i en annan fråga.

DIVISIONSEXEMPEL RELATIONSALGEBRA OCH SQL. r s använder vi för att uttrycka frågor där ordet alla figurerar:

Vad är SQL? Introduktion till SQL

Vyer, Prepared Statements, Triggers

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

Lösningsförslag till Exempel tentamen

Relationsdatabasdesign

Tentamen för DD1370 Databasteknik och informationssystem

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

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

Sample exam questions. Database exam TIG058

1. SQL 2. Utsökningar mot flera tabeller. 4. IN-operatorn 5. Join 6. Kartesisk produkt 7. Tabellalias

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

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

GIS, databasteknik och kartografi. Databasmodellering

SQL del 2. Christer Stuxberg Institutionen för Informatik och Media

Tentamen för DD1370 Databasteknik och informationssystem

Dagens föreläsning. KTH & SU, CSC Databasteknik Föreläsning 10 sid 1

DVA234 Databaser. Dag Nyström, Introduktion till databaser och MS SQL Server

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

3. Dynamiska webbplatser, 20 Yhp (4 v)

08/12/14. Databasteknik och informationssystem DD1370. Behövs Föreläsning 8? Kursens (återstående) mål Dagens föreläsning

Introduktion MySQL och MariaDB

Deklarativt programmeringsparadigm

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

Prova på-laboration i SQL

Idag. Exempel. Exempel modellen (1) Exempel...

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

Lösningar till tentamen i EDAF75

Databasutveckling Tabeller. tinyint 1 byte (0-255) Upp till 8 bytes

Tentamen DATABASTEKNIK - 1DL116

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

Vad du skall komma ihåg från tidigare föreläsningar. Dagens föreläsning. Evaluering av frågor. Data dictionary

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

Transkript:

Idag 1. Från modell till databasstruktur Från verklighet via modell till databas När vi analyserat den värld vi vill representera i en databas har vi tagit med alla möjliga kopplingar och beskrivit dem i en modell. Inte allt är nödvändigt att representera i databasen, 1:1- och 1:N-samband kan vi få med utan att ha en speciell tabell för representationen. Hade vi en sådan tabell skulle den bli uppenbart onödig 2. Prata med databaser (frågepsråket SQL) Anställd Kalle Eva Sport Sport Avdelning Anders Mat Kalle, Eva och Anders förekommer endast en gång var i Anställd så vi kan lägga till avd i Anställd istället för att ha en extra tabell Vi kan faktiskt använda ett antal kokboks -regler för övergång till DB-struktur DD1370 (Föreläsning 3) Databasteknik och informationssystem 7,5 hp Hösten 2008 1 / 22 DD1370 (Föreläsning 3) Databasteknik och informationssystem 7,5 hp Hösten 2008 2 / 22 Från verklighet via modell till databas Testa reglerna på varuhusmodellen Jag kommer att använda följande notation: TabellNamn (i-termer, e-termer) för att beteckna en tabell (basrelation) och följande regler finns i den utlovade kokboken och senare, på övning, på större modeller a. En objektklass som innehåller e-term(-er) bildar en tabell b. En objektklass som inte har e-termer men finns på N-sidan av någon 1:N-sambandsklass bildar en tabell c. En sambandsklass av högre ordning än 2 bildar en tabell d. En M:N-sambandsklass bildar en tabell e. En 1:N-sambandsklass försvinner men 1-sidans objektklass i-term blir e-term i tabellen som bildas av n-sidans objektklass f. En 1:1-sambandsklass hanteras antingen som en 1:N-sambandsklass där man godtyckligt väljer en sida som N-sida eller tar man bort den och slår samman objektklasserna som sambandsklassen binder samman Anställd Leverantör Anställning Lager Avdelning Försäljning Vara Regel f komplicerar lite grand ger ett icke-deterministiskt inslag DD1370 (Föreläsning 3) Databasteknik och informationssystem 7,5 hp Hösten 2008 3 / 22 DD1370 (Föreläsning 3) Databasteknik och informationssystem 7,5 hp Hösten 2008 4 / 22

Från varuhusmodell till varuhusdatabas Från varuhusmodell till varuhusdatabas... a. En objektklass som innehåller e-term(-er) bildar en tabell Vara (varunr, typ) Avdelning (avd, våning) Anställd (namn, lön, chef) Leverantör (företag, adress) b. En objektklass som inte har e-termer men finns på N-sidan av någon 1:N-sambandsklass bildar en tabell Finns ingen c. En sambandsklass av högre ordning än 2 bildar en tabell Lager (företag, avd, varunr, volym) Vi har... Vara (varunr, typ) Avdelning (avd, våning) Anställd (namn, lön, chef) Leverantör (företag, adress) Lager (företag, avd, varunr, volym) d. En M:N-sambandsklass bildar en tabell Försäljning (avd, varunr, volym) e. En 1:N-sambandsklass försvinner... Anställd (namn, lön, chef, avd) f. En 1:1-sambandsklass... Finns ingen DD1370 (Föreläsning 3) Databasteknik och informationssystem 7,5 hp Hösten 2008 5 / 22 DD1370 (Föreläsning 3) Databasteknik och informationssystem 7,5 hp Hösten 2008 6 / 22 Från varuhusmodell till varuhusdatabas... slutresultat Vara (varunr, typ) Avdelning (avd, våning) Anställd (namn, lön, chef, avd) Leverantör (företag, adress) Lager (företag, avd, varunr, volym) Försäljning (avd, varunr, volym) Nycklar och främmande nycklar En nyckel är ett eller flera attribut som unikt identifierar en rad i en tabell, d.v.s. i-termerna från modellen En främmande nyckel, ( ägt attribut ) är ett eller flera attribut som är nyckel i en annan tabell, t.ex. är avd i tabellen Anställd nyckel i tabellen Avdelning Vi har flera sådana, alla attribut som har samma namn, utom volym, är främmande nycklar i de tabeller där de inte ensamma utgör nyckel Men man måste vara försiktig. Det vore olyckligt att anse att kombinationen avd, varunr i Lager är främande nyckel (med ref till Försäljning). Det måste ju finnas varor i lager innan de kan säljas. Tvärtom vore logiskt men det går inte. Man kan ha andra, inte så uppenbara, främmande nycklar. Ett sånt exempel finns i varuhusdatabasen. En chef måste ju vara anställd i företaget så chef är främmande nyckel med ref till samma tabell (och attributet namn). Så det är inte namnlikheten som avgör. Namnlikhet kan vara lurigt, volym i Lager är ju lagervolym men volym i Försäljning är försäljningsvolym. DD1370 (Föreläsning 3) Databasteknik och informationssystem 7,5 hp Hösten 2008 7 / 22 DD1370 (Föreläsning 3) Databasteknik och informationssystem 7,5 hp Hösten 2008 8 / 22

Prata med databaser SQL Structured query language Förr tvingades man skriva program för varje frågeställning Tidsödande och krävde specialister Därför utvecklades en mängd olika språk som skulle ha vissa egenskaper SQL Structured query language DD1370 (Föreläsning 3) Databasteknik och informationssystem 7,5 hp Hösten 2008 9 / 22 De skulle vara deklarativa (specificera resultatets egenskaper och låt datorn generera metoden för att hitta resultatet) De skulle vara optimerande så att även en idiotiskt formulerad fråga utfördes på rimlig tid De skulle vara intuitiva, vilket kom att betyda så nära talad engelska som möjligt eller grafiska (programmera med exempel eller gester) SQL har så småningom blivit en de facto standard. Några udda språk finns kvar med för en tynande tillvaro Till SQL har utvecklats möjligheter att bädda in SQL-sater i program skrivna i vanliga programspråk och ta hand om och hantera svaren från databasen SQL används även för att skapa databaser och databastabeller (och förstöra dem också) DD1370 (Föreläsning 3) Databasteknik och informationssystem 7,5 hp Hösten 2008 10 / 22 SQL Vad måste man kunna göra med ett sådant språk? SQL Hämta data Skapa en databas (inte standardiserat) Kasta bort en databas drop database <databasnamn> Skapa tabeller create table <tabellnamn>... Ta bort tabeller drop table <tabellnamn> Lägga till data i tabeller insert... into <tabellnamn> Ta bort data ur tabeller delete from <tabellnamn>... Uppdatera data i tabeller update <tabellnamn>... Hämta data från tabeller Kommer... Eftersom språket kan göra så många saker på så många sätt är det bäst att titta efter vid behov (men vi ska gå igenom några exempel) Omfattande hjälp finns i databashanteringsystemet Vad krävs för att kunna göra allt? Vi måste kunna dela upp tabeller, plocka enstaka rader eller kolumner eller båda (= plocka enstaka värden) sätta ihop resultaten till meningsfull information Kort sagt: Vi måste kunna plocka isär och sätta ihop efter eget behag Men då tillåts vi också göra bort oss (ibland ganska kapitalt) Extra krydda(??). Vi vet inte alltid om ett tomt svar är korrekt eller beror på felformulerad fråga DD1370 (Föreläsning 3) Databasteknik och informationssystem 7,5 hp Hösten 2008 11 / 22 DD1370 (Föreläsning 3) Databasteknik och informationssystem 7,5 hp Hösten 2008 12 / 22

SQL Grunden SQL Plocka rader Frågor till databasen ställs med select [distinct] lista-1-med-kolumner from lista-med-tabeller where lista-1-med-villkor [group by lista-2-med-kolumner [having lista-2-med-villkor]] [order by del-av-lista-1-med-kolumner] Varje operation ger en tabell som resultat (tabellen är den enda grundläggande datatypen) Vi ska se på en del exempel och kommentera dem ; skriv ut tabellen anställd where lön > 9000; skriv ut de anställda som tjänar mer än 9000 where lön > 9000 and chef = Näsström C ; where lön > 9000 or chef = Näsström C ; where lön > 9000 and not chef = Näsström C ; where lön > 9000 and chef <> Näsström C ; Jag använder varuhusdatabasen DD1370 (Föreläsning 3) Databasteknik och informationssystem 7,5 hp Hösten 2008 13 / 22 DD1370 (Föreläsning 3) Databasteknik och informationssystem 7,5 hp Hösten 2008 14 / 22 SQL Plocka kolumner SQL Relationsvariabler... select Företag from Leverantör; select Lön from Anställd; select Namn,Lön from Anställd where lön > 9000 and chef <> Näsström C ; plocka kolumner ur vissa rader (eller enstaka värden) Test på mängdtillhörighet Vad tjänar chefen/cheferna på skoavdelningen? select lön from Anställd where namn in (select chef from Anställd where avd = skor ); Även kostanta mängder kan användas select lön from Anställd where avd in (select avd from Avdelning where våning in (4, 5)) och godtyckligt djup på nästling Vad tjänar cheferna på fjärde våningen? select lön from Anställd where namn in (select chef from Anställd where avd in (select avd from Avdelning where våning = 4)); create view tmp as select * from Anställd where chef = Näsström C ; skapar ett SQL-uttryck som lagras undan för senare användning... ; create view resultat as select namn from tmp where lön > 9000; som fungerar som vilken tabell som helst, rätt kolumnnamn ärvs create view resultat(anst, månadslön) as select namn, lön from Anställd; Men man kan namnge kolumnerna också... ger stora möjligheter att hämta vilka data som helst och bygga ihop i stort sett vilka tabeller som helst DD1370 (Föreläsning 3) Databasteknik och informationssystem 7,5 hp Hösten 2008 15 / 22 DD1370 (Föreläsning 3) Databasteknik och informationssystem 7,5 hp Hösten 2008 16 / 22

SQL Mängdoperationer SQL bygga ihop tabeller Man bygger språken på mängdmatematik (mängdalgebra och predikatlogik) where lön > 9000 and chef = Näsström C union select * from Anställd where lön > 10000 and chef = Hovander T ; where chef = Näsström C except select * from Anställd where lön <= 9000; where chef = Näsström C intersect select * from Anställd where lön > 9000; Här har man tillgång till Join som slår ihop två rader och Naturlig join som slår ihop rader men om det finns kolumner med samma namn i de två delarna tas bara rader med som har likhet i kolumnerna med samma namn (...??) och sedan dumpar en av två kolumner som blivit identiska, Avdelning where våning = 2;, Avdelning where Avdelning.våning = 2;, Avdelning where Anställd.avd <> Avdelning.avd;, Avdelning where Avdelning.avd <> Anställd.avd; join Avdelning on Anställd.avd <> Avdelning.avd; natural join Avdelning; DD1370 (Föreläsning 3) Databasteknik och informationssystem 7,5 hp Hösten 2008 17 / 22 DD1370 (Föreläsning 3) Databasteknik och informationssystem 7,5 hp Hösten 2008 18 / 22 SQL Aggregat Man kan utföra vissa enkla beräkningar på innehållet i en tabell eller en tabellkolumn. SUM(kol), AVG(kol), MAX(kol), MIN(kol), COUNT(distinct kol eller *) select SUM(lön) from Anställd; Finn totala lönekostnaden för alla anställda, ignorera NULL-värden select SUM(lön) from Anställd where avd= skor ; Finn lönekostnaden för skoavdelningen, ignorera NULL-värden select SUM(lön), COUNT(*) from Anställd where avd= skor ; Finn lönekostnaden och antalet anställda på skoavdelningen, ignorera NULL-värden select avd, SUM(lön), COUNT(*) from Anställd group by avd; Finn lönekostnad och antalet anställda för alla avdelningar, ignorera NULL-värden create view result(avd, avglön) as select avd, AVG(lön) from Anställd group by avd; select avd from result where avglön = (select MAX(avglön) from result; Vilken avdelning har högst medellön? DD1370 (Föreläsning 3) Databasteknik och informationssystem 7,5 hp Hösten 2008 19 / 22 SQL Alias (tupelvariabler) Man kan använda variabler som är kapabla att hålla i en tupel (tabellrad). Bra om man behöver läsa i samma tabell två gånger i samma fråga eller man vill referera mellan nivåerna i en nästlad fråga. select distinct a.varunr from lager a, lager b where a.varunr=b.varunr and a.avd!= b.avd ; Vilka varor (varunummer) finns på fler än ett lager? U where chef = Näsström C and exists (select * from Anställd where lön > 9000 and namn = U.namn and lön = U.lön and chef = U.chef and avd = U.avd) ett annat sätt att uttrycka skärning DD1370 (Föreläsning 3) Databasteknik och informationssystem 7,5 hp Hösten 2008 20 / 22

SQL Lite udda men användbara saker SQL Textmatchning Man kan jämföra ett värde med en mängd som innehåller endast ett värde select namn from Anställd L where lön > (select max(lön) from Anställd where avd = fisk ); Vilka tjänar mer än den som tjänar mest på fiskavdelningen? select namn from Anställd L where lön > (select min(lön) from Anställd where avd = fisk ); Vilka tjänar åtminstone inte sämre än den som tjänar sämst på fiskavdelningen? Man kan också jämföra med en mängd värden select namn from Anställd L where lön > all (select lön from Anställd where avd = fisk ); Vilka tjänar mer än den som tjänar mest på fiskavdelningen? (igen) select namn from Anställd L where lön > any (select lön from Anställd where avd = fisk ); Vilka tjänar mer än den som tjänar minst på fiskavdelningen? (igen) Like och Matches kan användas vid matchning av texter select namn from Anställd L where namn like A% ; select namn from Anställd L where namn matches A?? ; Like: % följd av tecken _ ett tecken \ speciell mening med nästa tecken Matches: * följd av tecken? ett tecken [ ] ett tecken ut ett intervall \ speciell mening med nästa tecken DD1370 (Föreläsning 3) Databasteknik och informationssystem 7,5 hp Hösten 2008 21 / 22 DD1370 (Föreläsning 3) Databasteknik och informationssystem 7,5 hp Hösten 2008 22 / 22