Introduktion til programmering Databaser Uge 37 Computer Science, kap 9. Hugh Darwen: what a database really is, G. Riccardi: Princples of database systems, kap 2., kompendium.
Plan Oprette jer på IMV s server (øvelse uge 36) og prøve lidt SQL hvis der er tid. Frokost Databaser Relationelle databaser Modellering ER-diagrammer Øvelse (Lav et ER-diagram) (øvelse uge 37) Normalisering Øvelse (normalisering) (øvelse uge 37)
Databaser Hvad er en database? En samling af relaterede data Der repræsenterer et defineret udsnit af verden Der har en intern sammenhæng Der henvender sig til en defineret gruppe brugere DBMS Database Management System En samling programmer der kan skabe, manipulere og vedligeholde en database sikkerhed
Entity-Relation Tre grundelementer
Database system Brugere Forespørgsler Select, Insert, Delete Software der behandler forespørgsler Implementering af Select, Insert, Delete DBMS Software der tilgår data Databasedefinitions (metadata) Overskriften Databasens indhold (listen af lister)
Lag Bruger Bruger Arbejdsopgaver Eksternt view Eksternt view Præsentation af info (tabeller, diagrammer) Konceptuelt skema Begreber der undstøtter præsentationen Internt skema
Eksterne views
Relationelle databaser Består af Tabeller, der indeholder data Relationer, der beskriver sammenhænge mellem tabeller via nøgler Alt er tabeller
Relationstabeller felt Række/ Post
Python udtræk fra database ['cpr', 'firstname', 'lastname', 'address', 'city', 'gender', 'phone', 'insurance','] [['1', 'Jeppe Boegh', 'Andersen', 'Thorsgade 20', '8410', 'dreng', '86379790', 'Baltica''], ['4', 'Lotte Boegh', 'Andersen', 'Thorsgade 20', '8410', 'pige', '86379790', 'Baltica ] ['5', 'Stine', 'Jacobsen ', Thorsgade 20', '8410', 'pige', '86379790', 'baltica ] Den enkelte række kan opfattelse som en række udsagn om den entitet der repræsenteres med primærnøglen, her cpr-nummeret. Person nr. 5 hedder Stine Jacobsen, bor Thorsgade 20, 8410 Rønde, er en pige, har telefon 86379790, og er forsikret i Baltica
ER-diagrammer Modelleringsform til dataanalyse Entiteter - ting i problemområdet Det emne vi siger noget om Attributter - oplysning om tingen Det vi siger om emnet Relationer mellem entiteter Det vi siger om emnets forhold til andre emner
Eks: Kæledyr Simpel analyse af kæledyr
Kæledyr Entiteter og attributter Navn Art Ejer Kæledyr Fødselsdag Dødsdag
ERnotation 1
Kæledyr En person kan eje mange kæledyr Et kæledyr kan ejes af eksakt én person Multiplicitet Ejet af
ERnotation 2 1-1: én til én (person CPR-nummer) 1 M: én til mange (mor børn) M N: mange til mange (person venner) Enhed 1 1 Enhed
Hvad kan siges om verden? Databaser bestemmer hvilke ting der kan siges om verden Eksempel: ægteskab Er ægteskab en én-til-én relation mellem to mands- og kvinde-entiteter? (monogami) Eller kan det være en mange-til-én? (polygami) Skal det være en relation mellem en kvinde- og mands-entitet eller kan det være en relation mellem to vilkårlige person-entiteter? (homoseksuelle ægteskaber?)
Attributters værdi Simple værdier Angiv typen Type Char(n) (fixed length, right padded) date int Serial (auto increment) Varchar(n), text, mediumtext, longtext Værdi N bogstaver dato -2.147.483.648 til 2.147.483.648 Unikt ID Variabel tekst
NULL Alle typer kan indeholde værdien NULL NULL betyder ikke ingen eller 0 NULL betyder udefineret Mulighed for at definere not NULL, resulterer i fejlmeddelelse hvis intet bliver indsat
Kæledyrene igen Kæledyr Navn : tekst Art: tekst Fødsel, Død : dato Person Navn : tekst Typisk skematisk opbygning se side 29 i principles of DB systems
Kæledyr igen Navn (varchar(15) Art (varchar(10) Fødsel (Dato) Død (dato) Mette Kat 2005-01-07 NULL Rasmus Kat 2005-01-03 NULL
Personer Navn Varchar(20) Peter Alexander
Men vil det fungere? Hvad hvis der er to ejere med samme fornavn? Hvilke kæledyr ejer Peter? Mener du Peter Andersen eller Peter Jensen? Hvem ejer Mette? Svar Peter : men er det Peter Andersen eller Peter Jensen? Det skal være muligt at udpege en post entydigt Til det bruges nøgler
Nøgler En tabel skal have en unik primærnøgle CPR er en primærnøgle til mængden af danske personer Nøglen kan være simpel eller sammensat Simpel: fortløbende nummer (CPR) Sammensat: et bibliotekslån kan identificeres ved et lånernummer plus et bognummer plus en dato Datatypen: serial
Kæledyr med nøgler ID Navn Art Fødsel Død (serial) (varchar(15) (varchar(10) (Dato) (dato) 1 Mette Kat 2005-01-07 NULL 2 Rasmus Kat 2005-01-03 NULL
Personer med nøgler ID (serial) Navn Varchar(20) 1 Peter 2 Peter 3 Alexander
Relationen 1-1 og M-1 Modelleres på samme måde En kolonne i en tabel (fremmednøglen) henviser til en primærnøgle i en anden tabel Fremmednøglen placeres i mange tabellen Kæledyr 1 ejes af person 1 Kæledyr 2 ejes af person 1 Primærnøgle Fremmednøgle
Kæledyr Primærnøgle Fremmednøgle ID (serial) Navn (varchar(15) Art (varchar(1 0) Fødsel (Dato) Død (dato) Owned by (Int) 1 Mette Kat 2005-01-07 NULL 1 2 Rasmus Kat 2005-01-03 NULL 1
Mange-mange relationer Et kæledyr kan ejes af flere personer En person kan eje flere kæledyr Ejet af
Relation entitet Gør verbet til et substantiv: ejer ejerskab. Peter ejer Mette Peters ejerskab af Mette Modeller det substantiverede verbum som en entitet. Brug evt grammatiske betegnelser som kolonnenavne Den der ejer = Subjekt Den der ejes = Objekt Person ID Navn 1 Peter 2 Alexander Ejerskab Subj Obj 1 1 2 1 1 2 2 2 Kæledyr ID Navn 1 Mette 2 Pasmus
Øvelse lav et ER-diagram Vi laver først et ER-diagram sammen på tavlen Dernæst går I ud i grupper og laver et ER-diagram, enten over den billet og reservation der findes i øvelsen for uge 37 eller også over noget i selv synes er spændende
Redundante data Redundante data: Data der er gentaget Fysisk redundans Data gentaget Infologisk redundans Afledte værdier: værdier der kan beregnes Antallet af kæledyr ejet af en person Kan registreres i persontabellen. Peter ejer to katte. Men kan også beregnes ud fra de øvrige tabeller.
Infologisk redundans Antag at vi vil registrere egenskaber ved arten af kæledyr. Et kæledyr af typen Perser tilhører arten Felix, Overflødigt en Grand Danois tilhører arten Canis ID (serial) Navn (varchar(15) Art(varcha r (30) 1 Mette Perser, Felix 2 Rasmus Perser, Felix Fødsel (Dato) Død (dato) 2005-01-07 NULL 1 2005-01-03 NULL 1 Owne d by Int4
Løsning Redundante data placeres i en selvstændig tabel, en M-1 relation En værdi der bruges mange steder
Alt der kan tales om er en entitet ID (serial) Navn (varchar(15) Art Int4 Fødsel (Dato) Død (dato) 1 Mette 1 2005-01-07 NULL 1 2 Rasmus 1 2005-01-03 NULL 1 Owned by Int4 Art ID Navn Species 1 Perser Felix 2 Grand Danois Canis
Egenskab Entitet Navn Navn ErEn 1 Art Kæledyr M M Species Fødselsdag Dødsdag Ejet af 1 Person Navn
Normalisering Trinvis metode til at forbedre et databasedesign Formål: Minimere redundans 1-12 NF (NormalFormer) Tommelfingerregel: 3NF er godt nok
Eksempel Peter Jensen, Birkevænget 6, 8410 Rønde lånte den 5-3-2005 Tolkien s Ringene Herre, udgivet af Gyldendal i 2003 Hakkes i stykker til så hver bid handler om sit eget tema Der er en person ved navn Peter Jensen der bor Birkevænget 6 postnummer 8410 Postnummeret står for Rønde Der er en bog skrevet af Tolkien og udgivet af Gyldendal i 2003 Personen lånte bogen den 5-3-2005
Generelt En række skal kunne identificeres ved én eller flere nøgler Vi skal kunne identificere den ting vi taler om (temaet) Resten af felterne i række skal kunne kombineres frit (være uafhængige) Vi skal kunne variere de øvrige felter Emner må ikke gentages i en række Hvert emne skal repræsenteres i sin egen række
Første normalform Én nøgle identificerer entydigt den enkelte række OBS: en nøgle kan godt være sammensat af to kolonner Hvis en række ikke kan identificeres, kan den ikke fremfindes og opdateres. De enkelte felter må kun vedrøre eet emne Ikke til at søge hvis et felt indeholder flere emner Kolonner må ikke gentages Ellers vil vi være nødt til at sætte en vilkårlig grænse
Eksempel før Låner og udlån Flere værdier i samme felt Der kan være flere eksemplarer af samme bog ingen unik identifikation Peter Jensen / Ringgaden 10, 7500, Holstebro / Karen Blixen / Vintereventyr / Gyldendal / 1964 / Johannes V Jensen / Den lange rejse / Gyldendal / 1977 / 24-12-2000 Der kan være vilkårligt mange bøger
Eksempel efter Lånertabel LånerId Navn Vej Postnummer Bynavn 1001 / Peter Jensen / Ringgaden 10 / 7500 / Holstebro Udlånstabel 1001/ 2001/ Karen Blixen / Vintereventyr / Gyldenldal / 1964 / 24-12-2000 1001/ 2002/ Johannes V Jensen / Den lange rejse / Gyldendal / 1977 / 24-12-2000 Nøgle Kolonner Rækker
Anden normal form Første normal form plus Ingen attributter der ikke selv tilhører nøglen må afhænge af en del af nøglen Fordi vi sandsynligvis vil skulle give samme information flere steder problemer med at opdatere
Eksempel før Udlånstabel LånerId BogId 1001 / 2001/ Karen Blixen / Vintereventyr / Gyldenldal / 1964 / 24-12-2000 1001 / 2002/ Johannes V Jensen / Den lange rejse / Gyldendal / 1977 / 24-12-2000 Information om bogtypen afhænger af information om bogeksemplaret. Rettelser af typen skal foretages alle steder hvor eksemplaret forekommer
Eksempel efter Udlånstabel LånerId BogId 1001 / 2001/ 24-12-2000 1001 / 2002/ 24-12-2000 Ingen attributter der ikke selv tilhører nøglen må afhænge af en del af nøglen Bogtabel BogId 2001/ Karen Blixen / Vintereventyr / Gyldenldal / 1964 2002/ Johannes V Jensen / Den lange rejse / Gyldendal / 1977 2003/ Karen Blixen / Vintereventyr / Gyldenldal / 1964 Men her er stadig redundans
Forbedring Hvis vi laver en tabel over typer af bøger (værktabel) kan vi yderligere reducere redundansen. Eksemplar 2001 og 2003 tilhører da samme værk fx nr 4001 Værktabel VrkId 4001/ Karen Blixen / Vintereventyr / Gyldenldal / 1964 4002/ Johannes V Jensen / Den lange rejse / Gyldendal / 1977 Eksemplartabel EksId VrkId 2001/ 4001 2002/ 4002 2003/ 4001
Tredje normalform Anden normalform plus Ingen attributter må afhænge af andre attributter der ikke selv er nøgler. Igen: hvis vi kan regne attribut X ud ved at kigge på attribut Y, er X redundant information.
Eksempel før Lånertabel LånerId Navn Vej Postnummer Bynavn 1001 / Peter Jensen / Ringgaden 10 / 7500 / Holstebro Bynavn afhænger af postnummer
Eksempel efter Lånertabel LånerId Navn Vej Postnummer 1001 / Peter Jensen / Ringgaden 10 / 7500 Postnummertabel Postnummer Bynavn 7500 / Holstebro
Bor i Summa summarum Svag enhed: kan ikke identificeres ved sine egne attributter Afledt attribut Diskriminator Postnr Bynavn By 1 Deltagerkrav: skal have disse deltagere LånerId M Navn Vej dato Forlag År Låner 1 M 1 Udlån Subj Obj M Bøger UdlånsAnt UdlånsAnt UdlånsAnt BogId Forfatter
Øvelse - normalisering Gennemgå jeres ER-diagram fra før og se om det stemmer overens med de tre normalformer. Hvis ikke, så ret det til så det overholder reglerne.