Digitalisering av kulturarvet DATABASER Digitalisering av kulturarvet
IDAG Vad är en databas? Begrepp Relationer Datamodeller Tabeller, fält och poster Nycklar Attribut, egenskaper och fält Normalisering SQL
VAD ÄR EN DATABAS? En samling av logiskt organiserade data I en databas kan dataentiteter effektivt lagras, relateras till varandra och extraheras Databas är inte detsamma som dokument Databas är inte heller detsamma som databashanteringssystem Dokument ~= träd, databas ~= skog
DATABASHANTERINGSSYSTEM DBMS, DataBase Management System Ett programvarusystem som möjliggör för användare att definiera, skapa, underhålla och kontrollera tillgång till en databas Access, SQL Server, Oracle, MySQL, FileMaker
BEGREPP Relation – En tabell med rader och kolumner Attribut – En namngiven kolumn i en relation Domän – En uppsättning tillåtna värden för ett eller flera attribut Tipel – En rad i en relation
FLER BEGREPP Grad (av en relation) – Antalet attribut som relationen innehåller Kardinalitet – Antalet tipler i en relation Relationsdatabas – En samling normaliserade relationer med distinkta relationsnamn Normalisering – En teknik för att producera en uppsättning relationer med önskade egenskaper
MATEMATISKA RELATIONER Kartesisk produkt – Alla möjliga kombinationer av element hos två eller flera entiteter a {2,4} b {1,3,5} a*b = { (2,1), (2,3), (2,5), (4,1), (4,3), (4,5) } a {1,3} b {2,4} c {5,6} a*b*c = { (1,2,5), (1,2,6), (1,4,5), (1,4,6), (3,2,5), (3,2,6), (3,4,5), (3,4,6) }
EGENSKAPER HOS RELATIONER En relation har ett namn som är distinkt från alla andra relationsnamn i relationsschemat Varje cell i relationen innehåller exakt ett värde Varje attribut har ett distinkt namn Det finns inga dubblett-tipler (varje tipel är unik) Ordningen av attribut är oväsentlig Ordningen av tipler är (teoretiskt) oväsentlig
DATAMODELLER Ett ramverk för hur data ska organiseras i en databas Nätverksdatamodellen Hierarkiska datamodellen Relationsdatamodellen
RELATIONSDATAMODELLEN Baserad på matematiska relationer Data och relationer representeras som tabeller Varje tabell har ett antal kolumner med (för tabellen) unika namn skivnr artist titel pris 1 Chemical Brothers Exit planet dust 149 2 Fat Boy Slim Halfway between the gutter and the stars 159 3 Radiohead Kid A
RELATIONSDATAMODELLEN Attribut skivnr artist titel pris 1 Chemical Brothers Exit planet dust 149 2 Fat Boy Slim Halfway between the gutter and the stars 159 3 Radiohead Kid A Relation Tipel
TABELLER, FÄLT OCH POSTER skivnr artist titel pris 1 Chemical Brothers Exit planet dust 149 2 Fat Boy Slim Halfway between the gutter and the stars 159 3 Radiohead Kid A Tabell Post
NYCKLAR Primärnyckel – ett fält, eller en kombination av fält, som unikt identifierar en tipel (post) Naturlig primärnyckel Surrogatnyckel Främmande nyckel – ett fält, eller en kombination av fält, som är primärnyckel i en annan relation och samtidigt existerar i aktuell relation
NYCKLAR Primärnyckel (surrogatnyckel) skivnr artist titel pris 1 Chemical Brothers Exit planet dust 149 2 Fat Boy Slim Halfway between the gutter and the stars 159 3 Radiohead Kid A
NYCKLAR Primärnyckel Främmande nyckel låtnr titel låtlängd skivnr 1 3 National Anthem 352 3 2 Treefingers 223 Optimistic 316 Leave home 333 In dust we trust 317 Chicos groove 287
NYCKLAR PK skivnr PK låtnr PK, FK skivnr titel artist titel låtlängd pris PK låtnr titel låtlängd PK, FK skivnr
ATTRIBUT, EGENSKAPER OCH FÄLT Hur ska du beskriva det du ska beskriva? Egenskaper/Attribut Fält Datatyper Entiteter
Vilka egenskaper kan urskiljas? Vi ska skapa en förteckning över en skivsamling där vi vill spara information om en skiva är utlånad eller inte Vilka egenskaper kan urskiljas? Artist, titel, pris, antal spår, total speltid Låttitel, låtlängd Låneinformation Med mera… Eklund: Tio steg mot en databas i MS Access
EGENSKAPER R = (artist, titel, pris, antal spår, total speltid, låttitel, låtlängd, låneinformation) artist titel pris antalSpår speltid låttitel låtlängd lån Radiohead Kid A 159 10 2999 292 Utlånad National Anthem 352 Treefingers 223 Optimistic 316 Chemical B Exit planet 149 11 2960 Leave home 333 In dust we trust 317 Chicos groove 287 One too many mornings 251 Alive alone 315
INGEN LÄMPLIG KONSTRUKTION… Varje tipel är förvisso unik… …men redundans förekommer Detta resulterar i vissa uppdateringsproblem samt ineffektivitet Lösning: normalisering!
Multipla värden i cellerna Kom ihåg: ONORMALISERAD FORM Multipla värden i cellerna Kom ihåg: Varje cell i relationen innehåller exakt ett värde Vår relation är i 1NF
FÖRSTA NORMALFORMEN (1NF) Data med multipla värden per objekt tilldelas egen tabell R = (skivnr, artist, titel, pris, antal spår, total speltid, låttitel, låtlängd, låneinformation) skivnr artist titel pris antalSpår speltid låttitel låtlängd lån 1 Radiohead Kid A 159 10 2999 285 Utlånad Optimistic 316 2 Chemical B Exit planet 149 11 2960 Alive alone 315
ANDRA NORMALFORMEN (2NF) Attribut som inte är funktionellt beroende av hela primärnyckeln placeras i egen tabell R1 = (skivnr, artist, titel, pris, antal spår, total speltid) R2 = (låtnr, låttitel, låtlängd, skivnr) R3 = (personnr, namn, postnr, ort, skivnr, låndatum) Förklaring till denna PK?
ANDRA NORMALFORMEN (2NF) skivor skivnr lån personnr skivnr låtar låtnr skivnr
TREDJE NORMALFORMEN (3NF) Attribut som är funktionellt beroende av andra attribut, vilka inte är nycklar, placeras i en egen tabell R3 = (personnr, namn, postnr, ort, skivnr, låndatum) R3 = (personnr, namn, postnr, skivnr, låndatum) R4 = (postnr, ort)
FLER NORMALFORMER FINNS… BCNF – En relation är i BCNF (Boyce-Codd Normal Form) om och endast om varje determinant är en kandidatnyckel En determinant är något som något annat är beroende av 4NF 5NF 3NF eller BCNF brukar funka utmärkt
MED DETTA I BAGAGET… …går vi raskt vidare till Johan Eklunds tio steg mot en databas i Access!
Vilka objekt/entiteter kan urskiljas? VAD SKALL INGÅ? Vilka objekt/entiteter kan urskiljas? Skivor Låtar Låntagare Ägare? (Artist) (Vi bortser från postnr och ort här)
HUR SKA VI BESKRIVA DET SOM SKA INGÅ? Attribut Skivor: skivnr, artist, titel, pris, antal spår, total speltid Låtar: låtnr, låttitel, låtlängd, skivnr Låntagare: namn, skivnr, låndatum Ägare: namn, skivnr
VANLIGA DATATYPER BOOLEAN CHAR och VARCHAR DATE och TIME Kan anta värdena TRUE, FALSE och ibland även UNKNOWN CHAR och VARCHAR Fast respektive varierande längd CHAR(4) innebär att fältet rymmer 4 tecken VARCHAR(30) innebär att fältet anpassar sig efter innehållet men aldrig tillåter fler än 30 tecken DATE och TIME DATE: år, månad, dag TIME: timme, minut, sekund
DATATYPER NUMERIC, DECIMAL, INTEGER och SMALLINT NUMERIC och DECIMAL för decimaltal Antal siffror och decimaler måste anges INTEGER och SMALLINT för heltal Stora respektive små heltal FLOAT, REAL och DOUBLE PRECISION Används för reella tal, dvs tal som kan skrivas med en ändlig eller oändlig följd av siffror BINARY LARGE OBJECTS Används för bildfiler, videofiler, ljudfiler och liknande
DATATYPER I ACCESS Text – textsträngar som kan innehålla alla tecken (maxlängden är 255 tecken i Access) Number (några exempel) Integer – heltal, mindre domän Double – stort heltal, större domän Decimal - decimaltal Date/Time – datum och tid Currency – valutor Autonumber – ökar automatiskt med 1 när en ny post läggs till, används för surrogatnycklar Yes/No – kan anta något av två värden
VAD FINNS DET FÖR RELATIONER? Analys av multipliciteten mellan objekten Dvs hur relationerna dem emellan ser ut En skiva kan lånas ut till flera personer (dock ej samtidigt) En person kan låna flera skivor En låt tillhör exakt en skiva En skiva kan innehålla flera låtar En person kan äga flera skivor En skiva ägs av exakt en person
RELATIONER ägare skivor låtar låntagare En Flera
Functional Requirements for Bibliographic Records (FRBR) EXEMPLARINFORMATION? Ett verk Ett uttryck av verket En manifestation av uttrycket Ett individuellt ting som representerar manifestationen Functional Requirements for Bibliographic Records (FRBR)
FRBR - Exempel Verk: The Wild Rover Uttryck: The Wild Rover framförd av Dropkick Murphys på Berns Manifestation: En ljudupptagning av låten från spelningen Ting: Ett exemplar av en cd innehållande ljudupptagningen av låten från spelningen Hur gör vi med en skivsamling där vi har flera exemplar av samma manifestation?
VERK & EXEMPLAR I en skivsamling av den här typen dyker det gärna upp flera exemplar av samma skiva Det är exemplaret vi lånar ut och inte verket För att hålla reda på vilket exemplar som lånas ut skapar vi en extra tabell
LÖSNINGEN… skivor_verk låtar ägare skivor_exemplar låntagare
INTE HELT OPTIMALT DOCK… Vore det inte bättre att registrera lån i en egen tabell?
NY LÖSNING… skivor_verk låtar ägare skivor_exemplar lån låntagare
DAGS ATT FUNDERA PÅ TABELLERNA En tabell per objekttyp Mellantabeller för många till många-relationer låtar (huvudtabell för låtar) skivor_verk (huvudtabell för verk) skivor_exemplar (huvudtabell för exemplar) ägare (huvudtabell för ägare) låntagare (huvudtabell för låntagare) lån_exemplar (mellantabell mellan lån och exemplar) lån (huvudtabell för lån)
UTSE NYCKLAR Primärnycklar och främmande nycklar En primärnyckel är ett eller flera fält som unikt identifierar en post En främmande nyckel är ett eller flera fält som refererar till en primärnyckel i en annan tabell för att möjliggöra relationer mellan tabeller Vi börjar med huvudtabellerna Princip: följ gaffeln
FÖLJ GAFFELN Primärnyckeln från Ägare följer gaffeln till Skivor_exemplar där den utgör en främmande nyckel ägare ägarnr skivor_exemplar exemplarnr ägarnr
NYCKLAR - Huvudtabeller skivor_verk (skivnr, artist, titel, antalSpår, totalSpeltid) skivor_exemplar (exemplarnr, skivnr, ägarnr, beskrivning) låtar (låtnr, låttitel, låtlängd, skivnr) lån (lånnr, låntagarnr, exemplarnr, låndatum, tillbakadatum) låntagare (låntagarnr, namn) ägare (ägarnr, namn) Vi utgår ifrån att låntagaren alltid returnerar skivan på utsatt datum
NYCKLAR – Komplett uppsättning skivor_verk (skivnr, artist, titel, antalSpår, totalSpeltid) skivor_exemplar (exemplarnr, skivnr, ägarnr, beskrivning) låtar (låtnr, låttitel, låtlängd, skivnr) lån (lånnr, låntagarnr, exemplarnr, låndatum, tillbakadatum) lån_exemplar (lånnr, exemplarnr) låntagare (låntagarnr, namn) ägare (ägarnr, namn)
SKAPA DATABASEN I ACCESS Detta sparar vi till senare
STRUCTURED QUERY LANGUAGE Generellt databasspråk SQL är både ett datadefinitionsspråk och ett datamanipulationsspråk Detta innebär att vi kan dels definiera restriktioner och villkor hos datan och dels hämta, uppdatera, sätta in och ta bort fält och poster i databasen I SQL anger man vad som ska utföras och inte hur
KOMMANDON Varje sats i SQL innehåller ett kommando som anger vilken operation som ska utföras SELECT – hämta från databasen INSERT – sätt in data i databasen UPDATE – uppdatera data i databasen DELETE – ta bort data från databasen SQL kan också användas för att skapa, redigera och ta bort tabeller
Hämta data från alla skivor med 11 spår EXEMPEL: SELECT-sats Hämta data från alla skivor med 11 spår skivnr artist titel antalSpår totalSpeltid 1 Chemical Brothers Exit Planet Dust 11 2960 2 Radiohead Kid A 10 2999 3 Fat Boy Slim Halfway between the gutter and the stars 4102
EXEMPEL: SELECT-sats SELECT artist, titel FROM skivor_verk WHERE antalSpår = 11 ORDER BY artist ASC Hämtar fältvärden för artist och titel i tabellen skivor_verk och sorterar resultatet efter artist i stigande ordning (fallande ordning – DESC) Tips: använd VERSALER för reserverade ord och gemener för egendefinierade ord
SELECT-SATSENS STRUKTUR Vilka fält som ska visas i resultatet FROM Vilken eller vilka tabeller WHERE Villkor för poster som ska returneras ORDER BY Fält på vilka sortering ska ske
Fältvärden av typen text omsluts av 'apostrofer' VILLKOR Tredelat: Fältnamn – jämförelse – fältvärde Operand – operator – operand namn = 'David' antalSpår > 10 Fältvärden av typen text omsluts av 'apostrofer' Villkor kan kombineras med booleska operatorer (AND, OR, NOT IN, <>)
SELECT * FROM ägare WHERE namn LIKE 'Da%' TRUNKERING Görs med ordet LIKE (istället för likhetstecknet) och % som trunkeringsoperator SELECT * FROM ägare WHERE namn LIKE 'Da%' Returnerar alla ägare som börjar på 'Da' Maskering (ett tecken) sker med _ 'T_m' returnerar 'Tom' och 'Tim'
AVG – beräknar medelvärde AGGREGATFUNKTIONER COUNT – räknar poster SELECT COUNT(*) AS antalExemplar FROM skivor_exemplar SUM – summerar värden SELECT SUM(totalSpeltid) AS antalSekunder FROM skivor_verk AVG – beräknar medelvärde SELECT AVG(antalSpår) AS genomsnittSpår FROM skivor_verk MIN, MAX – minsta resp högsta värde
KARTESISK PRODUKT OCH JOIN SELECT * FROM skivor_verk, låtar Returnerar samtliga kombinationer av posterna i skivor_verk och låtar Restriktioner måste läggas till Rätt låtar ska paras ihop med rätt skivor Detta kan göras på två sätt
UTAN JOIN SELECT * FROM skivor_verk, låtar WHERE skivor_verk.skivnr=låtar.skivnr Då skivnr är främmande nyckel i låtar kan vi para ihop låtar med rätt skivor Tabellnamn anges i villkoret för att disambiguera skivnr (som återfinns i bägge tabellerna)
MED JOIN SELECT * FROM skivor_verk INNER JOIN låtar ON skivor_verk.skivnr=låtar.skivnr
INNER JOIN ELLER OUTER JOIN? INNER JOIN – endast poster som matchar varandra kombineras OUTER JOIN – samtliga poster från den ena tabellen plus matchande poster från den andra tabellen
INNER VS OUTER JOIN SELECT * FROM skivor_verk INNER JOIN låtar ON skivor_verk.skivnr=låtar.skivnr Enbart verk som har låtar i db returneras SELECT * FROM skivor_verk LEFT JOIN låtar ON skivor_verk.skivnr=låtar.skivnr Även verk utan låtar i db returneras
TRE TABELLER lån (lånnr, låntagarnr, exemplarnr, låndatum, tillbakadatum) lån_exemplar (lånnr, exemplarnr) skivor_exemplar (exemplarnr, skivnr, ägarnr, beskrivning)
UTAN JOIN SELECT * FROM lån, lån_exemplar, skivor_exemplar WHERE lån.lånnr=lån_exemplar.lånnr AND lån_exemplar.exemplarnr= skivor_exemplar.exemplarnr
MED JOIN SELECT * FROM lån INNER JOIN lån_exemplar ON lån.lånnr=lån_exemplar.lånnr INNER JOIN skivor_exemplar ON lån_exemplar.exemplarnr= skivor_exemplar.exemplarnr