EKSAMEN. Emnekode: ITF10306. Emne: Databaser. Dato: 13.05.13 Eksamenstid: 09.00-13.00. Hjelpemidler: Syntaksoversikt (vedlagt oppgaven)



Like dokumenter
EKSAMEN. Innledning. Vedlegget består av 6 sider.

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

Emnenavn: Databaser. Eksamenstid: 4 timer. Faglærer: Edgar Bostrøm

NY OG UTSATT EKSAMEN

Databaser. Eksamenstid: 13. mai 2016 Kl. 9,00 kl , 4 timer. Faglærer: Oppgavesettet består av 4 sider inklusiv denne forsiden.

Høgskoleni østfold EKSAMEN. består av 4 sider inklusiv denne forsiden. Vedlegget består av 6 sider.

Of Høgskoleni østfold

Repetisjon: Normalformer og SQL

Datamodellering og databaser SQL, del 2

Datamodellering og databaser SQL, del 2

Metaspråket for å beskrive grammatikk

Datamodellering og databaser SQL, del 2

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

EKSAMEN. Emne: Webprogrammering med PHP (kont.) Webprogrammering 1 (kont.) Eksamenstid:

EKSAMEN DATABASER

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

EKSAMEN 6102 / 6102N DATABASER

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

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

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

Oppgaver Oppgave a: Sett opp mulige relasjoner

Datamodellering noen temaer

Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

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

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

1. Innføring i bruk av MySQL Query Browser

Oppgave 1 (Opprett en database og en tabell)

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

Emnenavn: Ny/utsatt eksamen. Eksamenstid: Faglærer: Edgar Bostrøm. Erik Åsberg. Davide Roverso

Integritetsregler i SQL. Primærnøkler

EKSAMEN ITF Webprogrammering 1 Dato: Eksamenstid: Hjelpemidler: 2 A4 ark (4 sider) med egenproduserte notater (håndskrevne/maskinskrevne)

1. SQL datadefinisjon og manipulering

Utvikling fra kjernen og ut

Databaser: Relasjonsmodellen, del I

Integritetsregler i SQL

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

SQL Introduksjonskurs. Oversikt

Miniverden og ER- modell

EKSAMEN. Emne: Webprogrammering med PHP (kont.) Webprogrammering 1 (kont.) Eksamenstid:

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

HØGSKOLEN I SØR-TRØNDELAG

Kunnskapsorganisasjon og gjenfinning sider (inklusive forside og vedlegg)

HØGSKOLEN I SØR-TRØNDELAG

SQL 3: Opprette tabeller, datainnsetting og utsnitt

Løsningsforslag. Oppgavesettet består av 9 oppgaver med i alt 20 deloppgaver. Ved sensur vil alle deloppgaver telle omtrent like mye.

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

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

EKSAMEN. Les gjennom alle oppgavene før du begynner. Husk at det ikke er gitt at oppgavene står sortert etter økende vanskelighetsgrad.

EKSAMEN. Emne: Algoritmer og datastrukturer

Høgskolen i Telemark EKSAMEN 6102 DATABASER 5602 DATABASER Tid: 9-13 (9-14 for konte-eksamen i 5602) Hjelpemidler:

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

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

EKSAMEN. Emne: Algoritmer og datastrukturer

EKSAMEN Løsningsforslag. med forbehold om bugs :-)

Datamodellering 101 En tenkt høgskoledatabase

HØGSKOLEN I SØR-TRØNDELAG

EKSAMEN (Konvertert fra en gammel PHPeksamen)

Objektorientering i ER-modeller EER-modeller Enhanced Entity Relationship Models

Tilkobling og Triggere

EKSAMEN. Oppgavesettet består av 9 oppgaver med i alt 20 deloppgaver. Ved sensur vil alle deloppgaver telle omtrent like mye.

Integritetsregler i SQL

Løsning til Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

Løsningsskisse til Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

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

Emnenavn: Matematikk for IT. Eksamenstid: Faglærer: Christian F Heide

Løsningsforslag for Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

EKSAMEN 6102 / 6102N DATABASER

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

Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

UNIVERSITETET I OSLO

En liten rekap. Spørrespråk. I dag SELECT

Ny/utsatt EKSAMEN. Dato: 6. januar 2017 Eksamenstid: 09:00 13:00

EKSAMEN. Dato: 18. mai 2017 Eksamenstid: 09:00 13:00

EKSAMEN DATABASER

HØGSKOLEN I SØR-TRØNDELAG

Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

UNIVERSITETET I OSLO

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

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

EKSAMEN. Oppgavesettet består av 11 oppgaver med i alt 21 deloppgaver. Ved sensur vil alle deloppgaver telle omtrent like mye.

Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

D: Ingen trykte eller håndskrevne hjelpemiddel tillatt. Bestemt, enkel kalkulator tillatt.

Løsningsforslag. Emnekode: Emne: Matematikk for IT ITF Eksamenstid: Dato: kl til kl desember Hjelpemidler: Faglærer:

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

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

EKSAMEN. Oppgavesettet består av 9 oppgaver med i alt 21 deloppgaver. Ved sensur vil alle deloppgaver telle omtrent like mye.

1. SQL spørringer mot flere tabeller

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

SQL Structured Query Language

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

1. Relasjonsmodellen Kommentarer til læreboka

Normalisering. Hva er normalisering?

EKSAMEN. Emnekode: Emne: Matematikk for IT ITF Eksamenstid: Dato: kl til kl desember Hjelpemidler: Faglærer:

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

Innhold Forord Innledning Kapittel 1 Introduksjon til databaser og databasesystem

Relasjonsalgebra. Hva?

EKSAMEN (Konvertert fra en gammel PHP-eksamen)

Sikkerhet og tilgangskontroll i RDBMS-er

EKSAMEN med løsningsforslag

Løsningsskisse til eksamensoppgave i TDT4145 Datamodellering og databasesystemer

Transkript:

EKSAMEN Emnekode: ITF10306 Emne: Databaser Dato: 13.05.13 Eksamenstid: 09.00-13.00. Hjelpemidler: Syntaksoversikt (vedlagt oppgaven) Faglærer: Edgar Bostrøm Oppgavesettet består av 4 sider inklusiv denne forsiden. Vedlegget består av 6 sider. Kontroller at oppgavesettet er komplett før du begynner å besvare spørsmålene. Les gjennom hele oppgavesettet før du starter. Et generelt hint: du kan få bruk for alias, både på kolonner, SELECT <kolonnenavn>/konstant AS <overskriftsnavn> og på tabeller, FROM <tabellnavn> AS <aliasnavn>, Sensurdato: 4. juni 2013 Karakterene er tilgjengelige for studenter på studentweb senest 2 virkedager etter oppgitt sensurfrist. Eksamensoppgaven er sponset av Oppgave 1. SQL Tid: 1 time. Hyggereiser A/S er et nystartet reisebyrå på nett. De har bl.a. spesialisert seg på reiser fra den relativt nye flyplassen Hygge Lufthavn i nærheten av byen Hoss, men selger også andre flyreiser. Vi tenker oss at Hyggereiser skal lage en nettside med noe informasjon om ruter de kan selge. Her gjør vi en rekke forenklinger, bl.a. at samme rute går hver dag, og på samme strekning. Vi antar også at det ikke er flere delstrekninger med mellomlanding. Det er imidlertid naturligvis mulig å bytte fly dersom det ikke går direkte fly dit en skal. Vi antar også at rutenummer kan ses på som atomisk (selv om den egentlig består av to deler). Som kjent har alle verdens flyplasser en unik kode (se Plasskode i tabellen FLYPLASS). I RUTE brukes bare disse kodene, for hhv. fra-flyplass (frakode) og til-flyplass (tilkode). Disse er dermed to uavhengige fremmednøkler, som refererer til ulike flyplasser i tabellen FLYPLASS. Vi antar at avgtid (avgangstid) og anktid (ankomsttid) er kolonner som er definert som tid / time, og er lokal tid. De andre kolonnene er definert som strenger. Kolonnen Status brukes i en deloppgave senere. 1

FLYPLASS Plasskode Plassnavn Status HYG Hygge STO Stockholm Arlanda LHR London Heathrow LGW London Gatwick CPH Køpenhavn Kastrup KUL Kuala Lumpur BER Berlin RUTE Rutenr Frakode Tilkode Avgtid Anktid SW921 HYG LHR 12.45 13.55 SW629 HYG STO 08:10 09:10 SW111 HYG CPH 11:15 12:20 SW724 STO BER 10:05 11:40 RA912 HYG LHR 19:00 20:10 SW922 LHR HYG 14:30 16:40 DR913 LHR HYG 11:40 13:55 SW500 CPH BER 13:00 13:50 DY301 HYG LGW 08:00 09:10 DY358 HYG LHR 21:00 22:10 a) Skriv ut alle ruter fra HYG til LHR (London Heathrow), sortert på økende avgangstider. Kun rutenr, avgangs- og ankomsttider skal skrives ut. b) Vi skal dra fra HYG til London (LHR eller LGW), og tenker på enten å dra etter kl. 18:00 eller ankomme før 10:00 (dvs. dagen etter). For å vite hvilken flyplass man ankommer til, skal vi ha med en kolonne med navnet Ankomstflyplass med i utskriften. Lag en SQL-setning for å skrive ut alle de aktuelle rutene. Utskriften skal sorteres primært på ankomstflyplassnavn, deretter på minskende tid. Utskriften skal se slik ut: Rutenr Ankomstflyplass Avgtid Anktid DY358 London Gatwick 21:00 22:10 DY301 London Gatwick 08:00 09:10 RA912 London Heathrow 19:00 20:10 c) I tabellen Flyplass kan det finnes flyplasser som verken finnes som avgangs- eller som ankomstflyplass. Legg inn teksten UBRUKT i kolonnen Status for disse. (Hint: Update). (Dersom du ikke klarer dette, kan du evt. lage en utskrift av de ubrukte flyplassene, dvs. med en Select-setning i stedet for å endre via en UPDATE-setning. Dette gir ikke full uttelling.) d) Vi skal skrive ut den første ruten fra HYG om morgen, når og hvor den går. Et forsøk på dette var: SELECT Min(Avgtid), Tilkode FROM RUTE WHERE frakode ="HYG"; Hva er feilen med denne? e) Skriv en korrekt SQL-spørring for dette! f) Skriv ut hvor mange flyvninger det går fra HYG til de ulike flyplassene, f.eks. slik: Flyplass Antall ganger London Heathrow 3 Stockholm Arlanda 1 2

Oppgave 2. Mer SQL, samt litt normalisering. Tid: 1 time. a) Lag en CREATE TABLE-setning for å definere tabellen RUTE. Fremmednøkler skal være med, enten i CREATE TABLE-setningen eller i en egen ALTER TABLE-setning. b) Vi skal dra fra HYG til BER og vi ønsker å ha ett (og bare ett) flybytte, det spiller ingen rolle hvor. (I eksempeldata over kan du bytte fly i STO eller CPH, det kan du ikke vite når du lager spørringen).?? HYG (Hygge)???? BER (Berlin) Vi må dessuten sørge for at flyet fra HYG ankommer mellomlandingsflyplassen før flyet går videre til BER. (I praksis må vi legge til 30-45 min. mellom, men det ser vi bort fra her. Vi ser også bort fra mulighet for nattflyvinger). Lag en spørring som viser mulige reiseruter, slik Avgtid via Anktid 11:15 CPH 13:50 c) Vi skal ha med både direkte reiser og reiser med en mellomlanding. Dersom det er direktereiser, skal det stå teksten " " (blank, strek, blank) i kolonnen i stedet for navnet på mellomlandingsflyplassen. (Denne er lettere enn du tror!). (Du kan få full uttelling på denne selv om du ikke får alt riktig på forrige deloppgave). d) Det kan være en fordel med et folkelig skjermbilde i et slikt system, hvor både flyplasskoden og navnet vises, slik: Rutenr Frakode Fraflyplass Tilkode Tilflyplass Avgtid Anktid SW921 HYG Hygge LHR London Heathrow 12.45 13.55 Lag et utsnitt som lager denne strukturen. e) Hvis vi antar at Rutenr er atomisk, hvilken normalform er dette utsnittet på? Svaret skal begrunnes. f) Mange ruter er såkalte kodedeling (code-sharing). Dette betyr at ruten kjøres fysisk av ett flyselskap, men at en eller flere andre flyselskaper selger samme rute med sin egen kode (dvs. rutenr). F.eks. kan ruten RA921 (RA = Risky Airlines) også selges av f.eks. 4 andre flyselskaper, som kode LH912, SA100, AA812 og KL210. Andre ganger kan det være enda flere, eller færre, evt. ingen code-sharing på en rute. For å få med dette bør tabellen i oppgave 1 utvides, slik at den aktuelle raden blir RUTE_VERSJON2 Rutenr Frakode Tilkode Avgtid Anktid Codeshare_rutenr....... RA912 HYG LHR 10:00 11:15 LH912/SA100/AA812/KL210 Denne strukturen er opplagt ikke normalisert. Normaliser trinn for trinn fram til 3NF, evt. BCNF. 3

Oppgave 3. Datamodell Tid: 1 time. Vi skal se litt mer på et slikt system, men nå ut fra et planleggingsperspektiv hos et flyselskap. a) og b bør tegnes i samme modell. a) Av hensyn til flysikkerheten defineres det opp et vilkårlig antall alternative flyplasser i prioritert rekkefølge som det går an å lande på dersom den opprinnelige flyplassen skulle være stengt (f.eks. pga. tåke). Vi regner med at kode og navn på alle disse flyplassene ligger inne i tabellen FLYPLASS. Eksempel: - hvis Hygge flyplass er stengt, skal man prøve å lande på 1) Sandefjord 2) Gardermoen 3) Gøteborg - hvis Sandefjord er stengt, skal man prøve å lande på 1) Hygge 2) Skien 3) Gardermoen 4). 5).. Vi må planlegge den enkelte flyvning, f.eks. rute RA912 den 15.05.2013. Der er det i utgangspunktet satt opp ett bestemt konkret fly (f.eks. flykode LN-2112B), som er av en bestemt type (f.eks. flytypekode B987, som er den helt nye Boeing-serien) for hver flyvning. Systemet skal inneholde de ulike flyene, med flykode og dato de ble kjøpt, de ulike flytypene, med flytypekode og antall seter, og naturligvis flytype for hvert fly. Vi skal vite hvilket konkret fly som er satt opp på den bestemte flyvningen, og også alternative fly som er satt opp som reserve for denne flyvningen det kan være satt opp mange alternative fly for en gitt flyvning, og disse kan være av en annen type enn det som opprinnelig var satt opp. Eksempelvis kan man ha et større fly som et alternativ hvis det viser seg å bli mange bestillinger på en bestemt flygning. Lag en datamodell med utgangspunkt i oppgave 1, tillegget i 2f og utvidelsene som er nevnt over. Primærog fremmednøkler skal tas med. Minima trengs ikke, men du skal sette på verb/roller der det er nyttig for forståelsen av modellen. b) Det må også planlegges hvem som skal jobbe om bord, evt. jobbe med sjekking av flyet, osv. Det trengs derfor en ansattoversikt, med ansattnr, navn, adresse og telefonnr. For hver flyvning planlegges det hvem som skal ha de ulike funksjoner om bord, f.eks. kaptein, 2.flyger, purser 1 og kabinpersonell (her kan det være flere). Dette kan variere fra gang til gang, eksempelvis kan samme person være kaptein en gang og 2.flyver en annen gang, og hvem som er purser kan variere fra gang til gang. Utvid systemet med disse forholdene. Oppgave 4. Samtidighet Tid: 1 time. I flybooking-systemer vil det ofte være mange brukere på en gang, og det er fare for at ulike brukere kan ødelegge for hverandre. Gjør rede for ulike teknikker som brukes for å hindre dette. Noen stikkord til hjelp: Transaksjoner, ACID. Låsing, tofaselåsig, skrive- og leseslås, vranglås. 1 «Sjef» i flykabinen. 4

SQL-syntaks noen elementer o Syntaksoversikten gjelder SQL2. o Oversikten er ikke fullstendig og heller ikke helt presis, men er forhåpentligvis til hjelp. o [ ] brukes om frivillige elementer, det er altså ikke med i SQL-språket. o brukes som eller, det er altså ikke med i SQL-språket. o {.. } start, hhv. slutt,. o <.> brukes for å beskrive et språkelement. Disse beskrives eller er beskrevet tidligere i syntaksbeskrivelsen eller følger av det generelle mønsteret fra andre. o Fet skrift brukes om faste språkelementer Create / alter / drop table-setning Create table CREATE TABLE <tabellnavn> (<kommaseparert tabelldefinisjonsliste>); <kommaseparert tabelldefinisjonsliste>: liste med en eller flere elementer som er enten <kolonnedefinisjon> eller <skrankedefinisjon> hvis listen består av flere elementer, er det komma mellom disse. listen må ha minst en <kolonnedefinisjon>, har som regel også minst en <skrankedefinisjon> <kolonnedefinisjon>: <kolonnenavn> <datatype> [NOT NULL] [DEFAULT <verdi>], samt eventuell <skrankedefinisjon>, men uten (den første) kommaseparerte kolonnelisten. <skrankedefinisjon> (det finnes noen flere enn de som er omtalt her) [CONSTRAINT <skrankenavn>] PRIMARY KEY (<kommaseparert kolonneliste>) [CONSTRAINT <skrankenavn>] FOREIGN KEY (<kommaseparert kolonneliste>) REFERENCES <tabell> (<kommaseparert kolonneliste>) [ON UPDATE <ref.oper.>] [ON DELETE <ref.oper.>] [CONSTRAINT <skrankenavn>] UNIQUE (<kommaseparert kolonneliste>) [CONSTRAINT <skrankenavn>] CHECK (<betingelse>) <kommaseparert kolonneliste>: en eller flere kolonner. Hvis det er flere kolonner er disse adskilt med komma <ref.oper.>: (dvs. referanseintegritetsoperasjon) {RESTRICT NO ACTION CASCADE SET NULL} Alter table ALTER TABLE <tabellnavn> {ADD DROP} {[COLUMN] 2 Noen systemer mangler DROP. <kolonnedefinisjon> <skrankedefinisjon>}; Drop table DROP TABLE <tabellnavn>; 2 Skal være med for noen systemer, skal utelates for andre. 5

Select-setninger. Select-setning uten gruppering SELECT [DISTINCT] <kommaseparert resultatiste> FROM <kommaseparert tabellliste> [WHERE <betingelse>] [ORDER BY <ordnet kolonneliste med sortering>]; <kommaseparert resultatliste>: kommaseparert liste, hvor hvert element er en av o en kolonne o en beregning m.m. o en select-setninger som returnerer en verdi for hver verdi av de andre i listen. et element kan gis et eget navn (alias). Mest vanlig for å gi resultatet av en beregning et folkelig navn. Skrives <kolonne> / <beregning> AS <NyttNavn>. <kommaseparert tabelliste>: enkleste form er en enkelt tabell eller en liste av tabeller med komma mellom et element i denne kan også være alias, på formen <tabellnavn> [AS] <aliasnavn>. Alias må brukes hvis man trenger to eller flere benevnelser for samme tabell. elemenene i denne kan være INNER JOIN, LEFT [OUTER] JOIN eller RIGHT [OUTER] JOIN. Eks.: <tabell1> LEFT OUTER JOIN <tabell2> ON <tabell1>.<kolonne1> = <tabell2>.<kolonne2> inner, left og right join kan også nestes i flere nivåer. <betingelse>: består av en eller flere <enkeltbetingelse> evt. med AND eller OR mellom. paranteser brukes på vanlig måte, AND binder sterkere enn OR <enkeltbetingelse>: er et utsagn som, for en gitt rad i from-setningen, resulterer i enten sant eller usant. ofte <kolonnenavn> = <verdi>, men kan også være >, >=, <>, <= hvis du ikke bruker INNER / LEFT / OUTER JOIN er det viktig å ha med <tabell1>.pk = <tabell2>.fk BETWEEN <startverdi> AND <sluttverdi> søking i starten av en streng (trunkert søking): <kolonne> LIKE <startstreng>% søking i om delstrengen finnes i kolonnen: <kolonne> LIKE %<delstreng>% NOT brukes til å negere en enkeltbetingelse eller sammensatt betingelse. Binder sterkere enn AND og OR. <kolonne> IS [NOT] NULL brukes for å sjekke om en kolonne er NULL, evt. ikke er NULL. delspørringer med IN / NOT IN: <kolonne> [NOT] IN (SELECT <enkeltkolonne> ) delspørringer med EXISTS / NOT EXISTS: [NOT] EXISTS (SELECT ) ALL og ANY brukes på resultatet av en delspørring. o ALL er sann hvis alle i delspørringen oppfyller kriteriet. Usant hvis delspørringen er tom. o ANY er sann hvis noen (en eller flere) oppfyller kravet. Sant hvis delspørringen er tom. SOME er ekvivalent med ANY. o Tips: WHERE <kolonne> >= ALL (SELECT <kolonneliste> ) er det samme som WHERE <kolonne> = (SELECT max(<kolonne>).) <ordnet kolonneliste med sortering>: som kolonneliste, men i sorteringsprioritet, og hver kolonne kan etterfølges av ASC eller DESC. hvis det ikke oppgis sortering, blir sorteringen i stigende rekkefølge. 6

Select-setning med gruppering / aggregering For det som er felles for alle select-setning henvises det til Feil! Fant ikke referansekilden.. SELECT <kommaseparert resultat- eller aggregeringsliste> FROM <kommaseparert tabelliste> [WHERE <betingelser>] [GROUP BY <kommaseparert resultatliste>] [HAVING <betingelse for gruppe>] [ORDER BY <ordnet kolonneliste med sortering>]; <kommaseparert resultat- eller aggregeringsliste>: NB! hvert element er enten et element fra group by-listen eller en <aggregeringsfunksjon>. <aggregeringsfunksjon>: {count(*) count(<kolonne>) sum(<kolonne>) max(<kolonne>) min(<kolonne>) avg(<kolonne>) mfl.} <kolonne> kan også være en beregning noen systemer har også mulighet for count (distinct <kolonne>)), teller altså opp antall ulike. hvis vi ikke har med GROUP BY gjelder aggregeringen for hele tabellen <betingelse for gruppe>: bare aktuelt dersom man har GROUP BY. betingelse som gjelder gruppen, innholder ofte en aggregeringsfunksjon, f.eks. count(*) > 1, sum(<kolonne>) = (select sum( ) kan inneholde AND, OR, NOT osv., på samme måte som <betingelse> INSERT / UPDATE / DELETE INSERT-setning INSERT INTO <tabell> [(<kommaseparert kolonneliste>)] { VALUES (<kommaseparert verdiliste>) <select-setning> } ; UPDATE-setning UPDATE <tabell> SET <kommaseparert kolonne/verdi-liste> [WHERE <betingelse>]; I noen systemer kan <tabell> i stedet være en begrenset form for <kommaseparert tabellliste> <kommaseparert kolonne/verdi-liste>: hvert element består av <kolonne> = <konstant> eller <kolonne> = <beregninget verdi, f.eks. på grunnlag av tidligere verdi> oftest bare en slik kolonne/verdi-kombinasjon, men kan være flere. DELETE-setning DELETE FROM <tabell> [WHERE <betingelse>]; 7

Create / drop view Create view CREATE VIEW <utsnittsnavn> [(<kommaseparert kolonneliste>)] AS <select-setning>; kolonnelisten er nødvendig hvis det ikke er fullt samsvar mellom kolonnenavn i select-setningen og utsnittet. Drop view DROP VIEW <utsnittsnavn>; Indekser CREATE [UNIQUE] INDEX <indeksnavn> ON <tabell> (<ordnet kolonneliste med sortering>); DROP INDEX <indeksnavn>; Noen systemer har andre mekanismer i tillegg. Gi / frata rettigheter til tabeller, laging av brukere, databaser m.m. GRANT <rettigheter> ON <tabell el.l.> TO <bruker/gruppeliste> [WITH GRANT OPTION]; REVOKE [<rettigheter> GRANT OPTION] FROM <tabell el.l.> TO <bruker/gruppeliste>; <rettigheter>: kommasepartert liste med en eller flere av SELECT, INSERT, UPDATE (<kolonnenavn>), DELETE, ALL m.fl.. <bruker/gruppeliste>: kommasepart liste med en eller flere brukere eller grupper. I tillegg finnes ofte noen standardgrupper, som PUBLIC og DBA. Noen variasjoner og begrensninger fra et system til et annet. Annet: Muligheter for å lage / ta bort brukere etc., CREATE USER, gjerne sammen med IDENTIFIED BY <passord>. Tilsvarende DROP USER. Muligheter for å lage nye databaser, CREATE DATABASE <databasenavn> I noen systemer: laging av typer, domener etc. 8

Datamodellnotasjon i 3 dialekter: Chen, kråkefot og nedskalert UML. En del detaljer og variasjoner er utelatt. Grunnleggende. For alle dialekter: attributter kan tas med eller utelates (avh. av hvor langt i prosessen og hvor stor modellen blir) ditto for domener/datatyper det finnes varianter for å vise min./max. Chens ER Kråkefot nedskalert UML Avdeling arbeids sted Person 1 m Rollenavn / relasjonsnavn Personnr Personnavn min. 0, dvs. Avd. kan ha person Begrep: Entitet(styper), relasjon(styper), attributter. Avdeling jobber i Begrep: Entitet(styper), relasjon(styper), attributter. 1 er (og kan skrives) 1..1 Avdeling 0..1 må skrives 0..1 1 er arbeidssted for jobber i * ::::::::: Begrep: Entitet(styper) eller objektklasser, (multiplisitets)assosiasjoner, attributter. Er repetisjoner tillatt? Ja, på konseptuelt nivå Nei splittes ut i egne entitetstyper Ja, på konseptuelt nivå Person PersID ::::::::: Verbal beskrivelse. Kan evt. settes på begge sider. Alternativt brukes en rolle som relasjonsnavn Max. nærmest entitetstypen, evt. min. lenger unna Eksempel med attributter Person PersID Verbal beskrivelse. På en eller begge sider. Pil viser retning * er (og kan skrives) 0..* 1..* betegner 1..m. Eventuelle primær- og fremmednøkler Entitetisering Tas gjerne ikke med Kan gjøres, men vanligvis settes det bare på attributter på relasjonen. Bare nødvendig ved 2. ordens entitetisering (entitetisering av noe som allerede er entitetisert eller kunne vært entitetisert). Hvis det tas med: Markeres f.eks. med primærnøkkel: understreking fremmednøkkel: prikket linje, *, el.l. Gjøres dersom relasjonen skal inneholde attributter. Person Kurs Person Deltagelse Kurs evt. med attributter Hvis det tas med: markeres gjerne med {PK} hhv. {FK} bak attributtnavnet. Hvis (del av) begge deler: {PK,FK} Kan gjøres, men bare nødvendig ved det som ellers ville vært 2. ordens entitetisering. Assosiative entitetstyper m/ attributter kan legges på: Person * * Deltagelse PersID :::::::::: Kurs 9

n-ære relasjonstype / assosiasjoner (n >2) Avhengighet av andre entitetstyper (en entitet er avhengig av eksistensen av en annen entitet) Arv Innebygdt i notasjonen, ingen forskjell på binære og n-ære. Ordre Ordrelinje kalles svak entitet / weak entity Finnes ikke, må i tilfelle beskrives som 1:1, men gir ikke egentlig arv. Evt. entitetisering gjøres først, deretter henges nye entitetstyper på den nye entitetstypen. Markeres ved at fremmednøkkelen er en del av primærnøkkelen (på mange-siden) Finnes ikke, må i tilfelle beskrives som 1: 1, men gir ikke egentlig arv. Bruk for å knytte dem sammen. Assosiative entitetstyper kan brukes Ordre Ordrelinje Kunde kalles komposisjon. Finnes også en mindre sterk kobling som kalles aggregering (markeres med i stedet for ). {Mandatory, Or} Forhold til normalisering Overføring til relasjonsdatabaser Må evt. gjøre utsplittinger av repetisjoner Overføres til kråkefot el.l. først (fra konseptuelt til logisk nivå) Alternativt: Legg på primær- og fremmednøkler Evt. repetisjoner må tas bort. Entitetstyper blir til tabeller. Relasjoner som gjelder 1:m tas bort, relasjoner som gjelder m:m blir egne tabeller. Er normalisert Evt. mange-til-mange må entitetiseres. Ellers: entitetstyper blir til tabeller Utenlands kunde Innenlands kunde I tillegg: kan beskrive kombinasjoner av mandatory/optional og om en overordnet kan kobles til max. 1 eller til flere underordnede (or eller and), se over. Kan også være arv med ett barn, f.eks. bare Kunde og Utenlandskunde. Må gjøre evt. utsplittinger av repetisjoner Evt. repetisjoner må tas bort. Entietstyper/objektklasser blir til tabeller. Assosiasjonsattributter i m:m blir egne tabeller, andre m:m entitetiseres. Høyere ordens relasjonstyper blir til tabeller. Arv må omformuleres (flere alternativer finnes, ingen er helt gode). Dersom man bruker ORDB-utvidelser i systemer som har dette, kan arv implementeres. 10