Relasjonsmodellen, del II

Slides:



Advertisements
Liknende presentasjoner
Prissetting i norske bedrifter. Resultater fra en spørreundersøkelse
Advertisements

Mer om SQL-spørringer og funksjoner
Repetisjon innkapsling static tabell av primitiv datatype LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring.
Tabeller av objekter Klassen ArrayList
Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring
LC238D Datamodellering og databaser Else Lervik, september 2012 Forelesning 6, Uke 39 Objektorientering i ER-modeller.
1 Sannsynlighetsregning Gjenfinningssystemer og verktøy II Jon Anjer.
Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring
Mange til mange sammenhengen
Høgskolen i Oslo Webprogrammering Grunnleggende PHP.
Høgskolen i Oslo Webprogrammering SQL og databaser del 3.
Java database persistence framework.  SELECT by FROM postnr AS p WHERE ( SELECT DISTINCT postnr FROM addr AS a WHERE user.adrId = a.Id ) = p.postnr;
Gjenfinningssystemer og verktøy II
LC238D Datamodellering og databaser Introduksjon til fagfeltet Else Lervik, august 2012Forelesning 1, uke 34 Datafilerside.
Kontrollstrukturer (Kapittel 3)
Avansert SQL og problemløsning
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
SQL, del 1 - select Hva er SQL? side 2 Eksempelbase side 3
Datamodellering og databaser Else Lervik, oktober 2011 Forelesning 9, uke 41 SQL, del 2 Eksempelbaseside 2 Virtuelle.
Databaseteori.
Kap 05 Betinget sannsynlighet
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
IS-102 Klassedefinisjoner
Forelesning nr.2 INF 1411 Elektroniske systemer
Gjenfinningssystemer og verktøy II
Gjenfinningssystemer og verktøy II
Databasehåndtering med MySQL
Eksempel AOA (Activity On Arc)
Kompleksitetsanalyse
Mer grunnleggende matte: Forberedelse til logistisk regresjon
Forside Motivasjon Analyse Forside Motivasjon Analyse  -notasjon O og  Relasjoner Klasser Fallgruver Spørsmål Kompleksitetsanalyse Åsmund Eldhuset asmunde.
Generelt I/O if/else Funksjoner Lists Løkker Dictionaries Annet Listebehandling Klasser Python med noen algdat-anvendelser Åsmund Eldhuset asmunde *at*
Relasjonsmodellen og relasjonsalgebra
P-MP modeller. LOG530 Distribusjonsplanlegging 2 2 Det skal opprettes p fasiliteter (lager) for å betjene en gitt mengde kunder. Kundenodene er også potensielle.
Repetisjon kap 6,7,8.
Normalisering Framstillingen avviker noe fra læreboka,
Se ellers læreboka, kap , side
LC238D Datamodellering og databaser Else Lervik, september 2012 Forelesning 6, Uke 39 Objektorientering i ER-modeller.
Klargjøring fra forrige gang
Datamodellering og databaser Else Lervik, oktober 2011 Forelesning 9, uke 41 SQL, del 2 Eksempelbaseside 2 Virtuelle.
Siste forelesning ER/EER-modellering
Å lage sikre klasser Unntaksklassene i Java-API-et Unntakshåndtering i databasesammenheng try-catch-finally-setningen Trelagsarkitektur; egen databaseklasse.
In 135 Datamodellering og databaser Introduksjon, Enkeltentiteten, Informasjon Ola Bø.
INF150 Programmering mandag 11.9
LC238D Datamodellering og databaser Else Lervik, september 2011 Forelesning 6, Uke 38 Objektorientering i ER-modeller.
Entity Framework Andreas Knudsen, Bekk Consulting AS 31/
1 Kap 08 Kø. 2 Kø - Definisjon En kø (eng queue) er en lineær struktur hvor elementer kan innsetttes kun i den ene enden av listen, kalt bak, og fjernes.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Repetisjon av JSP Variabler, tabeller, if-setninger, for/while-løkker
INF 295 Algoritmer og datastrukturer Forelesning 7 ADT Lister, Stakker og Køer Hans Fr. Nordhaug (Ola Bø)
Grunnleggende PHP - Ronny Mandal1 Grunnleggende PHP.
Structured Query Language Kræsj-kurs
ER-modellen, notasjon ENTITETS- Attributter TYPE Relasjon
Eksempel på SQL ”SQL-setninger” har en struktur som likner på ”naturlig språk”, med ”verb, subjekter og adjektiver”. SQL-setningene begynner alltid med.
DATABASE: Oppgave 2 et medlemsregister for en idrettsklubb med flere idrettsgrener (fotball, håndball, osv). klubben ønsker å lagre informasjon om medlemmenes.
Introduksjon I126 Databaser og datamodellering Høsten 2000 Institutt for informatikk Universitet i Bergen.
Fødselsdato (dmå) er født har lønn Ansatt (ansnr) Beløp (NKr)+ Telefon
Linq To SQL Fagdag 20. November DataContext  DataContexten er mappingen mot databasen –Generer objekter for alle entiteter (tabeller), med properties.
Oppgaver til kodegenerering etc. INF-5110, 2013 Oppgave 1: Vi skal se på koden generert av TA-instruksjonene til høyre i figur 9.10 i det utdelte notatet,
Magnus Haug Algoritmer og Datastrukturer
Kontinuerlig kvalitetskontroll. Hvordan komme helt i mål.
Se ellers læreboka, kap , side
1 Java Database Connectivity (JDBC) Norvald H. Ryeng
Eksempel idé 1 – ta kartesisk produkt, velg tupler, projiser attributter   B,C,Y (  W=X  A=3  Z=‘a’ (R  S)) ABC...W 1z1 4 2c6 2 3r8 7 4n9 4 2j0 3.
Trondheim Lytte- og Læresenter. Sammendrag Prosjektet ble iverksatt fordi Trondheim Lytte- og Læresenter så behovet i å ha et elektronisk kundearkiv i.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
INF1000 (Uke 4) Mer om forgreninger, While-løkker
INF1300 Introduksjon til databaser
Begynnerkurs i Python Realfagskonferansen 2019 Henrik H. Løvold
Utskrift av presentasjonen:

Relasjonsmodellen, del II Eksempelbase side 2 Relasjonsalgebra side 3 SQL-operatorer side 4 Seleksjon og projeksjon side 5 Produkt side 6 Forening (join) side 7-10 Settoperasjonene side 11-13 Grupperingsoperatoren divisjon side 14-15 Hva er en relasjonsdatabase? side 16 Basisreferansen er: E.F. Codd (IBM): ”A Relational Model of Data for Large Shared Data Banks” Comm. ACM, juni 1970 Se ellers læreboka, side 59-76 Else Lervik, september 2012

Datamodellering og databaser Else Lervik, spetember 2012 Eksempelbase leveranse leverandor lev_nr prod_nr antall 1 300 2 200 3 400 4 5 100 lev_nr lev_navn status lev_by 1 Svendsen 20 Lillehammer 2 Jensen 10 Porsgrunn 3 Bø 30 4 Christiansen 5 Andersen Arendal produkt prod_nr prod_navn kode vekt prod_by 1 synåler rød 12 Lillehammer 2 binders grønn 17 Porsgrunn 3 skruer blå Risør 4 14 5 knapper 6 spiker 19 Sqlscript vedlagt Datamodellering og databaser Else Lervik, spetember 2012

Datamodellering og databaser Else Lervik, spetember 2012 Relasjonsalgebra Et sett med operasjoner som utføres på relasjoner Resultatet er alltid en ny relasjon, dvs at vi kan kombinere og nøste operasjonene etter ønske De egentlige algebraoperatorene: seleksjon, projeksjon, produkt og forening Settoperatorene: union, snitt, differanse Grupperingsoperatoren: divisjon Kan uttrykkes slik (en av flere mulige notasjoner) operasjon(r1:s:r.., r2:s:r..., ...); r1, r2, osv er relasjoner, der den siste er resultatrelasjonen s uttrykker horisontalt utvalg (seleksjon), mens r uttrykker vertikalt utvalg (projeksjon, attributter), flere parametere kommer etter hvert Bruker select-setningen til å utføre operasjonene i et SQL-basert databasesystem Med unntak av divisjon er alle operasjonene enkle å utføre i SQL. Datamodellering og databaser Else Lervik, spetember 2012

Datamodellering og databaser Else Lervik, spetember 2012 SQL-operatorer Sammenlikningsoperatorer: = > < >= <= <> IN <> betyr ”ikke lik” Aritmetiske operatorer: + - * / / utfører heltallsdivisjon hvis operandene er heltall Sammensatte logiske uttrykk lages vhja AND, OR og NOT. AND har høyere prioritet enn OR – slik det også er i Java. Parenteser kan brukes til å overstyre prioritetene. Eksempler (kan bruke OR i eksempel 2 og 3): Finn produkter med fargekode ’rød’ og som veier mindre enn 15 gram select * from produkt where kode = 'rød' and vekt < 15; Finn leveranser på enten 100, 200 eller 400 enheter select * from leveranse where antall in (100, 200, 400); Finn leveranser som verken er 100 eller 200 enheter select * from leveranse where antall not in(100, 200); Datamodellering og databaser Else Lervik, spetember 2012

Seleksjon og projeksjon operasjon(r1:s:r, r2:s:r, ...); Seleksjon, også kalt restriksjon, lager en ny relasjon ut fra bestemte tupler i en eksisterende relasjon. begrenser antall rader eksempel: SELECT(leverandor:(status > 20):*, R::); SQL: SELECT * FROM leverandor WHERE status > 20; En projeksjon eller reduksjon lager en ny relasjon ut fra bestemte attributter i en eksisterende relasjon. begrenser antall kolonner PROJECT(leverandor::lev_nr lev_navn, R::); SELECT DISTINCT lev_nr, lev_navn FROM leverandor; relasjon Datamodellering og databaser Else Lervik, spetember 2012

Produkt seleksjon projeksjon operasjon(r1:s:r, r2:s:r, ...); Det kartesiske produkt eller kryssprodukt lager en ny relasjon R med alle mulige sammensettinger av tupler fra to relasjoner A og B. antall tupler i resultatrelasjonen er lik antall tupler i A multiplisert med antall tupler i B antall attributter i resultatrelasjonen er lik summen av antall attributter i A og antall attributter i B CROSS(A::, B::, R::); Eksempel: Ønsker å få ut hele leveransetabellen med alle opplysninger om leverandørene CROSS(leveranse::, leverandor::, R::); SQL: SELECT * FROM leveranse, leverandor; Sjekk resultatet fra SQL-setningen! relasjon x x a a y y a b z z a c p p a q B q a A x b y b z b p b q b x c y c z c p c R q c Datamodellering og databaser Else Lervik, spetember 2012

Indre forening (inner join) seleksjon projeksjon operasjon(A:s:r:k, B:s:r:k, R:s:r); felles attributt Forening (join) lager en ny relasjon med sammensettinger av tupler fra to relasjoner på et felles attributt, slik at hver sammensetting tilfredsstiller en gitt betingelse. Vanligvis «De to relasjonene» er to forskjellige relasjoener Fellesatributtet er primærnøkkel i den ene relasjonen og fremmednøkkel i den andre. Fellesattributtet har samme navn i de to relasjonene. Men det behøver ikke være slik. Fellesattributtet må defineres! Likhetsforening (equijoin) de to attributtene har samme verdi Naturlig forening (natural join) det samme som likhetsforening, men duplikatattributtene er fjernet Generelt, k er fellesattributtet/-ene JOIN(A:s:r:k, B:s:r:k, R:s:r) Eksempel, naturlig forening hele leveransetabellen med alle opplysninger om leverandørene: JOIN(leverandor:::lev_nr, leveranse:::lev_nr, R::lev_nr lev_navn status lev_by prod_nr antall) relasjon Datamodellering og databaser Else Lervik, spetember 2012

Eksempelbase, lite data – for å illustrere SQL-forening leverandor leveranse lev_nr lev_navn status lev_by 1 Svendsen 20 Lillehammer 2 Jensen 10 Porsgrunn 3 Bø 30 lev_nr prod_nr antall 1 300 2 produkt prod_nr prod_navn kode vekt prod_by 1 synåler rød 12 Lillehammer 2 binders grønn 17 Porsgrunn Datamodellering og databaser Else Lervik, spetember 2012

Indre forening (inner join) , SQL Prøv: SELECT * FROM leverandor, leveranse; Resultat: Kartesisk produkt Hva må gjøres? SELECT * FROM leverandor, leveranse WHERE leverandor.lev_nr = leveranse.lev_nr; Naturlig forening blir dermed slik: SELECT leverandor.*, prod_nr, antall FROM leverandor, leveranse WHERE leverandor.lev_nr = leveranse.lev_nr; eller: SELECT leverandor.*, prod_nr, antall FROM leverandor JOIN leveranse ON (leverandor.lev_nr = leveranse.lev_nr); eventuelt (Oracle ok, Java DB ok fra versjon 10.6) SELECT * FROM leverandor NATURAL JOIN leveranse; Vær klar over at NATURAL JOIN kun fungerer korrekt dersom navnene på kolonnene i de to involverte tabellene er de samme. Det går altså ikke nødvendigvis på kopling primær- - fremmednøkkel. Indre forening, dvs der betingelsen blir evaluert til sann. Datamodellering og databaser Else Lervik, spetember 2012

Ytterforening seleksjon projeksjon operasjon(A:s:r:k, B:s:r:k, R:s:r); En venstre ytterforening er en likhetsforening, men med det tillegg at alle tupler i venstre relasjon skal være med. Der det mangler sammenfallende verdier fra høyre relasjon, er attributtene fra høyre relasjon gitt nullverdier. Eksempel: Vil også ha med leverandører som ikke leverer noe LEFT-OUTER-JOIN(leverandor:::lev_nr, leveranse:::lev_nr, R::lev_nr lev_navn status lev_by prod_nr antall) SQL: SELECT leverandor.*, prod_nr, antall FROM leverandor LEFT OUTER JOIN leveranse ON (leverandor.lev_nr = leveranse.lev_nr); Resultatet som før, men med følgende tilleggsrad: 3, Bø, 30, Porsgrunn, null, null Kan ikke sette opp denne spørringen uten å bruke ”LEFT JOIN”. Høyre ytterforening defineres tilsvarende. Full ytterforening (FULL OUTER JOIN) kombinerer venstre og høyre ytterforening (Oracle ok, Java DB ikke ok) felles attributt relasjon Datamodellering og databaser Else Lervik, spetember 2012

Å kombinere tre relasjoner via koplingsrelasjon (SQL) Problem: Lag en liste med alle leveransene og navn og nummer på leverandør og produkt. Løsninger: SELECT lev_navn, leveranse.*, prod_navn FROM leverandor, leveranse, produkt WHERE leverandor.lev_nr = leveranse.lev_nr AND leveranse.lev_nr = produkt.lev_nr; SELECT lev_navn, leveranse.*, prod_navn FROM leverandor JOIN (leveranse JOIN produkt ON (leveranse.prod_nr = produkt.prod_nr)) ON leverandor.lev_nr = leveranse.lev_nr; Datamodellering og databaser Else Lervik, spetember 2012

Datamodellering og databaser Else Lervik, spetember 2012 Eksempelbase leveranse leverandor lev_nr prod_nr antall 1 300 2 200 3 400 4 5 100 lev_nr lev_navn status lev_by 1 Svendsen 20 Lillehammer 2 Jensen 10 Porsgrunn 3 Bø 30 4 Christiansen 5 Andersen Arendal produkt prod_nr prod_navn kode vekt prod_by 1 synåler rød 12 Lillehammer 2 binders grønn 17 Porsgrunn 3 skruer blå Risør 4 14 5 knapper 6 spiker 19 Sqlscript vedlagt Datamodellering og databaser Else Lervik, spetember 2012

Settoperasjonen UNION seleksjon projeksjon operasjon(A:s:r:k, B:s:r:k, R:s:r); Union lager en ny relasjon med tupler som finnes i den ene eller begge av to relasjoner. Relasjonene må være unionkompatible, dvs. at de har det samme antallet attributter, og at attributtene er definert på samme domene (har samme datatype). UNION(A:s:r:k, B:s:r:k, R:s:r) Eksempel: Alle involverte byer UNION(leverandor:::lev_by, produkt:::prod_by, R::); SQL: SELECT lev_by FROM leverandor UNION SELECT prod_by FROM produkt; Resultat: LEV_BY --------------- Arendal Lillehammer Porsgrunn Risør felles attributt relasjon Datamodellering og databaser Else Lervik, spetember 2012

Settoperasjonen SNITT seleksjon projeksjon operasjon(A:s:r:k, B:s:r:k, R:s:r); Relasjonsoperatoren snitt (intersect) lager en ny relasjon med tupler som finnes i begge av to relasjoner. Relasjonene må være unionkompatible. INTERSECT(A:s:r:k, B:s:r:k, R:s:r) Eksempel: INTERSECT(leverandor:::lev_by, produkt:::prod_by, R::); SQL: SELECT lev_by FROM leverandor INTERSECT SELECT prod_by FROM produkt Resultat: LEV_BY --------------- Lillehammer Porsgrunn felles attributt relasjon Datamodellering og databaser Else Lervik, spetember 2012

Settoperasjonen DIFFERANSE seleksjon projeksjon operasjon(A:s:r:k, B:s:r:k, R:s:r); Relasjonsoperatoren differanse lager en ny relasjon med tupler som finnes i den første, men ikke i den andre av to relasjoner. Relasjonene må være unionkompatible. DIFFERENCE(A:s:r:k, B:s:r:k, R:s:r) Eksempel: Byer der det er leverandører, men ikke produkter DIFFERENCE(leverandor:::lev_by, produkt:::prod_by, R::); SQL: SELECT lev_by FROM leverandor EXCEPT SELECT prod_by FROM produkt; OBS! Oracle krever at vi bruker MINUS istf. EXCEPT Omvendt: DIFFERENCE(produkt:::prod_by, leverandor:::lev_by, R::); SELECT prod_by FROM produkt SELECT lev_by FROM leverandor; felles attributt relasjon LEV_BY --------------- Arendal PROD_BY --------------- Risør Datamodellering og databaser Else Lervik, spetember 2012

Grupperingsoperatoren DIVISJON Operatoren krever at vi har to relasjoner. Den første må ha flere eller like mange tupler som relasjon nummer to. Den første relasjonen, A, har to attributter eller attributtgrupper, g og c. Tuplene i A grupperers på g. Tuplene i B har attributter som er sammenliknbare med c. Tuplenes c-del i hver gruppe testes så mot alle tuplene i B. Hvis alle Bs tupler finnes for samme gruppe, vil gruppenes samlingsattributt(er) g, inkluderes i resultatrelasjonen. DIVIDE(A:s:r:g:c, B:s:r:c, R:s:r); Eksempel: Hvem har leveranser på alle produktene? DIVIDE(leveranse::lev_nr prod_nr:lev_nr:prod_nr, produkt::prod_nr:prod_nr, R::lev_nr) Denne operasjonen finnes ikke i SQL, men kan løses f.eks. ved å bruke EXISTS, se egne SQL-forelesninger senere i kurset. Datamodellering og databaser Else Lervik, spetember 2012

Divisjon, eksempel ”r” ”c” ”g” ”c” leveranse:: lev_nr prod_nr:lev_nr:prod_nr produkt::prod_nr:prod_nr prod_nr 1 2 3 4 5 6 lev_nr prod_nr 1 2 3 4 5 Hvem har leveranser på alle produktene? DIVIDE(leveranse::lev_nr prod_nr:lev_nr:prod_nr, produkt::prod_nr:prod_nr, R::lev_nr) R::lev_nr Datamodellering og databaser Else Lervik, spetember 2012

Hva er en relasjonsdatabase? Relasjonsmodellen er et teoretisk fundament for databaser. En database må tilfredsstille kravene i modellen for å kunne kalles en relasjonsdatabase. Codd sier at et databasesystem er relasjonelt hvis det tilfredsstiller følgende: Brukeren av systemet skal oppfatte dataene som en samling med relasjoner (tabeller som tilfredsstiller visse krav), og intet annet. Systemet må minst tilby følgende operasjoner: Seleksjon, projeksjon, forening (join) uten på forhånd å måtte definere fysiske aksessveier for å kunne bruke disse operasjonene. Detaljert i tolv regler ang datarepresentasjon, aksessveier, datakataloger, databasespråk, virtuelle relasjoner (views), fysisk og logisk datauavhengighet og integritet. I hht denne definisjonen finnes det ikke relasjonelle systemer på markedet i dag. Kontroversielt. Kun en akademisk øvelse? Uansett en solid teoretisk basis og et mål å strekke seg etter. Datamodellering og databaser Else Lervik, spetember 2012