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

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

Databaser. Vad du ska lära dig: Ordlista

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

Laborationer - databaser, EDAA20 Programmering och databaser

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

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

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

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

Grunderna i SQL del 1

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

Databaser och Datamodellering Foreläsning IV

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

Föreläsning 3 Dagens föreläsning går igenom

Tentamen för DD1370 Databasteknik och informationssystem

Structured Query Language (SQL)

Tentamen för DD1370 Databasteknik och informationssystem

Lösningar till tentamen i EDAF75

Relationsdatabasdesign

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

Lite om databasdesign och modellering

Karlstads Universitet, Datavetenskap 1

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

Övningar i SQL. SQLAccess.doc Ove Lundgren

INNEHÅLL SQL DEL 2. Funktioner inbyggda Aggregatfunktioner Skalärfunktioner. Chapter 11. Beginning SQL Server 2008 for Developers

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

Grunderna för relationsmodellen!

Konceptuella datamodeller

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

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

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

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

Föreläsning 4 Dagens föreläsning går igenom

Tentamen DATABASTEKNIK - 1DL116

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

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

Starta MySQL Query Browser

Structured query language (SQL)

Databaser och. SQL, utsökningar mot en tabell

Mitthögskolan ITM Telefon Access. Laborationskompendium för grunderna i databasen Microsoft Access. Detta exemplar tillhör:

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

Tentamen för DD1370 Databasteknik och informationssystem

Tentamen NDA01G Öppen för alla. Tentamenskod: Inga hjälpmedel är tillåtna

Webbprogrammering, grundkurs 725G54

Institutionen för datavetenskap HT 2017

Prova på-laboration i SQL

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

VAD GÖR DU / VEM ÄR DU?

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

Databaser design och programmering. Design processen ER- modellering

Webprogrammering och databaser. Konceptuell datamodellering med ER-modellen

Lär känna MS SQL 2008 / Övning. Observera. Tips. Förberedelse

Webprogrammering och databaser. Konceptuell datamodellering med ER-modellen

Design och underhåll av databaser

Datalager och datautvinning

Laboration SQL. Kom igång.

NORMALISERING. Mahmud Al Hakim

I denna laboration skriver jag inte ut resultatet på de flesta frågorna utan du kör dem själv i din miljö.

Tentamen för DD1370 Databasteknik och informationssystem

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

Grunderna i SQL del 1

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

Tentamen plus lösningsförslag

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

Tentamen för DD1370 Databasteknik och informationssystem

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

Inga hjälpmedel är tillåtna

Exempel-Tentamen III

Logisk databasdesign

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

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

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

Databasutveckling Microsoft T-SQL - Fortsättning. Funktioner GROUP BY HAVING Skapa databaser Skapa tabeller Lite om transaktioshantering

Tentamen. Databasmetodik Lördag 27 september 2014 kl

Del 2: ER-modellering och överföring till Databasstruktur v0.9

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Normalisering. Christer Stuxberg Institutionen för Informatik och Media

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

Relationsmodellen och syntetisk databasdesign

Karlstads Universitet, Datavetenskap 1

Sample exam questions. Database exam TIG058

Frågor att lösa med SQL mot databasen kursdb_sql Sida 1 av 5

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

TDDC74 Programmering: Abstraktion och modellering Dugga 3, kl 14 16, 25 mars 2015

Lösningsförslag till Exempel tentamen

Databaser - Design och programmering

Databasdesign. E-R-modellen

Lösningsförslag, tentamen i Databaser

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

Databasspråket SQL - online.

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

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

732G16: Databaser - Design och programmering

25/11/14. Databasteknik och informationssystem DD1370. Påminnelse inför Lab 1 redovisningen. Repetition: ER modellering (gammalt + nytt)

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

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

Informationssystem och Databasteknik

Se kurshemsidan för användbara länkar för att genomföra denna laboration.

Databasspråket SQL - online.

Transkript:

Databaser Vad är en databas? Vad du ska lära dig: Använda UML för att modellera ett system Förstå hur modellen kan översättas till en relationsdatabas Använda SQL för att ställa frågor till databasen Använda en databashanterare Ordlista UML ett språk för modellering av alla typer av problem relationsdatabas data ordnade i tabeller SQL ett språk för att hämta och ändra data i databasen databashanterare program som hanterar databasen En samling data som hör ihop som modellerar en del av verkligheten. som är persistent (dvs. inte försvinner när man avslutar programmet). En databas kan till exempel vara: en textfil. ett excel-dokument. en databas som hanteras av en databashanterare. EDAA20 (Föreläsning databaser) HT 2017 1 / 66 EDAA20 (Föreläsning databaser) HT 2017 2 / 66 Vad är en databashanterare? Relationsdatabas Ett program som har till uppgift att lagra och hantera databaser. Kan hantera mycket data på ett effektivt sätt. Låter användaren specificera strukturen för databasen. Låter användare ställa frågor till databasen. Hanterar samtidig access till databasen. Exempel på databashanterare: MySQL Oracle Microsoft Access En relationsdatabas består av relationer (tabeller). En relation har attribut (kolumner itabellen). En relation består av en mängd tupler (rader itabellen). 1970 E. F. Codd EDAA20 (Föreläsning databaser) HT 2017 3 / 66 EDAA20 (Föreläsning databaser) HT 2017 4 / 66

Exempel på en relation Kunder Exempel på en relation Bankkonton relation attribut adress 720101-1234 Bo Ek Malmö 740105-2335 Lars Bok Malmö 850318-2345 Eva Alm Lund 860101-3446 Sara Alm Lund KontoNr saldo 123456 4300 850318-2345 345678 5020 720101-1234 357911 30000 860101-3446 678901 27000 850318-2345 890123 120 720101-1234 tupel EDAA20 (Föreläsning databaser) HT 2017 5 / 66 EDAA20 (Föreläsning databaser) HT 2017 6 / 66 Från problem till tabeller ER-modell I ER-modellen visas vilken information som ska finnas i databasen. hur de olika komponenterna hänger ihop. 1 Beskriv systemet i en ER-modell. 2 Översätt ER-modellen till relationer (tabeller). I kursen används UML (Unified Modeling Language) för att utrycka ER-modellen. ER står för Entity entitet ( sak, jfr objekt i programmering) Relationship samband 3 Skapa tabellerna i en databashanterare. Kund adress 1 Bankkonto kontonr saldo EDAA20 (Föreläsning databaser) HT 2017 7 / 66 EDAA20 (Föreläsning databaser) HT 2017 8 / 66

Relationsmodell Nycklar Visar vilka tabeller det finns. Relationens schema (beskrivning av vad som kan lagras i tabellen) skrivs så här: Bankkonton(kontoNr, saldo, ) Kunder(,,, adress) En nyckel är ett (eller flera attribut tillsammans) vars värde garanterat är unikt. Det får alltså inte finnas flera tupler (rader) med samma värde på nyckeln. Man brukar välja ut en av nycklarna och kalla denna primärnyckel. Har man inget bra alternativ till primärnyckel kan man numrera tuplerna och använda numret som primärnyckel. relationens namn attribut Exempel: Kunder(,,, adress) Bankkonton(kontoNr, saldo, ) EDAA20 (Föreläsning databaser) HT 2017 9 / 66 EDAA20 (Föreläsning databaser) HT 2017 10 / 66 SQL SQL-frågor SQL Structured Query Language Språk för att ställa frågor till databasen, t.ex. söka i databasen eller uppdatera data. Exempel: SELECT, FROM Kunder; På följande bilder finns exempel på SQL-frågor för att hämta information från en databas med tabellerna: Kunder(,,, adress) Bankkonton(kontoNr, saldo, ) EDAA20 (Föreläsning databaser) HT 2017 11 / 66 EDAA20 (Föreläsning databaser) HT 2017 12 / 66

Hämta all information från en tabell Exempel: Tag reda på all information i tabellen Bankkonton. SELECT FROM Bankkonton; kontonr saldo 123456 4300 850318-2345 345678 5020 720101-1234 357911 30000 860101-3446 678901 27000 850318-2345 890123 120 720101-1234 Välja ut vissa kolumner Man kan välja ut vissa kolumner (attribut) genom att ange de önskade attributen i SELECT-delen. Exempel: Tag reda på alla kontons innehavare (personnummer) och kontonummer. SELECT, kontonr FROM Bankkonton; kontonr 850318-2345 123456 720101-1234 345678 860101-3446 357911 850318-2345 678901 720101-1234 890123 EDAA20 (Föreläsning databaser) HT 2017 13 / 66 EDAA20 (Föreläsning databaser) HT 2017 14 / 66 Döpa om kolumner Man kan döpa om namnen på de kolumner som visas. Exempel: Tag reda på alla kontons innehavare (personnummer) och kontonummer, men visa resultatet med andra kolumnnamn. SELECT AS kontoinnehavare, kontonr AS kontonummer FROM Bankkonton; Slå ihop kolumner Exempel: Visa personnummer och namn på alla kunder. Namnen ska vara på formen,. SELECT, +, + AS namn FROM Kunder; kontoinnehavare kontonummer 850318-2345 123456 720101-1234 345678 860101-3446 357911 850318-2345 678901 720101-1234 890123 namn 720101-1234 Ek, Bo 740105-2335 Bok, Lars 850318-2345 Alm, Eva 860101-3446 Alm, Sara EDAA20 (Föreläsning databaser) HT 2017 15 / 66 EDAA20 (Föreläsning databaser) HT 2017 16 / 66

Sortera Exempel: Tag reda på alla kunder. Visa kunderna sorterade efter i första hand och i andra hand. SELECT FROM Kunder ORDER BY, ; adress 850318-2345 Eva Alm Lund 860101-3446 Sara Alm Lund 740105-2335 Lars Bok Malmö 720101-1234 Bo Ek Malmö Sortera i avtagande ordning: Visa ej dubletter Exempel: Tag reda på alla kontoinnehavares personnummer. Även om personen har flera konton ska personens personnummer bara med en gång. SELECT DISTINCT FROM Bankkonton; 720101-1234 850318-2345 860101-3446 ORDER BY DESC, DESC; EDAA20 (Föreläsning databaser) HT 2017 17 / 66 EDAA20 (Föreläsning databaser) HT 2017 18 / 66 Välja ut vissa rader Övning Man kan välja ut vissa rader (tupler) genom att skriva ett villkor i WHERE-delen. Exempel: Tag reda på de kontonummer som hör till en kontoinnehavaren med personnummer 850318-2345. Vilka kunder bor i Lund? SELECT kontonr FROM Bankkonton WHERE = 850318-2345 ; kontonr 123456 678901 Eva Sara Alm Alm EDAA20 (Föreläsning databaser) HT 2017 19 / 66 EDAA20 (Föreläsning databaser) HT 2017 20 / 66

Flera delvillkor Man kan sätta ihop flera delvillkor i WHERE-delen med AND (och), OR (eller) och NOT (icke). Exempel: Vilken adress har personen med namnet Sara Alm. SELECT adress FROM Kunder WHERE = Sara AND = Alm ; adress Lund EDAA20 (Föreläsning databaser) HT 2017 21 / 66 Flera delvillkor forts Exempel: Vilken konton har ett saldo mellan 10000 och 50000 kr? eller SELECT FROM Bankkonton WHERE saldo >= 10000 AND saldo < 50000; SELECT FROM Bankkonton WHERE saldo BETWEEN 10000 AND 50000; kontonr saldo 357911 30000 860101-3446 678901 27000 850318-2345 EDAA20 (Föreläsning databaser) HT 2017 22 / 66 Matcha strängar % motsvarar 0-många tecken, _ motsvarar exakt ett tecken. OBS! I den databashanterare som används på laborationerna är det som matchar 0-många tecken och? som matchar exakt ett tecken. Exempel: Visa kontonumren för de konton vars innehavare är födda år 1985. Övning Vilka kunder är födda i januari? SELECT kontonr FROM Bankkonton WHERE LIKE 85 ; kontonr 123456 678901 720101-1234 740105-2335 860101-3446 EDAA20 (Föreläsning databaser) HT 2017 23 / 66 EDAA20 (Föreläsning databaser) HT 2017 24 / 66

Mönster för en fråga Aggregatfunktioner SELECT kolumner FROM tabeller WHERE villkor; SELECT Vilka kolumner (attribut) ska med? FROM Vilka tabeller ska data hämtas ifrån? WHERE Vilka rader (tupler) ska med? Tips! Det är oftast enklast att börja med FROM när man ska formulera en fråga. Med aggregatfunktioner kan man t.ex. summera alla värden i en kolumn eller beräkna medelvärdet: SUM, AVG, MIN, MAX, COUNT Hur många konton finns det? 5 SELECT COUNT() FROM Bankkonton; Vilket är största saldot? SELECT MAX(saldo) FROM Bankkonton; 30000 EDAA20 (Föreläsning databaser) HT 2017 25 / 66 EDAA20 (Föreläsning databaser) HT 2017 26 / 66 Övning Hämta information från flera tabeller Hur många kunder bor i Lund? Vi har tidigare använt en SQL-fråga som visar information om alla kontons innehavare (personnummer) och kontonummer. All information finns i tabellen Bankkonton och SQL-frågan ser ut så här: SELECT, kontonr FROM Bankkonton; Antal 2 Antag att vi istället vill ta reda på kontoinnehavarnas namn istället för personnummer. Problemet är att de data vi vill ha finns i två olika tabeller: Bankkonton( kontonr, saldo, ) Kunder(,,, adress) EDAA20 (Föreläsning databaser) HT 2017 27 / 66 EDAA20 (Föreläsning databaser) HT 2017 28 / 66

Tabellerna Bankkonton och Kunder kontonr saldo 123456 4300 850318-2345 345678 5020 720101-1234 357911 30000 860101-3456 678901 27000 850318-2345 890123 120 720101-1234 adress 720101-1234 Bo Ek Malmö 740105-2335 Lars Bok Malmö 850318-2345 Eva Alm Lund 860101-3456 Sara Alm Lund EDAA20 (Föreläsning databaser) HT 2017 29 / 66 Felaktigt försök att hämta data från två tabeller För många rader Ta med bägge tabellerna i FROM-delen: SELECT,, kontonr FROM Bankkonton, Kunder; Resultatet blir den kartesiska produkten (alla rader matchas med alla): kontonr Ek Bo 123456 Bok Lars 123456 Alm Eva 123456 Alm Sara 123456 Ek Bo 345678 Bok Lars 345678 Alm Eva 345678 Alm Sara 345678 Ek Bo 357911......... EDAA20 (Föreläsning databaser) HT 2017 30 / 66 Felaktigt försök att hämta data från två tabeller Kartesisk produkt Hämta data från två tabeller Join kontonr saldo Bankkonton_ Kunder_ adress 123456 4300 850318-2345 720101-1234 Bo Ek Malmö 123456 4300 850318-2345 740105-2335 Lars Bok Malmö 123456 4300 850318-2345 850318-2345 Eva Alm Lund 123456 4300 850318-2345 860101-3456 Sara Alm Lund 345678 5020 720101-1234 720101-1234 Bo Ek Malmö 345678 5020 720101-1234 740105-2335 Lars Bok Malmö 345678 5020 720101-1234 850318-2345 Eva Alm Lund 345678 5020 720101-1234 860101-3456 Sara Alm Lund 357911 30000 860101-3456 720101-1234 Bo Ek Malmö 357911 30000 860101-3456 740105-2335 Lars Bok Malmö 357911 30000 860101-3456 850318-2345 Eva Alm Lund 357911 30000 860101-3456 860101-3456 Sara Alm Lund 678901 27000 850318-2345 720101-1234 Bo Ek Malmö 678901 27000 850318-2345 740105-2335 Lars Bok Malmö 678901 27000 850318-2345 850318-2345 Eva Alm Lund 678901 27000 850318-2345 860101-3456 Sara Alm Lund 890123 120 720101-1234 720101-1234 Bo Ek Malmö 890123 120 720101-1234 740105-2335 Lars Bok Malmö 890123 120 720101-1234 850318-2345 Eva Alm Lund 890123 120 720101-1234 860101-3456 Sara Alm Lund Vi vill bara matcha de rader som har samma personnummer i de bägge tabellerna: kontonr saldo 123456 4300 850318-2345 345678 5020 720101-1234 357911 30000 860101-3456 678901 27000 850318-2345 890123 120 720101-1234 adress 720101-1234 Bo Ek Malmö 740105-2335 Lars Bok Malmö 850318-2345 Eva Alm Lund 860101-3456 Sara Alm Lund Lösning: använd JOIN för att matcha rader med samma personnummer. EDAA20 (Föreläsning databaser) HT 2017 31 / 66 EDAA20 (Föreläsning databaser) HT 2017 32 / 66

Hämta data från två tabeller JOIN Tag reda på alla kontons innehavare (namn) och kontonummer. SELECT,, kontonr FROM Bankkonton INNER JOIN Kunder ON Bankkonton. = Kunder.; Resultatet blir en rad per konto: kontonr Alm Eva 123456 Ek Bo 345678 Alm Sara 357911 Alm Eva 678901 Ek Bo 890123 Vi har matchat raderna i Bankkonton och Kunder, men bara tagit med de rader där kontotinnehavarens personnummer är lika med kundens personnummer. EDAA20 (Föreläsning databaser) HT 2017 33 / 66 Mönster för JOIN SELECT kolumnlista FROM tabell1 {INNER LEFT [OUTER] RIGHT [OUTER]} JOIN tabell2 ON tabell1.kolumn1 = tabell2.kolumn2; Man kan använda AND i ON-villkoret om man vill utföra join på flera attribut. Med INNER JOIN menas att vi tar den kartesiska produkten av tabell1 och tabell2, men bara behåller de rader med samma värde på tabell1.kolumn1 och tabell2.kolumn2. OUTER JOIN används då man vill ha med tupler från ena tabellen som inte har någon motsvarighet i den andra tabellen. T ex innebär RIGHT OUTER JOIN att varje tupel i högra tabellen matchas med de som passar i vänstra tabellen, om ingen matchande tupel finns fylls attributen från vänstra tabellen med null. EDAA20 (Föreläsning databaser) HT 2017 34 / 66 OUTER JOIN Exempel Tag reda på alla kontons innehavare (namn) och kontonummer. Men tag med även med namnen på de kunder som inte har något konto: SELECT,, kontonr FROM Bankkonton RIGHT OUTER JOIN Kunder ON Bankkonton. = Kunder.; Resultatet blir en rad per konto samt en rad för de kunder som ej har något konto: kontonr Ek Bo 345678 Ek Bo 890123 Bok Lars Alm Eva 678901 Alm Eva 123456 Alm Sara 357911 EDAA20 (Föreläsning databaser) HT 2017 35 / 66 Join med tre tabeller mönster SELECT kolumnlista FROM tabell3 INNER JOIN (tabell1 INNER JOIN tabell2 ON tabell1.kolumn1 = tabell2.kolumn2) ON tabell3.kolumn3 = tabell1.kolumn4; Utför JOIN på två tabeller (tabell1 INNER JOIN tabell2 ON tabell1.kolumn1 = tabell2.kolumn2) och betrakta resultatet som en ny tabell som kan ingå i en JOIN med den tredje tabellen: tabell3 INNER JOIN (...) ON tabell3.kolumn3 = tabell1.kolumn4; EDAA20 (Föreläsning databaser) HT 2017 36 / 66

Subfrågor IN Tag reda på vem som har högsta saldot. SELECT FROM Bankkonton WHERE saldo = (SELECT MAX(saldo) FROM Bankkonton); Tag reda på vilka kunder som saknar konto. SELECT, FROM Kunder WHERE NOT IN (SELECT FROM Bankkonton); 860101-3456 Observera att man inte kan ha aggregatfunktioner direkt i where-villkoret, utan måste använda en subfråga. Bok Lars Observera att IN används här (och inte =). Tecknet = kan bara användas för att jämföra ett värde med ett annat. Men subfrågan i exemplet kan ge flera personnummer som resultat. EDAA20 (Föreläsning databaser) HT 2017 37 / 66 EDAA20 (Föreläsning databaser) HT 2017 38 / 66 Gruppera GROUP BY Ibland vill man gruppera raderna i en tabell och behandla varje grupp för sig. Så här gör man för att summera alla kontons saldo: SELECT SUM(saldo) FROM Bankkonton; Om man istället vill se hur mycket pengar varje enskild person har på sina konton måste man dela in kontona i en grupp per kund och summera saldot i varje grupp: SELECT, SUM(saldo) AS saldototalt FROM Bankkonton GROUP BY ; Gruppera GROUP BY Forts. Gruppering: kontonr saldo 345678 5020 720101-1234 890123 120 720101-1234 123456 4300 850318-2345 678901 27000 850318-2345 357911 30000 860101-3456 saldototalt 720101-1234 5140 850318-2345 31300 860101-3456 30000 EDAA20 (Föreläsning databaser) HT 2017 39 / 66 EDAA20 (Föreläsning databaser) HT 2017 40 / 66

Gruppering Kommentarer Övning Antal kunder i Lund, Malmö,... Aggregatfunktionerna, SUM, AVG, MIN, MAX, COUNT, arbetar egentligen mot grupper och returnerar ett resultat per grupp. Om man använder aggregatfunktionerna utan att gruppera räknas alla tupler i tabellen som en grupp. Endast attribut som räknas upp i GROUP BY får väljas ut i SELECT. Exempel: SELECT, SUM(saldo) AS saldototalt FROM Bankkonton GROUP BY ; adress antal Lund 2 Malmö 2 EDAA20 (Föreläsning databaser) HT 2017 41 / 66 EDAA20 (Föreläsning databaser) HT 2017 42 / 66 HAVING Having kan användas för att välja ut visa rader när man grupperat. Exempel: Summera hur mycket pengar varje enskild person har på sina konton. Men tag bara med personer som har mindre än 10000 kr: SELECT, SUM(saldo) AS saldototalt FROM Bankkonton GROUP BY Bankkonton. HAVING SUM(saldo) < 10000; SaldoTotalt 720101-1234 5140 JOIN mellan samma tabell Tag reda på de kunder som har samma som någon annan kund. Tips! Låtsas som om det finns två tabeller med kunder där vi ska jämföra et från den ena tabellen med et från den andra. Vi behöver då två olika namn på tabellen Kunder, t ex Kunder1 och Kunder2. SELECT Kunder1., Kunder2.PersonNr, Kunder1. FROM Kunder AS Kunder1 INNER JOIN Kunder AS Kunder2 ON Kunder1. = Kunder2. WHERE Kunder1. < Kunder2.; Kunder1.PersonNr Kunder2.PersonNr 850318-2345 860101-3456 Alm EDAA20 (Föreläsning databaser) HT 2017 43 / 66 EDAA20 (Föreläsning databaser) HT 2017 44 / 66

Från problem till databas Sammanfattning Från problem till databas Exempel: Studentregister 1 Beskriv systemet i en ER-modell. I ER-modellen visas vilken information som ska lagras i databasen och hur de lika komponenterna hänger ihop. 2 Översätt ER-modellen till en relationsmodell. I relationsmodellen visas vilka relationer (tabeller) som ska finnas. 3 Skapa tabellerna i en databashanterare. En databas för registrering av kurser, studenter och resultat ska utvecklas. Studenter har personnummer och ett namn. När en student är godkänd på en kurs registreras betyget 3, 4 eller 5. En kurs har en (ex: EDAA20), ett namn och ett antal. en ges av en institution. Institutionen har ett namn och en adress. EDAA20 (Föreläsning databaser) HT 2017 45 / 66 EDAA20 (Föreläsning databaser) HT 2017 46 / 66 ER-modell ER-modell Studentregister ER står för Entity entitet ( sak, jfr objekt i programmering) Relationship samband I ER-modellen ser man: entitetstyper påminneromklasseriprogrammeringmeninnehåller bara attribut. attribut egenskaper hos entitetsyper och även hos samband ibland samband mellan entitetstyperna Det finns olika sätt att utrycka en ER-modell. I kursen används UML (Unified Modeling Language). Student Resultat 1 betyg 1 1 Institution namn adress EDAA20 (Föreläsning databaser) HT 2017 47 / 66 EDAA20 (Föreläsning databaser) HT 2017 48 / 66

Multiplicitet Samband kan ha namn Vid sambandens ändar kan man ange multiplicitet (aritet). Ex 1: En företag har flera anställda. En person kan arbeta i flera företag. Man kan ge sambanden namn. Ex: anställer Företag Person Företag Person Ex 2: En företag har flera anställda. En person är bara anställd vid ett företag. eller Person arbetar hos Företag Företag 1 Person Multipliciteten anges som ett heltal (t.ex. 1) eller ett intervall (t.ex. 0..1). betyderettobegränsatantal. Vid sambandets ändar kan man skriva ut roller. Ex: Person anställd arbetsgivare Företag EDAA20 (Föreläsning databaser) HT 2017 49 / 66 EDAA20 (Föreläsning databaser) HT 2017 50 / 66 Svårplacerade attribut Lösning 1: lägg till en entitetstyp En student läser många kurser. En kurs läses av många studenter. Det finns alltså ett många-till-många-samband mellan student och kurs. Student Men attributet betyg kan inte placeras i någon av entitetstyperna Student eller. En student klarar flera kurser och har då flera betyg. En kurs har flera godkända studenter. En lösning är att placera attributet betyg i en egen entitetstyp: Student Resultat 1 betyg 1 EDAA20 (Föreläsning databaser) HT 2017 51 / 66 Svårplacerade attribut Lösning 2: samband med attribut Ett annat sätt att hantera betygen är att lägga till ett attribut till sambandet mellan Student och. Student Resultat betyg EDAA20 (Föreläsning databaser) HT 2017 52 / 66

Diskutera Undvik redundans Fanns det något liknande fall på första databaslaborationen? Student Resultat 1 betyg 1 institutionsnamn 1 Institution namn adress Student Attributet institutionsnamn uttrycker samma sak som sambandet mellan och Institution och ska därför inte vara med i ER-modellen Resultat betyg (Däremot kommer förmodligen tabellen er ha ett sådant attribut för att implementera detta samband.) EDAA20 (Föreläsning databaser) HT 2017 53 / 66 EDAA20 (Föreläsning databaser) HT 2017 54 / 66 Primärnyckel En nyckel är ett (eller flera attribut tillsammans) vars värde garanterat är unikt. Man brukar välja ut en av nycklarna och kalla denna primärnyckel. Primärnycklarna kan markeras genom understrykning. Arv En speciell typ av samband mellan entitetstyper är arv. IexempletärverFysiskpersonochJuridiskpersongemensamma egenskaper från Person. Student 1 Resultat betyg 1 Person namn Fastighet fastighetsnummer 1 Institution namn adress Fysisk person personnummer Juridisk person organisationsnummer EDAA20 (Föreläsning databaser) HT 2017 55 / 66 EDAA20 (Föreläsning databaser) HT 2017 56 / 66

Övning Från ER-modell till relationer Utveckla en ER-modell för följande problem: Ett gäng ornitologer vill ha hjälp med att utveckla en databas som håller reda på de olika fågelobservationer de gjort. Man vill hålla reda på datum och tid för observationen samt förstås vilken fågelart som observerats. Dessutom vill man ha möjlighet att lägga in information om observationen (t ex 1 ex födosökande ). En observation görs av en fågelskådare. I databasen vill man lagra information om fågelskådarna, t ex namn. Tänk på att namnen inte behöver vara unika. En observation görs vid en viss lokal (t ex Silvåkratornet eller Vombs ängar ). En lokal ligger i ett visst landskap. Flera lokaler kan anges för en och samma observation. Till exempel anges ofta båda lokalerna Silvåkratornet och Krankesjön vid observationer som görs vid Silvåkratornet. Man vill kunna lagra en beskrivning av lokalen i databasen. När det gäller fåglarna vill man hålla reda på både det svenska och det vetenskapliga namnet. EDAA20 (Föreläsning databaser) HT 2017 57 / 66 1 Låt varje entitetstyp blir en relation med samma attribut som entitetstypen. Studenter(,, ) er(,, ) Institutioner(namn, adress) Resultat(betyg) 2 Låt varje samband blir en relation. Attributen ska vara primärnycklarna hos entitetstyperna i respektive ände samt sambandets egna attribut. Undantag: Om man har ett många-till-en-samband kan man istället lägga till nyckeln från en-sidan som attribut på många-sidan. er(,,, institutionsnamn) Resultat(,, betyg) EDAA20 (Föreläsning databaser) HT 2017 58 / 66 Studentregistret Olika modeller Tabeller i exemplet studentregister: Studenter(,, ) er(,,, institutionsnamn) Institutioner(namn, adress) Resultat(,, betyg) ER-modellen är en konceptuell modell. Den beskriver verkligheten, t.ex. hur olika saker hänger ihop. Samma teknik att modellera verkligheten kan man använda i andra sammanhang, t.ex. vid programmering eller annat problemlösande. Relationsmodellen är en implementeringsmodell och beskriver vilka tabeller som ska finnas. EDAA20 (Föreläsning databaser) HT 2017 59 / 66 EDAA20 (Föreläsning databaser) HT 2017 60 / 66

Övning Integritetsvillkor Utveckla en relationsmodell för databasen med fågelobservationer. Utgå från den ER-modell vi gjorde tidigare under föreläsningen. Börja med entitetstyperna och låt dem bli en relation. Implementera sedan sambanden (ny relation eller attribut i redan befintlig relation). Villkor som begränsar vilka data som kan lagras i databasen. Hindrar oss att lägga in felaktiga data. Nyckelvillkor Två tupler kan inte ha samma värden på primärnyckeln. Attributen i primärnyckeln kan inte ha värdet NULL. Referensintegritet seföljandebilder. EDAA20 (Föreläsning databaser) HT 2017 61 / 66 EDAA20 (Föreläsning databaser) HT 2017 62 / 66 Referensintegritet Främmande nyckel Referensintegritet En främmande nyckel är ett attribut (eller en kombination av attribut) som refererar till en nyckel i en annan relation. Exempel: institutionsnamn är främmande nyckel och refererar till nyckeln namn i relationen Institution. er(,,, institutionsnamn) Institutioner(namn, adress) Detta betyder att om det i tabellen er finns en rad EDAA20 Programmering och databaser 7.5 Datavetenskap så måste det i tabellen institutioner finnas en rad med samma institutionsnamn: Datavetenskap Ole Römers väg 3 223 63 Lund Med referensintegritet menas alltså att det måste finnas en motsvarande entitet i andra änden av sambandet. 1 Institution namn adress Exempel: Varje kurs hör till en institution. För att man ska kunna lägga in ett institutionsnamn i tabellen måste det namnet finnas i tabellen Institution. EDAA20 (Föreläsning databaser) HT 2017 63 / 66 EDAA20 (Föreläsning databaser) HT 2017 64 / 66

Övning Index Vilka främmande nycklar finns i tabellerna i databasen för fågelobservationer? Vart refererar de? Man kan sätta ett index på ett attribut. Detta innebär att tabellen lagras på ett sådant sätt att det går snabbare att söka efter tupler med ett visst värde på attributet. Men insättningar, borttagningar och uppdateringar går långsammare. Ofta skapas det automatiskt ett index till nyckelattributen. EDAA20 (Föreläsning databaser) HT 2017 65 / 66 EDAA20 (Föreläsning databaser) HT 2017 66 / 66