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

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

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

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

Grunderna i SQL del 1

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

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?

ANVÄND NAVIGATIONEN I CAPITEX SÄLJSTÖD

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?

Manual för BPSD registret. Version 6 /

Design och underhåll av databaser

ANVÄNDARHANDLEDNING FÖR

Lathund, procent med bråk, åk 8

Vi skall skriva uppsats

Laborationer - databaser, EDAA20 Programmering och databaser

TIMREDOVISNINGSSYSTEM

Administration Excelimport

Databaser och Datamodellering Foreläsning IV

Skapa en databas. Skapa en tabell. Gör man antingen genom kommandot

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

Lathund till Annonsportalen

FORTNOX SMÅFÖRETAGENS BÄSTA VÄN. Fortnox kom igång guide Praktisk bokföring. En guide för dig som vill komma igång med bokföring i Fortnox

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

SANNOLIKHET. Sannolikhet är: Hur stor chans (eller risk) att något inträffar.

Snabbslumpade uppgifter från flera moment.

Laboration SQL. Kom igång.

SA33 - Val av kurser inom program m terminsreg

En lönerevision görs i flera steg; Initiering - Lönerevision Attestering - Skapa förmån - Uppdatera lön.

Tentamen i Programmering grundkurs och Programmering C

Lathund för validering av avhandlingar i LUCRIS

Övningar i SQL. SQLAccess.doc Ove Lundgren

Logga in. Gå in på: Klicka på Logga in. Klicka på den region, kommun eller organisation där din verksamhet finns

729G04 - Hemuppgift, Diskret matematik

Träning i bevisföring

912 Läsförståelse och matematik behöver man lära sig läsa matematik?

Datorövning 2 Statistik med Excel (Office 2007, svenska)

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

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

Gruppenkät. Lycka till! Kommun: Stadsdel: (Gäller endast Göteborg)

Datorövning 2 Statistik med Excel (Office 2003, engelska)

Tentamen för DD1370 Databasteknik och informationssystem

a n = A2 n + B4 n. { 2 = A + B 6 = 2A + 4B, S(5, 2) = S(4, 1) + 2S(4, 2) = 1 + 2(S(3, 1) + 2S(3, 2)) = 3 + 4(S(2, 1) + 2S(2, 2)) = = 15.

Partnerskapsförord. giftorättsgods görs till enskild egendom 1, 2. Parter 3. Partnerskapsförordets innehåll: 4

Nyheter och ändringar i Adela Gymnasieskola 4.3.0

Avsikt På ett lekfullt sätt färdighetsträna, utveckla elevers känsla för hur vårt talsystem är uppbyggt samt hitta mönster som uppkommer.

Vad är en webbläsare?

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

Frågor i ansökan om statsbidrag för läxhjälp år 2016 skolhuvudmän

Laganmälan & Laghantering

DATASAMORDNING NYHETERNA I CHAOS Utbildning Chaos/Handledning - Nyheterna i Chaos 3/

Föreningen Nordens lokala hemsidor

Föreläsning 8: Räkning. Duvhålsprincipen. Kombinatorik

Distribuerade Informationssystem VT-04

Erfarenheter från ett pilotprojekt med barn i åldrarna 1 5 år och deras lärare

Tentamen i matematisk statistik (9MA241/9MA341/LIMAB6, STN2) kl 08-13

DOP-matematik Copyright Tord Persson. Bråktal Läs av vilka tal på tallinjen, som pilarna pekar på. Uppgift nr

Idag: Dataabstraktion

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

ELEV- HANDLEDNING (Ansökan via webben)

Boken om Teknik. Boken om Teknik är en grundbok i Teknik för åk 4 6.

Tentamen för DD1370 Databasteknik och informationssystem

SF1625 Envariabelanalys

e-cm Elektronisk Cash Management dygnet runt, världen över.

Skriva B gammalt nationellt prov

Algebra, polynom & andragradsekvationer en pampig rubrik på ett annars relativt obetydligt dokument

Föräldrar i Skola24. Schema

Handbok Ämnesprov 2016 Lärarinmatning I Dexter Åk 3. Uppdaterad: /HL Version: IST AB

Lathund Movenium ID06 Personalliggare

Arbetsbeskrivning, att förbereda för studenternas registrering kommande termin. 1. Studenter antagna på fristående kurs 2

Du ska nu skapa ett litet program som skriver ut Hello World.

Ha det kul med att förmedla och utveckla ett knepigt område!

Modul 6: Integraler och tillämpningar

Individuellt Mjukvaruutvecklingsprojekt

Användarmanual VX-webben

Examensarbete är det en kurs? Inst. för Samhällsbyggnad 2009

Efter att du har installerat ExyPlus Office med tillhörande kartpaket börjar du med att göra följande inställningar:

För dig som beviljar ärenden

Tentamensdeltagare från Dataekonomutbildningen, Textilekonomutbildningen och Affärsinformatikutbildningen.

Sammanfattning på lättläst svenska

Lathund för överföring av rapporter och ljudfiler

Programexempel: tärningsspel

Dina inloggningsuppgifter är samma som du använder för att logga in på skolans datorer.

Analytisk relationsdatabasdesign

Beställ borgerlig vigsel

TIMREDOVISNINGSSYSTEM

FRÅN A TILL Ö LäraMera Ab / och Allemansdata Ab / FRÅN A TILL Ö

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

Observera att privatpersoner inte kan söka det förberedande stödet inom lokalt ledd utveckling.

Praktisk programmering

7. SAMHÄLLSORIENTERING ÅK 5

Sundbybergs stad Skolundersökning 2015 Föräldrar förskola Stella Nova förskola

Prova på-laboration i SQL

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

Instruktioner för beställning och kontoadministration för abonnenter av inlästa läromedel

Lösningar till tentamen i EDAF75

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

Hur skapar man formula r

Sundbybergs stad Skolundersökning 2015 Föräldrar förskola Fristående förskolor totalt Antal svar samtliga fristående förskolor: 360 (57 %)

Funktionsbeskrivning

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 2015 1 / 1 EDAA20 (Föreläsning databaser) HT 2015 2 / 1 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 2015 3 / 1 EDAA20 (Föreläsning databaser) HT 2015 4 / 1

Exempel på en relation Relationers schema relation attribut personnr förnamn efternamn adress 720101-1234 Bo Ek Malmö 740105-2335 Lars Bok Malmö 850318-2345 Eva Alm Lund 860101-3446 Sara Alm Lund Relationens schema (beskrivning av vad som kan lagras i tabellen) skrivs så här: Kunder(personNr, förnamn, efternamn, adress) relationens namn attribut tupel EDAA20 (Föreläsning databaser) HT 2015 5 / 1 EDAA20 (Föreläsning databaser) HT 2015 6 / 1 Exempel: relationen Bankkonton Nycklar Bankkonton(kontoNr, saldo, personnr) KontoNr saldo personnr 123456 4300 850318-2345 345678 5020 720101-1234 357911 30000 860101-3446 678901 27000 850318-2345 890123 120 720101-1234 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. Exempel: Kunder(personNr, förnamn, efternamn, adress) Bankkonton(kontoNr, saldo, personnr) EDAA20 (Föreläsning databaser) HT 2015 7 / 1 EDAA20 (Föreläsning databaser) HT 2015 8 / 1

SQL SQL-frågor SQL Structured Query Language Datadefinitionsspråk för att definiera tabeller. Ex: CREATE TABLE Kunder( personnr CHAR(11) PRIMARY KEY, förnamn VARCHAR(40), efternamn VARCHAR(40), adress VARCHAR(60) ); På följande sidor finns exempel på SQL-frågor för att hämta information från en databas med tabellerna: Kunder(personNr, förnamn, efternamn, adress) Bankkonton(kontoNr, saldo, personnr) Datamanipuleringsspråk för att ställa frågor till databasen, t ex söka idatabasenelleruppdateradata.ex: SELECT FROM Kunder; EDAA20 (Föreläsning databaser) HT 2015 9 / 1 EDAA20 (Föreläsning databaser) HT 2015 10 / 1 Hämta all information från en tabell Exempel: Tag reda på all information i tabellen Bankkonton. SELECT kontonr saldo personnr 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 personnr, kontonr personnr kontonr 850318-2345 123456 720101-1234 345678 860101-3446 357911 850318-2345 678901 720101-1234 890123 EDAA20 (Föreläsning databaser) HT 2015 11 / 1 EDAA20 (Föreläsning databaser) HT 2015 12 / 1

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 personnr AS kontoinnehavare, kontonr AS kontonummer Slå ihop kolumner Exempel: Visa personnummer och namn på alla kunder. Namnen ska vara på formen efternamn, förnamn. SELECT personnr, efternamn +, + förnamn AS namn FROM Kunder; kontoinnehavare kontonummer 850318-2345 123456 720101-1234 345678 860101-3446 357911 850318-2345 678901 720101-1234 890123 personnr namn 720101-1234 Ek, Bo 740105-2335 Bok, Lars 850318-2345 Alm, Eva 860101-3446 Alm, Sara EDAA20 (Föreläsning databaser) HT 2015 13 / 1 EDAA20 (Föreläsning databaser) HT 2015 14 / 1 Sortera Exempel: Tag reda på alla kunder. Visa kunderna sorterade efter efternamn i första hand och förnamn i andra hand. SELECT FROM Kunder ORDER BY efternamn, förnamn; personnr förnamn efternamn 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 personnr personnr 720101-1234 850318-2345 860101-3446 ORDER BY efternamn DESC, förnamn DESC; EDAA20 (Föreläsning databaser) HT 2015 15 / 1 EDAA20 (Föreläsning databaser) HT 2015 16 / 1

Välja ut vissa rader Flera delvillkor 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. SELECT kontonr WHERE personnr = 850318-2345 ; 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 förnamn = Sara AND efternamn = Alm ; kontonr 123456 678901 adress Lund EDAA20 (Föreläsning databaser) HT 2015 17 / 1 EDAA20 (Föreläsning databaser) HT 2015 18 / 1 Flera delvillkor forts Exempel: Vilken konton har ett saldo mellan 10000 och 50000 kr? eller SELECT WHERE saldo >= 10000 AND saldo < 50000; SELECT WHERE saldo BETWEEN 10000 AND 50000; kontonr saldo personnr 357911 30000 860101-3446 678901 27000 850318-2345 EDAA20 (Föreläsning databaser) HT 2015 19 / 1 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. SELECT kontonr WHERE personnr LIKE 85 ; kontonr 123456 678901 EDAA20 (Föreläsning databaser) HT 2015 20 / 1

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() Vilket är största saldot? SELECT MAX(saldo) 30000 EDAA20 (Föreläsning databaser) HT 2015 21 / 1 EDAA20 (Föreläsning databaser) HT 2015 22 / 1 Hämta information från flera tabeller Tabellerna Bankkonton och Kunder 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 personnr, kontonr 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, personnr) Kunder(personNr, förnamn, efternamn, adress) kontonr saldo personnr 123456 4300 850318-2345 345678 5020 720101-1234 357911 30000 860101-3456 678901 27000 850318-2345 890123 120 720101-1234 personnr förnamn efternamn 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 2015 23 / 1 EDAA20 (Föreläsning databaser) HT 2015 24 / 1

Första försök att hämta data från två tabeller Kartesisk produkt Hämta data från två tabeller Forts. Ta med bägge tabellerna i FROM-delen: SELECT efternamn, förnamn, kontonr, Kunder; Resultatet blir den kartesiska produkten (alla rader matchas med alla): Vi vill bara matcha de rader som har samma personnummer i de bägge tabellerna: efternamn förnamn 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......... kontonr saldo personnr 123456 4300 850318-2345 345678 5020 720101-1234 357911 30000 860101-3456 678901 27000 850318-2345 890123 120 720101-1234 personnr förnamn efternamn 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 2015 25 / 1 EDAA20 (Föreläsning databaser) HT 2015 26 / 1 Hämta data från två tabeller JOIN Tag reda på alla kontons innehavare (namn) och kontonummer. SELECT efternamn, förnamn, kontonr INNER JOIN Kunder ON Bankkonton.personNr = Kunder.personNr; Resultatet blir en rad per konto: efternamn förnamn 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 2015 27 / 1 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 2015 28 / 1

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 efternamn, förnamn, kontonr RIGHT OUTER JOIN Kunder ON Bankkonton.personNr = Kunder.personNr; Resultatet blir en rad per konto samt en rad för de kunder som ej har något konto: efternamn förnamn kontonr Ek Bo 345678 Ek Bo 890123 Bok Lars Alm Eva 678901 Alm Eva 123456 Alm Sara 357911 EDAA20 (Föreläsning databaser) HT 2015 29 / 1 Subfrågor Tag reda på vem som har högsta saldot. SELECT personnr WHERE saldo = (SELECT MAX(saldo) ); 860101-3456 Observera att man inte kan ha aggregatfunktioner direkt i where-villkoret, utan måste använda en subfråga. EDAA20 (Föreläsning databaser) HT 2015 30 / 1 IN Gruppera GROUP BY Tag reda på vilka kunder som saknar konto. SELECT efternamn, förnamn FROM Kunder WHERE personnr NOT IN (SELECT personnr ); 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. 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) 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 personnr, SUM(saldo) AS saldototalt GROUP BY personnr; EDAA20 (Föreläsning databaser) HT 2015 31 / 1 EDAA20 (Föreläsning databaser) HT 2015 32 / 1

Gruppera GROUP BY Forts. Gruppering Kommentarer Gruppering: kontonr saldo personnr 345678 5020 720101-1234 890123 120 720101-1234 123456 4300 850318-2345 678901 27000 850318-2345 357911 30000 860101-3456 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: personnr saldototalt 720101-1234 5140 850318-2345 31300 860101-3456 30000 SELECT personnr, SUM(saldo) AS saldototalt GROUP BY personnr; EDAA20 (Föreläsning databaser) HT 2015 33 / 1 EDAA20 (Föreläsning databaser) HT 2015 34 / 1 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 personnr, SUM(saldo) AS saldototalt GROUP BY Bankkonton.personNr HAVING SUM(saldo) < 10000; personnr SaldoTotalt 720101-1234 5140 JOIN mellan samma tabell Tag reda på de kunder som har samma efternamn som någon annan kund. Tips! Låtsas som om det finns två tabeller med kunder där vi ska jämföra efternamnet från den ena tabellen med efternamnet från den andra. Vi behöver då två olika namn på tabellen Kunder, t ex Kunder1 och Kunder2. SELECT Kunder1.personNr, Kunder2.PersonNr, Kunder1.efternamn FROM Kunder AS Kunder1 INNER JOIN Kunder AS Kunder2 ON Kunder1.efternamn = Kunder2.efternamn WHERE Kunder1.personNr < Kunder2.personNr; Kunder1.PersonNr Kunder2.PersonNr efternamn 850318-2345 860101-3456 Alm EDAA20 (Föreläsning databaser) HT 2015 35 / 1 EDAA20 (Föreläsning databaser) HT 2015 36 / 1

ER-modell Från problem till databas För att uttrycka en modell av vårt system använder vi en ER-modell. I ER-modellen visas vilken information som ska finnas i databasen. hur de olika komponenterna hänger ihop. ER står för Entity entitet ( sak, jfr objekt i programmering) Relationship samband 1 Beskriv systemet i en ER-modell. 2 Översätt ER-modellen till relationer (tabeller). 3 Skapa tabellerna i en databashanterare. EDAA20 (Föreläsning databaser) HT 2015 37 / 1 EDAA20 (Föreläsning databaser) HT 2015 38 / 1 Exempel Studentregister ER-modell Studentregister 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 kurskod (ex: EDAA20), ett namn och ett poängantal. Kursen ges av en institution. Institutionen har ett namn och en adress. Student personnr förnamn efternamn Resultat betyg Kurs kurskod kursnamn poäng 1 Institution namn adress EDAA20 (Föreläsning databaser) HT 2015 39 / 1 EDAA20 (Föreläsning databaser) HT 2015 40 / 1

ER-modell Multiplicitet I ER-modellen ser man: entitetstyper påminneromklasseriprogrammeringmeninnehåller bara attribut. attribut egenskaper hos entitetsyper och även hos samband ibland samband mellan entitetstyperna Vi använder UML (Unified Modeling Language) för att uttrycka ER-modellen. 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. Företag Person Ex 2: En företag har flera anställda. En person är bara anställd vid ett företag. Företag 1 Person Multipliciteten anges som ett heltal (t.ex. 1) eller ett intervall (t.ex. 0..1). betyderettobegränsatantal. EDAA20 (Föreläsning databaser) HT 2015 41 / 1 EDAA20 (Föreläsning databaser) HT 2015 42 / 1 Samband kan ha namn Samband kan ha attribut Man kan ge sambanden namn. Ex: anställer Företag Person Attributet betyg kan inte placeras i någon av entitetstyperna Student eller Kurs. En student klarar flera kurser och har då flera betyg. En kurs har flera godkända studenter. Attributet betyg hör istället ihop med sambandet mellan Student och Kurs. eller arbetar hos Person Företag Vid sambandets ändar kan man skriva ut roller. Ex: Student personnr förnamn efternamn Kurs kurskod kursnamn poäng Person anställd arbetsgivare Företag Resultat betyg EDAA20 (Föreläsning databaser) HT 2015 43 / 1 EDAA20 (Föreläsning databaser) HT 2015 44 / 1

Alternativ till samband med attribut Undvik redundans Ett annat sätt att hantera betygen är att lägga till en entitet Student personnr förnamn efternamn Resultat 1 betyg 1 Kurs kurskod kursnamn poäng Kurs kurskod kursnamn poäng institutionsnamn 1 Institution namn adress Vanligt fel! Attributet instiutionsnamn uttrycker samma sak som sambandet mellan kurs och institution. Bort med det onödiga attributet i ER-diagrammet! (Däremot kanske det dyker upp som attribut i tabellen så smånigom.) EDAA20 (Föreläsning databaser) HT 2015 45 / 1 EDAA20 (Föreläsning databaser) HT 2015 46 / 1 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 I UML-diagrammet. Arv En speciell typ av samband mellan entitetstyper är arv. IexempletärverFysiskpersonochJuridiskpersongemensamma egenskaper från Person. Student personnr förnamn efternamn Kurs kurskod kursnamn poäng Person namn Fastighet fastighetsnummer Resultat betyg 1 Institution namn adress Fysisk person personnummer Juridisk person organisationsnummer EDAA20 (Föreläsning databaser) HT 2015 47 / 1 EDAA20 (Föreläsning databaser) HT 2015 48 / 1

Relationsmodellen Från ER-modell till relationer 1 Varje entitetstyp blir en relation med samma attribut som entitetstypen. Relationsmodellen beskriver vilka tabeller som ska finnas i databasen. Tabeller i exemplet studentregister: Studenter(personNr, förnamn, efternamn) Kurser(kurskod, kursnamn, poäng, institutionsnamn) Institutioner(namn, adress) Resultat(personNr, kurskod, betyg) Studenter(personNr, förnamn, efternamn) Kurser(kurskod, kursnamn, poäng) Institutioner(namn, adress) 2 Varje samband blir en relation vars attribut är nycklarna för de inblandade entitetstyperna plus sambandets egna attribut. Resultat(personNr, kurskod, betyg) 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. Kurser(kurskod, kursnamn, poäng, institutionsnamn) EDAA20 (Föreläsning databaser) HT 2015 49 / 1 EDAA20 (Föreläsning databaser) HT 2015 50 / 1 Olika modeller Integritetsvillkor 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. 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 2015 51 / 1 EDAA20 (Föreläsning databaser) HT 2015 52 / 1

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. Kurser(kurskod, kursnamn, poäng, institutionsnamn) Institutioner(namn, adress) Detta betyder att om det i tabellen Kurser 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. Kurs kurskod kursnamn poäng 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 Kurs måste det namnet finnas i tabellen Institution. EDAA20 (Föreläsning databaser) HT 2015 53 / 1 EDAA20 (Föreläsning databaser) HT 2015 54 / 1 Index 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 2015 55 / 1