INF1300 Introduksjon til databaser: SQL Structured Query Language

Like dokumenter
INF1300 Introduksjon til databaser: SQL Structured Query Language. En første introduksjon Lysark til forelesning mandag 14.

INF1300 Introduksjon til databaser: SQL Structured Query Language. En første introduksjon Lysark til forelesning onsdag 22.

INF1300 SQL Structured Query Language del 1. Stoff som blir/ble forelest i oktober 2013

INF1300 Introduksjon til databaser

INF1300 Introduksjon til databaser

SQL Structured Query Language

Relasjoner terminologi

SQL Structured Query Language

SQL Structured Query Language

UNIVERSITETET I OSLO SQL. Structured Query Language. (The intergalactic dataspeak) Institutt for Informatikk. INF Ragnar Normann 1

UNIVERSITETET I OSLO SQL. Structured Query Language. (The intergalactic dataspeak) Institutt for Informatikk. INF Ellen Munthe-Kaas 1

SQL Structured Query Language. Definere tabeller Skranker Fylle tabeller med data

UNIVERSITETET I OSLO SQL. Structured Query Language. (The intergalactic dataspeak) INF Ellen Munthe-Kaas 1. Institutt for Informatikk

Oppgave: Finn navn og tittel på alle som har arbeidet på prosjektet «Vintersalg»

Integritetsregler i SQL. Primærnøkler

UNIVERSITETET SQL. Structured Query Language (forts.) Institutt for Informatikk. INF Ellen Munthe-Kaas 1

Integritetsregler i SQL

SQL. SQL-standarder. Flere standarder: ANSI SQL SQL2 (SQL-92) SQL3 (SQL-99) = SQL2 + objekt-relasjonelle egenskaper mm

UNIVERSITETET I OSLO SQL. Structured Query Language. (forts.) Institutt for Informatikk. INF Ellen Munthe-Kaas 1

UNIVERSITETET I OSLO SQL. Structured Query Language. Institutt for Informatikk. INF Ellen Munthe-Kaas 1

UNIVERSITETET I OSLO SQL. Structured Query Language. Institutt for Informatikk. INF Ellen Munthe-Kaas 1

UNIVERSITETET I OSLO SQL. Structured Query Language. (forts.) Institutt for Informatikk. INF Ragnar Normann 1

Integritetsregler i SQL

UNIVERSITETET I OSLO SQL. Structured Query Language. Institutt for Informatikk. INF Ellen Munthe-Kaas 1

UNIVERSITETET SQL. Structured Query Language. Institutt for Informatikk. INF Ellen Munthe-Kaas 1

UNIVERSITETET I OSLO SQL. Structured Query Language. Institutt for Informatikk. INF Ellen Munthe-Kaas 1

Relasjoner terminologi

SQL: Integritetsregler, triggere og views

UNIVERSITETET. triggere og views. Institutt for Informatikk. INF Arne Maus 1

Repetisjon: Normalformer og SQL

IN2090 Databaser og datamodellering 07 Datamanipulering

Databaser: Relasjonsmodellen, del I

Metaspråket for å beskrive grammatikk

Sensorveiledning for IN2090 og INF desember :30 18:30 (4 timer)

UNIVERSITETET I OSLO SQL. Structured Query Language. (The intergalactic dataspeak) Institutt for Informatikk. INF Ellen Munthe-Kaas 1

Dagens tema: Relasjonsmodellen (funksjonelle avhengigheter og nøkler, integritetsregler) Realisering: Fra ORM til relasjoner

1. SQL datadefinisjon og manipulering

Løsningsforslag til eksamen i IN2090 Databaser og datamodellering og INF1300 Introduksjon til databaser 6. desember :30 18:30 (4 timer)

Notater: INF1300. Veronika Heimsbakk 8. januar 2013

INF1300 Introduksjon til databaser

Utvikling fra kjernen og ut

Oppgaver Oppgave a: Sett opp mulige relasjoner

INF1300 Det meste av resten av SQL. Utleggsark v. 2.0

Alle attributter har NULL som mulig verdi. mulige verdier for integer: NULL, 0, 1, 2, 3...

IN2090 Databaser og datamodellering 07 Datamanipulering

INF1300 Introduksjon til databaser

INF1300 Det meste av resten av

INF1300 Relasjonsalgebra. Et matematisk fundament for å forstå SQL-setninger

Databaser. Relasjonsmodellen 1 Læreboka: Kap. 2 Relasjonsmodellen Faglærere: Tore Mallaug, Kjell Toft Hansen

INF1300 Relasjonsalgebra og SQL, mengder og bager. Lysark for forelesning v. 2.1

Komplisert eksempel. IN2090 Databaser og datamodellering 07 Datamanipulering. Flere eksempler: Kombinere aggregater. Komplisert eksempel med WITH

Datamodellering og databaser SQL, del 2

Datamodellering og databaser SQL, del 2

IN2090 Introduksjon til databaser

SQL: SELECT-spørringer

Datamodellering og databaser SQL, del 2

INF212 - Databaseteori. Kursinnhold

Ekstramateriale: Eksempel på PostgreSQL 8.4 og SQL:1999 (ikke pensum 2012)

INF1300 Introduksjon til databaser

1. Innføring i bruk av MySQL Query Browser

INF1300 Introduksjon til databaser

Utvikling fra kjernen og ut

Relasjonsalgebraen. Algebra

SQL Structured Query Language. Repetisjon av select spørringer Nestede select spørringer Mengdeoperasjoner Views Flere operatorer

Relasjonsalgebra Kopi av lysark om relasjonsalgebra. Vi går igjennom denne for å lage et matematisk fundament for forståelsen av hvordan

Miniverden og ER- modell

UNIVERSITETET I OSLO RELASJONSALGEBRA. Regning med relasjoner. Institutt for Informatikk. INF Ragnar Normann

INF1300 Introduksjon til databaser

UNIVERSITETET I OSLO RELASJONSALGEBRA. Regning med relasjoner. Institutt for Informatikk. INF Ellen Munthe-Kaas

Tilkobling og Triggere

INF 329: Web-Teknologier. Dataimplementasjon. Fra Kapittel 11 i «Designing Data-Intensive Web Applications» Presentasjonsdato: 17/10/2004

SQL: SELECT-spørringer

Utvikling fra kjernen og ut

INF3100 Databasesystemer

PENSUM H2012 INF1300. Joakim Myrvoll Johansen. Pensum fra forelesnings-foilere

UNIVERSITETET I OSLO RELASJONSALGEBRA. Regning med relasjoner. Institutt for Informatikk. INF Ellen Munthe-Kaas 1

IN2090 Databaser og datamodellering. 08 Typer og skranker

Databasers typesystem. IN2090 Databaser og datamodellering. 08 Typer og skranker. SQL-standarden vs. RDBMSer. Hvilke datatyper har vi

INF3100 Databasesystemer

Dagens tema: Oppdateringsanomalier Normalformer

Løsningsforslag maskindatabasen på Ifi SQL og normalisering

SQL Introduksjonskurs. Oversikt

IN2090 Databaser og datamodellering. 08 Typer og skranker

SQL for INF1300. Stein Michael Storleer 21. september 2015

SQL og Mengdelære. Oracle, MySQL, Access, bruker forskjellige syntaks.

SQL for INF1300. Stein Michael Storleer 7. november 2014

Oppgave 1 (Opprett en database og en tabell)

Spørsmålskompilering del 1

UNIVERSITETET RELASJONSALGEBRA. Regning g med relasjoner. Institutt for Informatikk. INF Ellen Munthe-Kaas 1

Databaser. Relasjonsmodellen 2 Læreboka: Kap. 2 Relasjonsmodellen

Databaser. - Introduksjon til SQL med Microsoft SQL Server - Olav Dæhli Databaser - høsten

SQL, del 1 - select. Hva er SQL?

Institutt for datateknikk. Fag TDT4145 Datamodellering og databasesystemer Løsningsforslag til øving 3: Algebra og SQL

INF1300 Introduksjon til databaser

INF1300 Introduksjon til databaser

UNIVERSITETET I OSLO. Relasjonsmodellen. Relasjoner og funksjonelle avhengigheter. Institutt for Informatikk. INF Ellen Munthe-Kaas 1

Spørsmålskompilering del 1

EKSAMEN 6102 / 6102N DATABASER

Utvikling fra kjernen og ut

Indre select-setninger Nestede select-setninger

Transkript:

INF1300 Introduksjon til databaser: SQL Structured Query Language En første introduksjon Lysark til forelesning mandag 14. september 2009 SQL Structured Query Language SQL Structured Query Language er et deklarativt språk for spørringer mot relasjonsdatabaser SQL inneholder også konstruksjoner for å definere nye relasjonsdatabaser, for å legge inn og endre data i databasen, mm En referanse til PostgreSQL er http://www.postgresql.org/docs/8.2/interactive/ michael@ifi.uio.no INF1300 14. september 2009 3 Dagens tema SQLs definisjonsspråk SQLs spørrespråk select-from-where distinct order by SQLs manipulasjonsspråk Indekser PostgreSQL michael@ifi.uio.no INF1300 14. september 2009 2 Hvordan uttale «SQL»? På norsk uttaler vi SQL bokstav for bokstav: «ess-ku-ell» På engelsk uttales SQL «si:kwel» Årsaken er historisk: SQL ble utviklet av IBM, og prototypen het SEQUEL et akronym for «Structured English QUEry Language» Da SEQUEL ble lansert som et produkt i 1976, ble navnet forkortet til SQL, men uttalen ble beholdt og har overlevd til nå michael@ifi.uio.no INF1300 14. september 2009 4

SQL-standarder Flere standarder: ANSI SQL (1986) SQL2 (SQL-92) SQL3 (SQL:1999) = SQL2 + objekt-relasjonelle egenskaper mm Mange dialekter: Hvert DBMS har sine særegenheter. Sjekk den aktuelle DBMSens dokumentasjon! Alle oppfyller ANSI SQL, stort sett også SQL2 Noen deler av SQL er ikke veldefinert (selv ikke i ANSI SQL) og behandles derfor potensielt forskjellig i forskjellige DBMSer michael@ifi.uio.no INF1300 14. september 2009 5 SQLs DDL Data Definition Language create: Opprette tabell drop: Fjerne tabell alter table: Endre tabell, herunder: Legge til eller fjerne kolonner Legge til, fjerne eller endre integritetsregler (constraints) michael@ifi.uio.no INF1300 14. september 2009 7 SQLs bestanddeler SQL består av en samling konstruksjoner som funksjonelt, men ikke syntaktisk, kan deles opp slik: SDL: Storage Definition Language 3-skjema-arkitekturens fysiske lag DDL: Data Definition Language 3-skjemaarkitekturens konseptuelle lag VDL: View Definition Language 3-skjemaarkitekturens presentasjonslag DML: Data Manipulation Language innlegging, endring og sletting av data DQL: Data Query Language spørrespråk DCL: Data Control Language integritet og sikkerhet michael@ifi.uio.no INF1300 14. september 2009 6 create create tabler (A1D1 [S1],... AnDn [Sn], [liste av skranker] ); R er navnet på relasjonen Ai er et atributt Dj er et domene Sk er en skranke [ ] betyr at dette leddet er en valgfri del av setningen michael@ifi.uio.no INF1300 14. september 2009 8

create eksempel Ansatt(AId, Navn, Tittel, Fdato, Pnr, AnsDato) Vi ønsker ikke at to ansatte skal kunne ha samme AId To personer kan aldri ha samme fødselsnummer = Fdato + Pnr Dermed er både AId og (Fdato, Pnr) kandidatnøkler. Vi velger AId som primærnøkkel og markerer (Fdato, Pnr) som kandidatnøkkel. create table Ansatt ( AId int primary key, Navn varchar (40) not null, Tittel varchar (15) not null, Fdato char(6) not null, Pnr char(5) not null, AnsDato date, unique ( Fdato, Pnr) ) ; michael@ifi.uio.no INF1300 14. september 2009 9 Primærnøkler Kan deklareres i create table sammen med primærnøkkelattributtet (bare hvis attributtet utgjør primærnøkkelen alene) create table Ansatt ( AId int primary key, ) ; Kan deklareres separat i create table etter attributtdeklarasjonene create table Ansatt ( AId int, primary key (AId) ) ; michael@ifi.uio.no INF1300 14. september 2009 11 Datatyper i PostgreSQL datatype forklaring integer heltall real flyttall numeric(n,d) n desimale sifre, d etter desimalpunktum char(n) tekst med fast lengde varchar(n) tekst med variabel lengde boolean boolsk verdi date dato time klokkeslett timestamp dato og klokkeslett bit(n) bitstreng med fast lengde bit varying(n) bitstreng med variabel lengde michael@ifi.uio.no INF1300 14. september 2009 10 Primærnøkler, regler Maks én primærnøkkeldeklarasjon pr. relasjon Konsekvenser av deklarasjonen: To tupler i relasjonen får ikke stemme overens i alle attributtene i primærnøkkelen. Forsøk på brudd ved insert eller update skal avvises av DBMSet Attributtene i primærnøkkelen får ikke inneholde null Dette må sjekkes av systemet ved hver insert og hver update michael@ifi.uio.no INF1300 14. september 2009 12

Kandidatnøkler Kan deklareres i create table sammen med nøkkelattributtet (bare hvis attributtet utgjør kandidatnøkkel alene) create table Ansatt ( Fnr char(11) not null unique, ) ; Kan deklareres separat i create table etter attributtdeklarasjonene create table Ansatt ( Fdato char(6) not null, Pnr char(5) not null, unique ( Fdato, Pnr) ) ; michael@ifi.uio.no INF1300 14. september 2009 13 Skranker Skranke på et attributt eller et tuppel i en relasjon: create table R (... check... ); Sjekkes ved insert og update av R Skranke på tvers av relasjoner: create trigger T...; Triggere «vekkes» når en hendelse (typisk insert, update, delete på en relasjon) skal til å inntreffe Når triggerne «vekkes», eksekveres en tilhørende metode michael@ifi.uio.no INF1300 14. september 2009 15 Kandidatnøkler, regler Flere kandidatnøkkeldeklarasjoner er tillatt pr. relasjon Konsekvenser av deklarasjonen: To tupler i relasjonen får ikke stemme overens i alle attributtene i kandidatnøkkelen Kan brytes hvis ett eller flere av attributtene i kandidatnøkkelen inneholder null Dette må sjekkes av systemet ved hver insert og hver update michael@ifi.uio.no INF1300 14. september 2009 14 Skranke på ett attributt not null check create table Ansatt (... Fdato int not null,..); Konsekvenser: Kan ikke sette inn tuppel med verdien null i attributtet Kan ikke endre verdien til null senere create table Ansatt ( Tittel varchar (15) check ( Tittel= Selger or Tittel= Direktør or ), ) ; Angir en betingelse på attributtet. Sjekkes ved hver endring av attributtets verdi michael@ifi.uio.no INF1300 14. september 2009 16

Fremmednøkler Deklarasjon av fremmednøkler: create table Timeliste ( AId int references Ansatt ( AId ),.. ) ; Alternativt: create table Timeliste ( AId int, foreign key ( AId) references Ansatt ( AId).. ) ; michael@ifi.uio.no INF1300 14. september 2009 17 drop, alter drop tabler; alter tableraddax Dy; alter tablerdropax; R er et relasjonsnavn Ax er et attributt Dy er et domene michael@ifi.uio.no INF1300 14. september 2009 19 Fremmednøkler, regler Konsekvenser av deklarasjonen: De refererte attributtene må være deklarert unique eller primary key Verdier ( null) som opptrer i fremmednøkkelens refererende attributter må opptre i de refererte attributtene Dette må sjekkes av systemet både ved insert, update og delete michael@ifi.uio.no INF1300 14. september 2009 18 SQLs DQL select [distinct] ATTRIBUTTLISTE from NAVNELISTE [where WHERE-BETINGELSE] [group by GRUPPERINGSATTRIBUTTER [having HAVING-BETINGELSE ] ] [order by ATTRIBUTT [asc desc] [, ATTRIBUTT [asc desc] ]... ]; [ ] betyr at dette leddet er en valgfri del av setningen michael@ifi.uio.no INF1300 14. september 2009 20

Select-setningens enkeltdeler select Angir hvilke attributter som skal vises i svaret distinct Fjerner flerforekomster (duplikater) av svartuplene from Navn på de relasjonene spørringen refererer til where Seleksjonsbetingelse (kan inneholde en eller flere join-betingelser) group by, having Angir grupperingsattributter til bruk ved aggregering og betingelser på resultatet av grupperingen; disse kommer vi tilbake til i en senere forelesning order by Ordner tuplene i henhold til angitte kriterier michael@ifi.uio.no INF1300 14. september 2009 21 Her skal det være en figur, men den kunne ikke trykkes i dette 4-ark-pr-side-formatet. Finnes på side 23 i 1-ark-pr-side-versjonen. (Det ville i allefall antagelig bli for smått her...) michael@ifi.uio.no INF1300 14. september 2009 23 Select-setningen Typisk utseende: select [distinct]a1,a2,...,aj fromr1,r2,...,rk wherec; hvor R1,R2,...,Rk er relasjonsnavn A1,...,Aj er attributter frar1,r2,...,rk C er en betingelse michael@ifi.uio.no INF1300 14. september 2009 22 select eksempel 1 Skjema Prosjekt(PId, Pnavn, KId, Pleder, StartDato) Ansatt(AId, Navn, Tittel, Fdato, Pnr, AnsDato) Timeliste(AId, Dato, PId, Timer) Kunde(KId, Knavn, Adresse) Oppgave Finn navn på de ansatte som er ansatt etter 2003. (Det kan være flere ansatte som har samme navn.) Løsning select distinct Navn from Ansatt where AnsDato > date 2003 12 31 michael@ifi.uio.no INF1300 14. september 2009 24

Merknader til select select (SQL) skiller ikke mellom store og små bokstaver, unntatt i tekststrenger select beregner bager (med unntak av noen av operatorene) En bag er en mengde med tupler der samme tuppel kan forekomme flere ganger. (Like tupler fjernes eventuelt ved å bruke distinct.) michael@ifi.uio.no INF1300 14. september 2009 25 Seleksjons- og join-betingelser La oss se nærmere på løsningen fra forrige lysark: select Pnavn, StartDato from Kunde K, Prosjekt P where Knavn = Pust og pes AS and K. KId = P. KId order by StartDato desc; where-betingelsen består av to deler: Knavn = Pust og pes AS Dette leddet kalles en seleksjonsbetingelse Det plukker ut forekomster i Kunde (her trolig bare en) K.KId = P.Kid Dette leddet kalles en join-betingelse Det kobler sammen forekomster fra Kunde med forekomster i Prosjekt forutsatt at verdiene i attributtene KId og Kid er like michael@ifi.uio.no INF1300 14. september 2009 27 select eksempel 2 Skjema Prosjekt(PId, Pnavn, KId, Pleder, StartDato) Ansatt(AId, Navn, Tittel, Fdato, Pnr, AnsDato) Timeliste(AId, Dato, PId, Timer) Kunde(KId, Knavn, Adresse) Oppgave Finn navn og startdato for alle prosjekter bestilt av kunden «Pust og pes AS». Sorter dem slik at det nyeste prosjektet kommer først. Løsning select Pnavn, StartDato from Kunde K, Prosjekt P where Knavn = Pust og pes AS and K. KId = P. KId order by StartDato desc; michael@ifi.uio.no INF1300 14. september 2009 26 Uttrykk i betingelser 1 where-betingelsen er et boolsk uttrykk hvor atomene har en av følgende former: Verdisammenlikning: P op Q P og Q må ha samme domene, minst en av dem må være et attributt, den andre kan være en konstant op {=,<,>,<=,>=,<>, like} (like er bare lov når Q er en konstant tekststreng) null-test: P is null eller P is not null Relasjonssammenlikning: exists, in, all, any (Disse tar vi for oss i en senere forelesning) michael@ifi.uio.no INF1300 14. september 2009 28

Uttrykk i betingelser 2 Spesialregler for sammenlikning av strenger : Leksikografisk ordning:s<t,s>t,s<=t,s>=t Sammenlikning:s=t,s<>t Mønstergjenkjenning:s likep p er et mønster hvor % matcher en vilkårlig sekvens (null eller flere tegn) _ matcher ett vilkårlig tegn michael@ifi.uio.no INF1300 14. september 2009 29 select eksempel 3 Skjema Prosjekt(PId, Pnavn, KId, Pleder, StartDato) Ansatt(AId, Navn, Tittel, Fdato, Pnr, AnsDato) Timeliste(AId, Dato, PId, Timer) Kunde(KId, Knavn, Adresse) Oppgave Finn navn og tittel på alle som har arbeidet på prosjektet «Vintersalg» michael@ifi.uio.no INF1300 14. september 2009 31 Uttrykk i betingelser 3 Datoer og tidspunkter: Dato: date yyyy-mm-dd Tidspunkt: time hh:mm, time hh:mm:ss Tidspunkt med finere gradering enn sekund: time hh:mm:ss.ccc Tidspunkt før GMT: time hh:mm:ss+hh Tidspunkt etter GMT: time hh:mm:ss-hh Dato og tid: timestamp yyyy-mm-dd hh:mm:ss michael@ifi.uio.no INF1300 14. september 2009 30 select eksempel 3 fortsetter Skjema Prosjekt(PId, Pnavn, KId, Pleder, StartDato) Ansatt(AId, Navn, Tittel, Fdato, Pnr, AnsDato) Timeliste(AId, Dato, PId, Timer) Kunde(KId, Knavn, Adresse) Løsning select distinct Navn, Tittel from Ansatt A, Timeliste T, Prosjekt P where Pnavn = Vintersalg and P. PId = T. PId and T.AId = A.AId ; Her består join-betingelsen av to ledd. Den binder sammen en forekomst fra hver av de tre tabellene Ansatt, Timeliste og Prosjekt At join-attributtene parvis har samme navn, er tilfeldig. Det holder at de har samme domene michael@ifi.uio.no INF1300 14. september 2009 32

select navnekonflikter Kvalifiser attributter med relasjonsnavn: R.A Navngi relasjoner med aliaser:...from R as S... (as kan sløyfes) S blir en kopi av R med nytt relasjonsnavn Gi attributter nytt navn: select A as B from... A omnavnes til B i resultatrelasjonen michael@ifi.uio.no INF1300 14. september 2009 33 insert insert intor(a1,a2,...,ak) values(v1,v2,...,vk); insert intor(a1,a2,...,ak) select-setning; Attributtlisten kan sløyfes hvis den dekker samtlige attributter i R og følger attributtenes default rekkefølge NB optimaliseringer i DBMSet kan medføre at tuplene legges inn etterhvert som de beregnes i select-setningen. Dette kan ha sideeffekter på beregningen av select-setningen michael@ifi.uio.no INF1300 14. september 2009 35 SQLs DML insert: Innsetting av nye data update: Endring av eksisterende data delete: Sletting av data michael@ifi.uio.no INF1300 14. september 2009 34 update, delete updater seta1=e1,...,ak=ek [wherec]; delete fromr [wherec]; R er en relasjon,ai er attributter (kolonnenavn) ogej uttrykk. [ ] betyr at dette leddet er en valgfri del av setningen michael@ifi.uio.no INF1300 14. september 2009 36

SQLs SDL: indekser create indexx onr(a1,...,ak); drop indexx; Valg av indekser må gjøres med omhu. Indekser gjør at spørringer mot vedkommende attributt(er) går mye fortere innsetting, sletting og oppdatering blir mer komplisert michael@ifi.uio.no INF1300 14. september 2009 37 Indekser på kandidatnøkler DBMSer bygger vanligvis indekser automatisk på primærnøklene For hver kandidatnøkkel må man vurdere spesielt om det bør deklareres indeks på nøkkelen. Syntaks avhenger av DBMSet Noen SQL-implementasjoner tillater deklarasjon av kandidatnøkkel + indeks i en og samme setning: create unique index FnrIndex on Ansatt ( Fdato, Pnr ) ; I Postgres bygges automatisk en unique index på kandidatnøkler Hvis det er opprettet indeks på en nøkkel, benyttes denne under sjekk av flerforekomster. Ellers: Må i verste fall søke gjennom hele relasjonen michael@ifi.uio.no INF1300 14. september 2009 39 Implementasjon av indekser Implementasjon av indekser: B+-trær Hash... For mer informasjon, se INF2220 Algoritmer og datastrukturer michael@ifi.uio.no INF1300 14. september 2009 38 PostgreSQL For å aksessere filmdatabasen: Fra Linux-promptet (...>), gi kommandoen > psql -h kurspg -U <brukernavn> -d fdb og du blir bedt om å oppgi PostgreSQL-passordet ditt. kurspg er vertsmaskinen, <brukernavn> er ditt Postgres-brukernavn, og fdb er navnet på filmdatabasen Dersom du vil lage egne tabeller, skriver du ditt eget brukernavn i stedet for fdb For å kjøre en kommandofil, skriv\i <filnavn> For å avslutte, skriv\q Les forøvrig dokumentet om filmdatabasen og postgres som er tilgjengelig via lenke fra kursets semesterside. michael@ifi.uio.no INF1300 14. september 2009 40