Tabelldefinisjon og datamanipulering

Like dokumenter
Spørringer mot flere tabeller

Databasedesign HVA? HVORDAN? E/R diagram. Begrepsmessig databasedesign. Logisk databasedesign. Fysisk databasedesign

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

Tabeller og enkle spørringer

Databaser: Relasjonsmodellen, del I

Avansert bruk av SQL. Avanserte spørringer Valguttrykk Spørring på spørring Unionspørringer Delspørringer, vekselvirkende delspørringer Kvantorer

Oppgaver Oppgave a: Sett opp mulige relasjoner

Miniverden og ER- modell

1. SQL datadefinisjon og manipulering

Datamodellering med E/R

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

Metaspråket for å beskrive grammatikk

SQL 3: Opprette tabeller, datainnsetting og utsnitt

INF130 INF130. INF130:Repetisjon INF130:Repetisjon 1. Tabeller og enkle spørringer. Repetisjon

Integritetsregler i SQL. Primærnøkler

Integritetsregler i SQL

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

Datamodellering og databaser SQL, del 2

Normalisering. Partielle avhengigheter Transitive avhengigheter Normalformer: 1NF, 2NF, 3NF, BCNF Normaliseringsstegene Denormalisering

Integritetsregler i SQL

Repetisjon: Normalformer og SQL

Datamodellering og databaser SQL, del 2

INF130: Datahåndtering og analyse

1. Innføring i bruk av MySQL Query Browser

EKSAMEN DATABASER

Datamodellering og databaser SQL, del 2

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

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

1. Relasjonsmodellen Kommentarer til læreboka

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

Databaser kort intro. Tom Heine Nätt

Oppgave 1 (Opprett en database og en tabell)

SQL: Integritetsregler, triggere og views

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

EKSAMEN 6102 / 6102N DATABASER

INF1300 Introduksjon til databaser

INF1300 Introduksjon til databaser

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

Løsningsforlag for oblig 1, databaser 2010

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

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

En lett innføring i foreninger (JOINs) i SQL

IN2090 Introduksjon til databaser

INF1300 Introduksjon til databaser

MySQL-database, php. Innhold. 8 MySQL-database, php. 8.1 Databasen MySQL

Skranker og avledninger

Å bruke Java API-et til å sortere tabeller/arraylister der elementene er (referanser til) objekter

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

Høgskolen i Telemark EKSAMEN 6102 DATABASER Tid: Hjelpemidler: Vedlegg: Eksempeldata til oppgave 1

Introduksjon til fagfeltet

Tilkobling og Triggere

Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet. Løsningsforslag

Høgskolen i Telemark EKSAMEN 6102 DATABASER Tid: Hjelpemidler: Vedlegg: Eksempeldata til oppgave 1

ITGK - H2010, Matlab. Dagens tema : Teori - Databaser

Utvikling fra kjernen og ut

SLUTTPRØVE 5602 DATABASER I (inkludert vedlegg og denne forsida) Vedlegg: A: Eksempeldata og B: Svarark til oppgave 4

SQL Structured Query Language

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

Oppgave 1 1. Spørring: Resultattabell: 2. Spørring: Resultattabell: 3. Spørring:

INF1300 Introduksjon til databaser: SQL Structured Query Language

10. ASP og SQL Innledning Recordset-objektet. Innhold. Referanse til læreboka Kapittel Se detaljer nedenfor.

HØGSKOLEN I SØR-TRØNDELAG

IN2090 Databaser og datamodellering 07 Datamanipulering

INF1300 Introduksjon til databaser

Datamodellering: ER-modeller ER = Enitity-Relationship del 1: Notasjon og oversetting av ulike ER-modeller til tilsvarende relasjonsmodeller

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

SQL Introduksjonskurs. Oversikt

SQL Structured Query Language

INF3100 Databasesystemer

5602 DATABASER Bokmål/nynorsk. 17 (inkludert denne forsiden) Eksamensresultatene blir offentliggjort på Studentweb.

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

1. SQL spørringer mot flere tabeller

HØGSKOLEN I SØR-TRØNDELAG

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

Relasjoner terminologi

Fag TDT4145 Datamodellering og databasesystemer Løsningsforslag til øving 3: Algebra og SQL

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

Løsningsforslag maskindatabasen på Ifi SQL og normalisering

Prosedyrer. Lars Vidar Magnusson. October 26, Lars Vidar Magnusson () Forelesning i DAS October 26, / 19

Databaser noen temaer.

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

Eksamen i Internetteknologi Fagkode: IVA1379

Utvikling fra kjernen og ut

Microsoft Access 2010

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

SQL: Datatyper m.m. Evgenij Thorstensen V18. Evgenij Thorstensen SQL: Datatyper m.m. V18 1 / 12

Oppgave 3 - normalisering

Databaser. - Normalisering -

>>12 Arbeide med MySQL

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

EKSAMEN. Kontroller at oppgavesettet er komplett før du begynner å besvare spørsmålene.

HØGSKOLEN I SØR-TRØNDELAG

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

Videregående programmering 6

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

HØGSKOLEN I SØR-TRØNDELAG

9. ASP med databasekopling, del II

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

Transkript:

Tabelldefinisjon og datamanipulering Tabelldefinisjon med SQL og i utformingsvisning Datatyper Primærnøkler og fremmednøkler Entitetsintegritet og referanseintegritet Nullmerker, repetisjoner, standardverdier Forretningsregler / valideringsregler Innsetting, oppdatering og sletting Import av data Metadatabase SQL-skript Pensum: Kapittel 3 Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 1

En database inneholder mange tabeller Tabellene til Hobbyhuset (fra Relasjonsvinduet i Access): (liknende «EERdiagram» i MySQL work bench) Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 2

Det meste lar seg representere i tabeller Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 3

Databasetabellen Vare VNr Betegnelse Pris Kategori Antall Hylle 90693 Marsipantang 57.00 Konditor 0 B17 44939 Malerskrin, 6 farger 115.00 Hobbymaling 2 B02 10830 Nisseskjegg, 30 cm 57.50 Dukker 42 64551 Hengebegonia, 10 stk 118.00 Blomster 206 E05 15217 Kram tørrfluekorker 32.00 Fiske 213 B42 90164 Lakrisekstrakt, 100g 75.50 Konditor 104 B06 15207 Antron garn, hvit 24.50 Fiske 21 B41 13001 Glasskuler, 100 gr 38.00 Dukker 0 E11 15211 Tubeflueverktøy 209.00 Fiske 39 B42 33045 Blomkarse 17.50 Blomster 206 E05 55130 Moro med marsipan 298.50 Bøker 140 C20 42615 Gipsform marihøner 106.00 Keramikk 124 B03 Rad, kolonne, (atomær) verdi, primærnøkkel, nullmerke. Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 4

Databasetabellen Vare VNr Betegnelse Pris Kategori Antall Hylle 90693 Marsipantang 57.00 Konditor 0 B17 44939 Malerskrin, 6 farger 115.00 Hobbymaling 2 B02 10830 Nisseskjegg, 30 cm 57.50 Dukker 42 42615 Gipsform marihøner 106.00 Keramikk 124 B03 Hvilket datatyper? VNr - INT (SMALLINT) vs. CHAR(5) Betegnelse CHAR(n) vs. VARCHAR(n) Pris DECIMAL(8,2) Kategori - CHAR(n) vs. VARCHAR(n) Hylle CHAR(3) Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 5

Databasetabellen Vare VNr Betegnelse Pris Kategori Antall Hylle 90693 Marsipantang 57.00 Konditor 0 B17 44939 Malerskrin, 6 farger 115.00 Hobbymaling 2 B02 10830 Nisseskjegg, 30 cm 57.50 Dukker 42 64551 Hengebegonia, 10 stk 118.00 Blomster 206 E05 15217 Kram tørrfluekorker 32.00 Fiske 213 B42 90164 Lakrisekstrakt, 100g 75.50 Konditor 104 B06 15207 Antron garn, hvit 24.50 Fiske 21 B41 13001 Glasskuler, 100 gr 38.00 Dukker 0 E11 15211 Tubeflueverktøy 209.00 Fiske 39 B42 33045 Blomkarse 17.50 Blomster 206 E05 55130 Moro med marsipan 298.50 Bøker 140 C20 42615 Gipsform marihøner 106.00 Keramikk 124 B03 Kan vi unngå å skrive samme «Kategori» tekst flere ganger? Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 6

Tabellene Vare og Kategori KatNr Kategori 1 Blomster 2 Bøker 3 Konditor 4 Hobbymaling 5 Keramikk 6 Dukker 7 Fiske Oppslagstabell Fremmednøkkel Unngår skrivefeil. Sparer lagringsplass. Vi kan gjenskape den opprinnelige tabellen. VNr... KatNr... 90693... 3... 44939... 4... 10830... 6... 64551... 1... 15217... 7... 90164... 3... 15207... 7... 13001... 6... 15211... 7... 33045... 1... 55130... 2... 42615... 6... Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 7

Person PNr Fornavn Etternavn Adresse PostNr 12016711111 Per Lie Kongens gate 3 3201 29029622222 Kari Hansen C.A. Larsens gate 1 3800 18057644444 Lise Andersen Josefinegata 12 3251 03116033333 Ola Klausen Rådhusgata 92 3201 10104766666 Hanne Jensen Peter Grøns gate 11 3201 24097788888 Gro Aslaksen Bøgata 56 3800 31038155555 Åge Hansen Torggata 19 3201 04099900000 Kari Larsen Gamleveg 12 3800 PNr er en naturlig primærnøkkel. Navnet på poststedet er lagret i en egen oppslagstabell. Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 8

En Ansatt-tabell med for få kolonner Fornavn Lønn Per 290.000 Lise 320.000 Per 350.000 Kari 345.000 Hanne 270.000 Per 350.000 Ole 300.000...... En tabell skal alltid ha en primærnøkkel. Ingen repetisjoner Ingen nullmerker Hva hvis vi velger Fornavn? Hva hvis vi velger Lønn? Hva hvis vi velger Fornavn+Lønn? Radene i en databasetabell er ikke nummererte (som i Excel). Vi trenger flere kolonner! Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 9

Student SNr PNr Fornavn Etternavn Studium Start 071234 12016711111 Per Lie Informatikk 2007 072341 29029622222 Kari Hansen Økonomi 2007 067234 18057644444 Lise Andersen Informatikk 2006 048231 03116033333 Ola Klausen Historie 2006 079021 10104766666 Hanne Jensen Idrett 2007 063288 24097788888 Gro Aslaksen Innovasjon 2007 031253 31038155555 Åge Hansen Revisjon 2005 075199 04099900000 Kari Larsen Innovasjon 2007 SNr (studentnr) og PNr (personnr) er begge kandidatnøkler. Velger én kandidatnøkkel som primærnøkkel. Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 10

Kjøretøy RegNr Merke Modell År Km LY 12345 Toyota Corolla 1998 225501 NV 54321 Toyota Avensis 2007 15238 DA 98765 Ford Focus 2004 47624 NV 67890 Nissan Micra 2005 31092 Noen fysiske objekter som bøker, personer og kjøretøy har en etablert primærnøkkel (ISBN, personnr, registreringsnr) i «virkelighetens verden». For andre fysiske objekter er det naturlig å etablere et «løpenr» VNr for Vare, SNr for Student osv. Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 11

Data som kan avledes: Skøyteresultat Løper Distanse Plass Tid 1 500 2 41.4 2 500 1 40.9 3 500 4 44.2 4 500 3 42.7 1 5000 2 7.02.4 2 5000 4 7.14.5 3 5000 1 6.56.9 4 5000 3 7.10.3 Vi lagrer ikke mer data enn vi må. Verdiene i kolonnen Plass kan avledes fra? Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 12

Sammensatte objekter: Ordre og Ordrelinje OrdreNr Ordredato KNr 20505 20.8.2006 5022 20506 20.8.2006 5009 20507 20.9.2006 5188 Tenk på et ordreskjema. Ordreskjemaet består av et «hode» (dato, kundenr, ) og et antall «linjer», (varenummer, antall, ) Det er et en-til-mange forhold mellom en ordre og en linje på denne ordren. Primærnøkkel? Fremmednøkkel? OrdreNr VNr Pris Antall 20505 10830 29.90 1 20505 77033 109.50 5 20506 10830 29.90 1 20506 44939 57.60 3 20506 65081 109.50 5 20507 12088 109.50 2 Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 13

Databasetabellen Vare VNr Betegnelse Pris Kategori Antall Hylle 90693 Marsipantang 57.00 Konditor 0 B17 44939 Malerskrin, 6 farger 115.00 Hobbymaling 2 B02 10830 Nisseskjegg, 30 cm 57.50 Dukker 42 64551 Hengebegonia, 10 stk 118.00 Blomster 206 E05 15217 Kram tørrfluekorker 32.00 Fiske 213 B42 90164 Lakrisekstrakt, 100g 75.50 Konditor 104 B06 15207 Antron garn, hvit 24.50 Fiske 21 B41 13001 Glasskuler, 100 gr 38.00 Dukker 0 E11 15211 Tubeflueverktøy 209.00 Fiske 39 B42 33045 Blomkarse 17.50 Blomster 206 E05 55130 Moro med marsipan 298.50 Bøker 140 C20 42615 Gipsform marihøner 106.00 Keramikk 124 B03 VNr er fremmednøkkel i tabellen Ordrelinje mot tabell Vare! Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 14

Hierarkier: Diskusjonsforum Id Avsender Dato Melding SvarPå 1 kahn 23.02.2007 Bla bla bla... 2 ok88 23.02.2007 Bla bla bla... 1 3 jwh 24.02.2007 Bla bla bla... 1 4 kahn 24.02.2007 Bla bla bla... 3 5 kasper 24.02.2007 Bla bla bla... 6 jesper 25.02.2007 Bla bla bla... 5 1 5 2 3 4 Et forum har flere diskusjonstråder. Hver tråd er et hirerarki (et tre). Et innlegg kan få flere svar. Et innlegg starter en ny tråd, eller er svar på et bestemt innlegg. Er det fremmednøkler i tabellen? 6 Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 15

så hvordan kan vi definere tabeller? Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 16

Data og metadata Et databasesystem inneholder både data og metadata. Metadata betyr «data om data». En metadatabase beskriver oppbyggingen av en database: Hva heter tabellene? Hvilke kolonner består hver tabell av? Hvilken datatype har hver kolonne? Hva er primærnøkkel for hver tabell? Hvilke kolonner er fremmednøkler, og mot hvilken tabell? Hvilke forretningssregler er definert på hvilke tabeller? Metadata kan lagres i tabeller. Metadatabasen blir lagret i systemkatalogen. DBHS ajourfører tabellene i systemkatalogen. Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 17

Operasjoner på tabellstruktur Før vi kan legge inn og hente ut data fra en tabell må vi definere hva slags struktur tabellen skal ha. Definere (opprette): CREATE TABLE Ansatt Endre struktur: ALTER TABLE Ansatt Slette: DROP TABLE Ansatt Det finnes også muligheter for å spørre: Hvordan er tabellen Ansatt definert? DBHS slår opp i systemkatalogen. Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 18

Datatyper SQL definerer et sett av innebygde datatyper, bl.a.: CHAR(n) - for eksempel CHAR(30) VARCHAR(n) - for eksempel VARCHAR(30) INTEGER SMALLINT DECIMAL(p,s) - for eksempel DECIMAL(5,2) FLOAT DATE TIME Noen DBHS tilbyr flere datatyper. Eksempel: CURRENCY i Access. Til hver datatype hører det et sett av operatorer og funksjoner. Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 19

Hensikten med datatyper Følgende uttrykk er meningsløse: 250000 > 'Andersen' Lønn + AnsattDato AnsattNr + Lønn Etternavn < Stilling Ved å bestemme en datatype for hver kolonne vil DBHS sjekke at vi ikke «sammenligner epler med pærer». Hvilke av uttrykkene over fører til feilmelding? Det finnes funksjoner for eksplisitt konvertering mellom datatyper. CAST(expr AS type) Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 20

Et enklere eksempel Vi bruker prosjektdatabasen som eksempel: Ansatt( AnsattNr, Fornavn, Etternavn, AnsattDato, Stilling, Lønn ) Prosjekt( ProsjektNr, Budsjett, Leder* Start, Slutt ) ProsjektDeltakelse( AnsattNr*, ProsjektNr*, AntTimer ) Notasjon: Tabellnavn ( kolonne,, kolonne ) Primærnøkler er understreket. Fremmednøkler er merket med ei stjerne *. Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 21

Tabelldefinisjon i SQL (forsøk 1) Tabellnavn + navn og datatype for hver kolonne: CREATE TABLE Ansatt ( AnsattNr INTEGER, Fornavn VARCHAR(15), Etternavn VARCHAR(40), AnsattDato DATE, Stilling VARCHAR(20), Lønn INTEGER ) Valg av datatype er ikke alltid opplagt. Hva med telefonnummer? Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 22

Tabellen Ansatt AnsattNr Etternavn Fornavn AnsattDato Stilling Lønn 1 Veum Varg 01.01.1992 Løpegutt 183 000.00 2 Stein Trude 10.10.2000 DBA 270 700.00 3 Dudal Inger-Lise 24.12.1988 Sekretær 299 000.00 4 Hansen Hans 23.08.2006 Programmerer 325 000.00 5 Bjørnsen Henrik 01.01.2000 Tekstforfatter 375 000.00 6 Gredelin Sofie 18.05.1998 Underdirektør 625 850.00 7 Zimmermann Robert 17.05.1995 Regnskapsfører 375 000.00 8 Nilsen Lise 03.04.2002 Direktør 675 340.00 11 Fosheim Katinka 13.09.2011 Selger 420 000.00 13 Lovløs Ada 12.08.2005 Programmerer 384 250.00 16 Ibsen Bjørnstjerne 02.01.2008 Tekstforfatter 346 000.00 17 Fleksnes Marve 17.05.2009 Lagerleder 320 120.00 20 Felgen Reodor 12.12.2001 Sykkelreparatør 279 500.00 23 Karius Jens 13.12.2001 Salgssekretær 280 390.00 29 Wirkola Gabriel 21.04.2009 Sekretær 255 000.00 Primærnøkkel? Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 23

Definisjon av primærnøkkel i SQL Alle tabeller skal ha en primærnøkkel: CREATE TABLE Ansatt ( AnsattNr INTEGER, Fornavn VARCHAR(15), Etternavn VARCHAR(40), AnsattDato DATE, Stilling VARCHAR(20), Lønn CURRENCY, CONSTRAINT AnsattPN PRIMARY KEY (AnsattNr) ) AnsattPN er navnet på primærnøkkeldefinisjonen. Navnet velges fritt. Kan for eksempel bruke tabellnavn + PN (for PrimærNøkkel). Hvorfor kalles primærnøkkeldefinisjon «constraint»? Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 24

Integritetsregler Entitetsintegritet: En primærnøkkel skal ikke inneholde nullmerker eller repetisjoner. Motivasjon: Rader representerer «ting» eller «entiteter». Vi lagrer ikke informasjon om noe vi ikke kan identifisere. Entitetsintegritet: Beskjed til DBHS (constraint): AnsattNr skal ikke inneholde repetisjoner eller nullmerker! I hvilke situasjoner må DBHS sjekke? Når en ny rad blir satt inn. Når en verdi i primærnøkkel blir endret. Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 25

Fremmednøkler Eksempel fra Hobbyhuset: Alle varenumre i tabellen Ordre må finnes i tabellen Vare. Vi selger ikke varer vi ikke har! Kolonnen Ordre.VNr er en fremmednøkkel, og «peker på» Vare.VNr. Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 26

Unionskompatible kolonner Informasjonen i to tabeller kan «kobles» når de inneholder kolonner med «samme slags verdier». Ansattnummer forekommer i Ansatt.AnsattNr, Prosjekt.Leder og ProsjektDeltakelse.AnsattNr. Prosjektnummer forekommer i Prosjekt.ProsjektNr og ProsjektDeltakelse.ProsjektNr. Beløp forekommer i Ansatt.Lønn og Prosjekt.Budsjett. To kolonner er unionskompatible hvis de har samme domene (datatype). Både Etternavn og Stilling inneholder tekststrenger, men det gir ikke mening å sammenligne verdier fra de to domenene. Hvorvor? Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 27

Tabellen Ansatt AnsattNr Etternavn Fornavn AnsattDato Stilling Lønn 1 Veum Varg 01.01.1992 Løpegutt 183 000.00 2 Stein Trude 10.10.2000 DBA 270 700.00 3 Dudal Inger-Lise 24.12.1988 Sekretær 299 000.00 4 Hansen Hans 23.08.2006 Programmerer 325 000.00 5 Bjørnsen Henrik 01.01.2000 Tekstforfatter 375 000.00 6 Gredelin Sofie 18.05.1998 Underdirektør 625 850.00 7 Zimmermann Robert 17.05.1995 Regnskapsfører 375 000.00 8 Nilsen Lise 03.04.2002 Direktør 675 340.00 11 Fosheim Katinka 13.09.2011 Selger 420 000.00 13 Lovløs Ada 12.08.2005 Programmerer 384 250.00 16 Ibsen Bjørnstjerne 02.01.2008 Tekstforfatter 346 000.00 17 Fleksnes Marve 17.05.2009 Lagerleder 320 120.00 20 Felgen Reodor 12.12.2001 Sykkelreparatør 279 500.00 23 Karius Jens 13.12.2001 Salgssekretær 280 390.00 29 Wirkola Gabriel 21.04.2009 Sekretær 255 000.00 Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 28

Tabeller Prosjekt + ProsjektDeltakelse Prosjekt Nr Budsjett Leder Start Slutt 1001 15 000.00 20 12.01.2011 12.03.2011 1002 750 000.00 8 23.06.2011 23.07.2011 1007 125 000.00 2 12.06.2012 1009 500 000.00 20 01.01.2012 1012 10 000.00 4 10.07.2012 1020 900 000.00 8 23.07.2011 01.09.2011 ProsjektNr AnsattNr AntTimer 1001 1 12 1002 4 44 1002 8 20 1002 13 125 1002 20 2 1007 4 25 1007 11 20 1009 2 5 1009 17 10 1009 20 23 1012 4 10 1020 1 20 1020 8 35 1020 17 125 Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 29

Fremmednøkler Eksempel: Vi registrerer kun timer (i ProsjektDeltakelse) på ansatte som allerede er lagt inn i tabellen Ansatt! En (samling) kolonne(r) X i tabell T1 er en fremmednøkkel med hensyn på tabell T2 hvis følgende alltid gjelder: En verdi i X er enten NULL, eller identisk med en verdi i primærnøkkelen til T2. Ingen rader i T1 er delvis NULL i kolonnene X. Fremmednøkkelen skal være unionskompatibel med tilhørende primærnøkkel. Beskjed til DBHS: Sjekk at verdiene i fremmednøkkelen er en delmengde av verdiene i tilhørende primærnøkkel. Fremmednøkkel Primærnøkkel Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 30

Definisjon av fremmednøkler i SQL Vi må angi navn på kolonne(r) og navn på referert tabell: CREATE TABLE ProsjektDeltakelse ( AnsattNr INTEGER, ProsjektNr INTEGER, AntTimer INTEGER, CONSTRAINT ProsjektDeltakelsePN PRIMARY KEY ( AnsattNr, ProsjektNr ), CONSTRAINT ProsjektDeltakelseAnsattFN FOREIGN KEY ( AnsattNr ) REFERENCES Ansatt, CONSTRAINT ProsjektDeltakelseProsjektFN FOREIGN KEY ( ProsjektNr ) REFERENCES Prosjekt ) Selve regelen kan for eksempel navngis ved: FraTabell + TilTabell + FN (for FremmedNøkkel). Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 31

Egenskaper ved fremmednøkler Ved sletting av ansatt: Sett nullmerke i Prosjekt.Leder for prosjekter der vedkommende er prosjektleder. Ved endring av ansattnummer: Endre ansattnummer i Prosjekt.Leder tilsvarende. CONSTRAINT AnsattProsjektFN FOREIGN KEY (Leder) REFERENCES Ansatt (AnsattNr) ON DELETE SET NULL, ON UPDATE CASCADE Andre muligheter SET DEFAULT (setter inn standardverdi) Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 32

Integritetsregler Referanseintegritet: Alle verdier i en fremmednøkkel (som ikke er NULL) skal finnes i primærtabellen. Motivasjon: Fremmednøkler er «referanser» eller «pekere» til entiteter. Hvis vi peker på noe skal det eksistere, men det er lov ikke å peke! Referanseintegritet: Beskjed til DBHS: ProsjektDeltakelse.AnsattNr skal kun inneholde verdier som også finnes i Ansatt.AnsattNr! I hvilke situasjoner må DBHS sjekke? Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 33

Nullmerker, repetisjoner og standardverdier NOT NULL betyr at kolonnen må fylles ut, UNIQUE hindrer to like verdier, og DEFAULT brukes for å definere standardverdier. CREATE TABLE Student ( StudNr CHAR( 6 ), PersonNr CHAR( 11 ) UNIQUE NOT NULL, Fornavn VARCHAR(15) NOT NULL, Etternavn VARCHAR(40) NOT NULL, PrivatEpost VARCHAR( 40 ) UNIQUE, Status VARCHAR(15) DEFAULT 'Aktiv', CONSTRAINT StudentPK PRIMARY KEY ( StudNr )) Hvilket egenskaper bør StudNr ha? Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 34

Valideringsregler / forretningsregler Valideringsregler øker datakvaliteten: Lønn < 1000000 Fødselsdato < AnsattDato DBHS sjekker at valideringsreglene blir overholdt. Blir innført som en del av en tabelldefinisjon: CONSTRAINT MaxLønn CHECK (Lønn < 1000000) Mer kompliserte «forretningsregler»: Summerte lønnsutgifter for et prosjekt skal ikke overstige budsjettet. Kontroll krever «programmering» (kan gjøres med såkalte triggere, se kap. 14). Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 35

Fremmednøkler og forretningsregler Eksempel: Lovlige verdier for en kolonne Status i en tabell Student skal være «Aktiv», «Permisjon» og «Sluttet». Vi kan legge det inn som en valideringsregel ved bruk av CHECK i CREATE TABLE. Men vi kan også bruke en «kodetabell» og fremmednøkler. StudNr Status 121234 A 124321 A 073344 S...... Kode Beskrivelse A Aktiv S Sluttet P Permisjon...... Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 36

SQL-kommandoer for ajourhold INSERT UPDATE DELETE - setter inn nye rader - endrer i eksisterende rader - sletter utvalgte rader INSERT kommer i to varianter: Legg til 1 rad / legg til mange. UPDATE og DELETE virker i utgangspunktet på alle rader, og må begrenses med en betingelse. Kommandoene brukes oftere av programmerere enn av sluttbrukere. Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 37

Vi ansetter en ny selger: Innsettingsspørringer INSERT INTO Ansatt (AnsattNr, Etternavn, Stilling) VALUES ( 14, 'Hansen', 'Selger') For kolonnenavn som sløyfes fra listen blir det satt inn nullmerker / standardverdier. Visse kolonner må føres opp. Hvilke? Kopierer gamle prosjekter til en hjelpetabell: INSERT INTO GamleProsjekter SELECT * FROM Prosjekt WHERE SluttDato <= '31/12/2009' Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 38

Oppdateringsspørringer Vi øker lønn for alle ansatte med 10%: UPDATE Ansatt SET Lønn=Lønn*1.1 Vi øker lønn og endrer tittel for sekretærene: UPDATE Ansatt SET Lønn=Lønn*1.5, Stilling='Sjefssekretær' WHERE Stilling='Sekretær' UPDATE uten WHERE oppdaterer alle radene! Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 39

Slettespørringer Slett alle varer i kategori Kjøtt: DELETE FROM Vare WHERE Kategori='Kjøtt' Hva gjør denne? DELETE FROM Vare Hvis vi skal slette i flere tabeller må vi skrive flere DELETEkommandoer. Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 40

Skriptfiler Et SQL-skript er en sekvens av SQL-setninger lagret på en fil. Nyttig ved utvikling av nye databaser: CREATE TABLE Vare CREATE TABLE Kunde CREATE TABLE Ordre INSERT INTO Vare INSERT INTO Vare Ved å starte skriptet med å fjerne tabellene kan vi kjøre skriptet flere ganger (endre litt kjøre på nytt ) DROP TABLE Vare DROP TABLE Kunde Access kan ikke lese SQL skriptfiler. Prøv ut i MySQL! Databaser Leksjon 2: Tabelldefinisjon og datamanipulering - 41