Dette er vår første obligatoriske oppgave i kurset Moderne Databaseteknologi.

Størrelse: px
Begynne med side:

Download "Dette er vår første obligatoriske oppgave i kurset Moderne Databaseteknologi."

Transkript

1 Innledning Dette er vår første obligatoriske oppgave i kurset Moderne Databaseteknologi. Oppgaven går ut på å implementer en database. Vi skal utforske og implementere noen av de mer avanserte mulighetene som ligger i PostgreSQL, dvs Structured Query Language 3 (SQL3), og som går utover de standardmulighetene vi implementerte i Oracle i grunnkurset i databaser. Databasen skal inneholde minimum 4 tabeller med et antall tupler i hver tabell. Databasen skal være normalisert og har følgende funksjonalitet/innhold: Arv mellom tabeller Object Identifier (OID) som datatype Temporale datatyper Arrayer som lagrede verdier Binary Large Objects (BLOBS) som datatype Funksjoner i form av server side triggers Regler Utenom selve databasen skal vi også utforme egne SQL-spørringer som viser bruken av databasen. Rapporten som følger gir en beskrivelse av databasen Cool CD. Moderne Databaseteknologi, Høgskolen i Østfold

2 Innholdsfortegnelse 1. FORMÅLET MED DATABASEN BEGRENSNINGER EN OVERSIKT OVER DATABASENS KRAV, STRUKTUR, TABELLER OG ATTRIBUTTER Krav til databasen Entitetstyper Relasjonstyper Konseptuell Entity Relation (ER) modell Logisk ER-modell Dataordbok Sterke entiteter Svake entiteter Krav til funksjonalitet/innhold Arv mellom tabeller: OID som datatype: Temporale datatyper: Array som lagrede verdier: Binary Large Objects som datatype: Funksjoner i form av server side triggers: Rules: CREATE TABLE Tabellen cd Tabellen sang Tabellen versjon Tabellen person Tabellen forfatter Tabellen artist Tabellen sangforfatter Tabellen versjoncdartist Tabellen versjonkom_log Server-side trigger funksjoner På tabellen cd På tabellen versjon På tabellen forfatter og artist På tabellen versjoncdartist Check-statements Utdrag fra DROP FUNCTION, TRIGGER, TABLE, SEQUENCE og RULES UTDRAG OVER INNHOLDET I TABELLENE Tabellen cd Tabellen sang Tabellen versjon Tabellen forfatter Tabellen artist Tabellen versjoncdartist Tabellen sangforfatter RULES SQL SPØRRINGER KRITERIER FOR EN GOD DATABASE LØSNING Kvalitetskriterier for prosjektet Moderne Databaseteknologi, Høgskolen i Østfold

3 7.2 Kvalitetskriterier for virkeligheten KONKLUSJON ORDLISTE KILDER Bøker Web: VEDLEGG Vurdering av gruppe 15 av gruppe Vår vurdering av gruppe Moderne Databaseteknologi, Høgskolen i Østfold

4 1. Formålet med databasen Cool CD er en personlig database hvor man kan registrer cd-plater. Vi ønsker med denne databasen å lage en oversikt over et personlig cd-arkiv som skal inneholde informasjon om cd-ene og gi en grei oversikt over dem. Databasen består av tabellene cd, artist, forfatter, sang, person, versjon, sangforfatter og versjoncdartist. Utgangspunket for databasen er at den skal benyttes til personlig bruk. Denne databasen ville ikke blitt brukt i det virkelige liv på grunn av dens begrensninger. 2. Begrensninger For at denne databasen ikke skulle bli for stor har vi satt noen begrensninger: Det er ikke mulig å registrere grupper og gruppemedlemmer. Vi har lagt opp til at det er mulig å registrere artister med fornavn og etternavn, eller bare med artistnavn. Det er ikke mulig å registrere samleplater (eks: Absolute Music). Da mange samleplater inneholder sanger med grupper og disse ikke kan registreres i databasen. Vi har blant annet å se bort fra cd-ens o Komponister o Produksjonsselskap o Sjanger Vi har også valgt å ikke registrere artistens instrumenter. Moderne Databaseteknologi, Høgskolen i Østfold

5 3. En oversikt over databasens krav, struktur, tabeller og attributter 3.1 Krav til databasen Krav Begrunnelse 1 Databasen skal ikke ha noen begrensninger på antall cd-plater. Det skal være mulig å legge inn så mange plater man vil. 2 En cd skal inneholde et bilde. En cd kan gjenkjennes på grunn av bildet. Når det mangler cd-cover på en cd, så vil det vises et standardbilde. 3 En cd skal ha en tittel. En cd må alltid registreres med tittel fordi det er tittelen som oftest brukes ved søk etter en cd. 4 Databasen kan inneholde flere cd-er med lik tittel. Det forekommer at to artister kan gi ut en cd med samme tittel. 5 En cd skal registreres med et utgivelsesår. Dette fordi utgivelsesåret til cd-en er et vanlig søkeatributt. 6 Det skal finnes en sjekk som skal sørge for at det ikke er mulig å registrere cd-er med et utgivelsesår før En cd kan inneholde en eller flere kommentarer. Dette fordi det ikke fantes cd-er før den tiden. Dette gir informasjon om cd-en. 8 En cd skal ha en eller flere artister. En cd kan ikke registreres uten en artist. 9 En person skal registreres med etternavn eller artistnavn. Dette fordi det er etternavnet til personen som oftest brukes ved søk etter artist eller forfatter. Et eksempel på artistnavn er Cher. 10 Artistnavn skal registreres i feltet etternavn. Hvis en artist kun har ett navn skal dette navnet skrives inn i feltet etternavn. 11 Personene kan registreres med fornavn. Det skal være valgfritt å registrere en person med fornavn. 12 Personene kan registreres med fødselsog dødsdato. 13 Personene skal registreres med nasjonalitet. 14 En sang kan ha ingen, en eller flere tekstforfattere. Dette tar vi med fordi det gir mer informasjon om artisten, samt at vi får tatt i bruk temporale datatyper i databasen. Dette gir ekstra informasjon om de ulike artistene. Dette fordi at en sang kan være instrumental og har da ingen tekstforfatter. 15 En sang skal ha en tittel. En sang må alltid registreres med tittel fordi det er tittelen som oftest brukes ved søk etter en sang. 16 Databasen kan inneholde flere sanger Dette fordi forfattere kan skrive sanger med samme tittel. med lik tittel. 17 En versjon av sangen skal ha en eller flere artister. 18 En versjon av en sang skal ha en hovedartist. En versjon kan ikke registreres uten en artist. Dette fordi at man vil ha opplysninger om alle som har vært med på versjonen av sangen. Det er ønskelig å registrere kun en hovedartist per versjon. Moderne Databaseteknologi, Høgskolen i Østfold

6 19 En versjon av en sang kan ha flere biartister. 20 Det skal ikke være en maksgrense for antall biartister til en versjon. 21 Det skal ikke være en makgrense for antall tekstforfattere til en versjon. 22 En cd kan inneholde flere versjoner av samme sang. 23 Det skal ikke være noen maksgrense for antall versjoner. Det er ønskelig å kunne registrere alle biartister som har vært med på en versjon av en sang. Det skal være mulig å legge inn alle artistene som er med på en versjonen. Det skal være mulig å registrere alle tekstforfatterne til en sang. Det forekommer at cd-er inneholder ulike versjoner av samme sang. Det skal være mulig å legge inn så mange versjoner av en sang som man ønsker. 24 En versjon av sangen skal ha en utgave. Dette fordi utgaven til versjonen ofte blir brukt ved søk. 25 En utgave er enten live eller studio. Det er disse to verdiene som det er interessant å få opplysninger om. 26 En versjon av sangen kan inneholde en Dette gir informasjon om versjonen. versjonskommentar. 27 En versjon av sangen kan inneholde Dette gir ekstra informasjon om de ulike lengde på versjonen. versjonene. 28 En versjon av sangen kan inneholde en Dette gir ekstra informasjon om de ulike lydsnutt. versjonene. 29 Databasen tar kun hensyn til enkelt artister. Ikke grupper. Dette gjøres for å begrense databasen og antall tabeller. Moderne Databaseteknologi, Høgskolen i Østfold

7 3.2 Entitetstyper Entiteter Beskrivelse Forekommer sang Beskriver alle sangene i databasen. En sang er skrevet av null eller flere forfattere og den kan finnes i en eller flere versjoner. versjon Beskriver alle versjonene en sang kan ha. En versjon kan finnes på en eller flere cd-er og den kan bli sunget av en eller flere artister. cd Beskriver alle cd-ene i databasen. En cd kan bestå av en eller flere versjoner og det er en eller flere artister på cd-en. artist forfatter Beskriver alle artistene som er med på cd-ene i databasen. Beskriver alle forfatterne som har skrevet tekster til sangene i databasen. En artist kan spille på en eller flere versjoner og han kan være med på en eller flere cd-er. En forfatter kan skrive en eller flere sanger. Moderne Databaseteknologi, Høgskolen i Østfold

8 3.3 Relasjonstyper sang SkrevetAv forfatter sang LagesI versjon versjon FinnesI cd cd SkalHa artist artist DeltarPå versjon 3.4 Konseptuell Entity Relation (ER) modell En ER-modell er en detaljert, logisk representasjon av entiter, assosiasjoner og dataelementer for en database. Denne konseptuelle ER-modellen beskriver databasens datastruktur og er uavhengig implementasjonshensyn slik som for eksempel DBMS, applikasjonsprogrammer og programmeringsspråk. Modellen viser de sterke entitetene og relasjonene mellom dem, samt hvilke attributter som skal fungere som PN. Utgangspunktet til designet av denne modellen er kravene til databasen. sang versjon cd id {PN} * id {PN} 1..* 1..* id {PN} LagesI FinnesI SkrevetAv 1..* 1..* DeltarPå 0..* 1..* 1..* forfatter id {PN} artist id {PN} 1..* SkalHa Tabellen nedenfor viser forbindelsene mellom entitetene i den konseptuelle ER-modellen. Entitet Kardinalitet Relasjon Entitet Kardinalitet sang 1..1 LagesI 1..* versjon 1..* SkrevetAv 0..* forfatter versjon 1..* FinnesI 1..* cd artist 1..* DeltarPå 1..* versjon cd 1..* SkalHa 1..* artist Moderne Databaseteknologi, Høgskolen i Østfold

9 3.5 Logisk ER-modell Denne logiske ER-modellen utformes på grunnlag av den konseptuelle ER-modellen. En viktig del ved utformingen av denne modellen er normalisering. Modellen viser alle entitene, både de sterke og de svake. Entitetene sang og forfatter har et mange til mange forhold (en sang kan skrives av 0 til mange forfattere og en forfatter kan skrive en til mange sanger). Når det er et mange til mange forhold mellom to entiteter legges det inn en svak entitet, her sangforfatter. Vi har det samme forholdet mellom entitetene versjon, cd og artist og har derfor lagt inn den svare entiteten versjoncdartist. Hver entitet har ulike attributter, og attributtene som skal være PN er markert. Den viser også at entitene artist og forfatter arver fra person. Spesifikasjonen {Mandatory, And} sier at en person MÅ være en forfatter eller en artist, eller kan være både en forfatter og en artist. Den logiske modellen brukes som grunnlag for fysisk databasedesign. sang versjon cd id {PN} sangtittel * LagesI id {PN} versjonutgave versjonkom versjonlengde versjonsnutt * FinnesI versjon CdArtist hovedbiartist 1..* SkalHa 1..1 id {PN} cdtittel cdutaar cdkom cdbilde * SkrevetAv 0..* DeltarPå sangforfatter * artist Forfatter 1..1 id {PN} id {PN} forfatter {Mandatory, And} person id {PN} enavn fnavn fodselsdato dodsdato nasjonalitet Moderne Databaseteknologi, Høgskolen i Østfold

10 Tabellen nedenfor viser forbindelsene mellom entitetene i den logiske ER-modellen. Entitet Kardinalitet Relasjon Entitet Kardinalitet sang 1..1 LagesI 1..* versjon 1..1 SkrevetAv 0..* sangforfatter forfatter 1..1 Forfatter 1..* sangforfatter versjon 1..1 FinnesI 1..* versjoncdartist artist 1..1 DeltarPå 1..* versjoncdartist cd 1..1 SkalHa 1..* versjoncdartist Sterke entiteter i Cool CD cd(id, cdtittel, cdutaar, cdkom, cdbilde) PRIMARY KEY id sang(id, sangtittel) PRIMARY KEY id versjon(id, versjonutgave, versjonkom, versjonlengde, versjonsnutt, sangid) PRIMARY KEY id FOREIGN KEY sangid REFERENCES sang(id) person(id, enavn, fnavn, fodselsdato, dodsdato, nasjonalitet) PRIMARY KEY id forfatter(id) PRIMARY KEY id artist(id) PRIMARY KEY id Svake entiteter i Cool CD sangforfatter(sangid, personid) FOREIGN KEY sangid REFERENCES sang(id) FOREIGN KEY personid REFERENCES forfatter(id) versjoncdartist(cdid, versjonid, personid, hovedbiartist) FOREIGN KEY cdid REFERENCES cd(id) FOREIGN KEY versjonid REFERENCES versjon(id) FOREIGN KEY personid REFERENCES artist(id) Moderne Databaseteknologi, Høgskolen i Østfold

11 3.6 Dataordbok Sterke entiteter Tabellen cd Kolonne Datatype + Null Nøkkel Check/Trigger Unik Ref(FK) navn lengde id SERIAL Nei PK Nei Ja FK i versjoncdartist cdtittel VARCHAR(70) Nei Nei Nei Nei cdutaar NUMBER(4) Nei Nei Ja Nei cdkom ARRAY[] Ja Nei Nei Nei cdbilde OID Ja Nei Nei Ja Hvorfor null/not null og trigger/ikke trigger Kolonne navn Null Check/Trigger id Er PN i tabellen cd. PN kan ikke være null da den unikt skal identifisere hver tuppell. Er av datatypen SERIAL. SERIAL produserer et unikt løpenummer som man ikke trenger å sjekkes. cdtittel cdutaar cdkom cdbilde Kan ikke være null fordi alle cd-er har en tittel. Kan ikke være null fordi alle cd-er har et utgivelsesår. Kan være null fordi ikke alle cd-er har en kommentar. Kan være null fordi det ikke er sikkert at vi har bilde på alle cd-er. Sjekkes ikke fordi den kan være av forskjellig lengde og inneholde forskjellige tegn (tall, bokstaver, symboler). Sjekkes fordi årstall skal bestå av 4 tall og ikke tall under Sjekkes ikke fordi den kan være av forskjellig lengde og inneholde forskjellige tegn (tall, bokstaver, symboler) samt at den kan inneholde null-verdi. Sjekkes ikke da den kan inneholde null-verdi. Tabellnavn: versjon Kolonne Datatype + Null Nøkkel Check/Trigger Unik Ref(FK) Navn lengde id SERIAL Nei PK Nei Ja FK i versjoncdartist versjonutgave CHAR(6) Nei Nei Ja Nei versjonkom VARCHAR(200) Ja Nei Nei Nei versjonlengde TIME Ja Nei Nei Nei versjonsnutt OID Ja Nei Nei Ja sangid VARCHAR Nei FK Nei Ja PK i sang Moderne Databaseteknologi, Høgskolen i Østfold

12 Hvorfor null/not null og trigger/ikke trigger Kolonne navn Null Check/Trigger id Er PN i tabellen cd. PN kan ikke være null da den unikt skal identifisere hver tuppell. Er av datatypen SERIAL. SERIAL produserer et unikt løpenummer som man ikke trenger å sjekke. versjonutgave versjonkom versjonsnutt sangid Kan ikke være null fordi alle cd-ene våre skal registreres som Studio eller Live. Kan være null fordi ikke alle versjoner har en kommentar. Kan være null fordi det ikke er sikkert at vi har med lydsnutt til alle låter. Kan ikke være null da vi ellers vil miste relasjonen til tabellen sangforfatter. Har med trigger som sjekker om verdiene som legges inn er studio Studio eller live Live. Hvis input starter med liten bokstav gjøres denne om til stor bokstav. Sjekkes ikke fordi den kan være av forskjellig lengde og inneholde forskjellige tegn (tall, bokstaver, symboler) samt at den kan inneholde null-verdi. Sjekkes ikke da den kan inneholde null-verdi PK- og FK-relasjonen sikrer at id i sang må være registrert før den kan registreres her Tabellnavn: sang Kolonne Datatype + Null Nøkkel Check/Trigger Unik Ref(FK) navn lengde id SERIAL Nei PK Nei Ja FK i versjon sangtittel VARCHAR(70) Nei Nei Nei Nei Hvorfor null/not null og trigger/ikke trigger Kolonne navn Null Check/Trigger id Er PN i tabellen cd. PN kan ikke være null da den unikt skal identifisere hver tuppell. Er av datatypen SERIAL. SERIAL produserer et unikt løpenummer som man ikke trenger å sjekke. sangtittel Kan ikke være null fordi alle sanger har en tittel. Sjekkes ikke fordi den kan være av forskjellig lengde og inneholde forskjellige tegn (tall, bokstaver, symboler). Tabellnavn: person Kolonne Datatype + Null Nøkkel Check/Trigger Unik Ref(FK) navn lengde id SERIAL Nei PK Nei Ja enavn VARCHAR(30) Nei Nei Nei Nei fnavn VARCHAR(25) Ja Nei Nei Nei fodselsdato DATE Ja Nei Nei Nei dodsdato DATE Ja Nei Nei Nei nasjonalitet VARCHAR(35) Nei Nei Ja Nei Moderne Databaseteknologi, Høgskolen i Østfold

13 Hvorfor null/not null og trigger/ikke trigger Kolonne navn Null Check/Trigger id Er PN i tabellen cd. PN kan ikke være null da den unikt skal identifisere hver tuppell. Er av datatypen SERIAL. SERIAL produserer et unikt løpenummer som man ikke trenger å sjekke. enavn fnavn fodselsdato dodsdato nasjonalitet Kan ikke være null fordi alle artister har et navn (etternavn eller artistnavn). Kan være null siden alle artister ikke behøver å ha et fornavn (for eksempel Prince). Kan være null fordi det ikke er sikkert at vi kjenner fødselsdato til alle artistene. Kan være null fordi det ikke er sikkert at artisten er død, eller at vi kjenner dens dødsdato. Alle artister har en nasjonalitet som må registreres. Sjekkes ikke fordi den kan være av forskjellig lengde og inneholde forskjellige tegn (tall, bokstaver, symboler). Sjekkes ikke da den kan inneholde null-verdi. Har valgt datatypen DATE. Denne sikrer at fødselsdato blir skrevet inn på riktig format. Har valgt datatypen DATE. Denne sikrer at dødssdato blir skrevet inn på riktig format. Sjekker at nasjonalitet kun består av bokstaver. Tabellnavn: forfatter Kolonne Datatype + Null Nøkkel Check/Trigger Unik Ref(FK) navn lengde id SERIAL Nei PK Nei Ja FK i sangforfatter Hvorfor null/not null og trigger/ikke trigger Kolonne navn Null Check/Trigger id Er PN i tabellen cd. PN kan ikke være null da den unikt skal identifisere hver tuppel Er av datatypen SERIAL. SERIAL produserer et unikt løpenummer som man ikke trenger å sjekke. Tabellnavn: Artist Kolonne Datatype + Null Nøkkel Check/Trigger Unik Ref(FK) navn lengde id SERIAL Nei PK Nei Ja FK i versjoncdartist Hvorfor null/not null og trigger/ikke trigger Kolonne navn Null Check/Trigger id Er PN i tabellen cd. PN kan ikke være null da den unikt skal identifisere hver tuppel Er av datatypen SERIAL. SERIAL produserer et unikt løpenummer som man ikke trenger å sjekke. Moderne Databaseteknologi, Høgskolen i Østfold

14 3.6.2 Svake entiteter Tabellnavn: sangforfatter Kolonne Datatype + Null Nøkkel Check Unik Ref(FK) Navn lengde sangid INT Nei FK PK- og FKrelasjonen Ja PK i sang sikrer at id i sang er registrert før den kan registreres her personid INT Nei FK PK- og FKrelasjonen sikrer at id i forfatter er registrert før den kan registreres her Ja PK i forfatter Hvorfor null/not null og trigger/ikke trigger Kolonne navn Null Check/Trigger sangid Kan ikke være null da vi ellers vil miste relasjonen til tabellen sang. PK- og FK-relasjonen sikrer at id i sang er registrert før den kan registreres her. personid Kan ikke være null da vi ellers vil miste relasjonen til tabellen forfatter. PK- og FK-relasjonen sikrer at id i forfatter er registrert før den kan registreres her. Tabellnavn: versjoncdartist Kolonne Datatype + Null Nøkkel Check/Trigger Unik Ref(FK) navn lengde cdid INT Nei FK Nei Ja PK i cd personid INT Nei FK Nei Ja PK i artist versjonid INT Nei FK Nei Ja PK i versjon hovedbiartist CHAR(1) Nei Nei Ja Nei Hvorfor null/not null og trigger/ikke trigger Kolonne navn Null Check/Trigger cdid Kan ikke være null da vi ellers vil miste relasjonen til tabellen cd. PK- og FK-relasjonen sikrer at id i cd er registrert før den kan registreres her. personid versjonid hovedbiartist Kan ikke være null da vi ellers vil miste relasjonen til tabellen artist. Kan ikke være null da vi ellers vil miste relasjonen til tabellen versjon. Kan ikke være null fordi en artist er enten hoved- eller biartist. PK- og FK-relasjonen sikrer at id i artist er registrert før den kan registreres her. PK- og FK-relasjonen sikrer at id i versjon er registrert før den kan registreres her. Kan kun legge inn H h (hovedartist) eller B b (biartist). Hvis input er liten bokstav gjøres denne om til stor bokstav. Moderne Databaseteknologi, Høgskolen i Østfold

15 3.7 Krav til funksjonalitet/innhold Arv mellom tabeller: Hvis det er mange objekter som har like attributter kan man ha ett objekt (foreldre objekt) som inneholder alle fellesattributtene. Andre objekter (barne objekter) kan da arve attributtene fra forelderobjektet og tillegg ha sine egne attributter. Ved å gjøre det på denne måten hindrer man at samme data lagres flere steder og at de ikke blir så mange attributter uten verdi. Vi har valgt å ha fellesattributter i objektet person (foreldreobjekt). Objektene artist og forfatter arver attributtene som ligger i objektet person OID som datatype: Hver rad i PostgreSQL blir tilegnt et unikt, normalt usynlig tall (OID). Du kan også bruke OID som datatype. Ved å definere OID-kolonner sier man at kolonnene skal inneholde OID-verdier. Vi har valgt å bruke OID som representasjon for bilder (cd-cover i tabellen cd) og lydsnutter (lydspor fra de ulike versjonene i tabellen versjon) i databasen Temporale datatyper: Denne datatypen tillater lagring av dato, tid og tidsintervallinformasjon. Formatet som brukes til dato blir kontrollert av settingen i DATESTYLE og formatet til tid blir kontrollert av settingen i TIMESTAMP. Vi har valgt å bruke dato og tid som temporale datatyper: Objektet person har 2 attributter hvor dato brukes, fodselsdato og dodsdato Objektet versjon har 1 attributt hvor tid brukes, versjonlengde Array som lagrede verdier: Ved å bruke arrays kan kolonner inneholde flere dataverdier. En array kan brukes til alle datatyper. Hvis du trenger å oppdatere og aksessere elementene i arrayen er det ofte en bedre løsning enten å bruke separate kolonner eller tabeller Hver cd kan inneholde flere kommentarer/anmeldelse. Vi har valgt å legge disse kommentarene/anmeldelsene i en array siden den tillater flere verdier i samme kolonne. Ex. CREATE TABLE test ( name VARCHAR(50), kommentar text[]); INSERT INTO test VALUES ( Tarzan, { Dette er en kommentar, Dette er en annen kommentar }); SELECT kommentar [1:1] FROM test;! Dette er en kommentar SELECT kommentar [1:2] FROM test;! Dette er en kommentar, Dette er en annen kommentar SELECT kommentar [2:2] FROM test;! Dette er en annen kommentar Moderne Databaseteknologi, Høgskolen i Østfold

16 3.7.5 Binary Large Objects som datatype: Du bruker BLOBS som datatype hvis databasen skal ta vare på store dataverdier og/eller binære-data. BLOBS tillater deg å lagre store tekstfiler, lydfiler eller bilder direkte i databasen eller ved å legge pekere til BLOBSene. Tre typer BLOBS er definert: Binary Large Object (BLOB), en binær streng Character Large Object (CLOB), en lang streng med karakterer National Character Large Object (NCLOB), som også er en lang streng med karakterer Vi har valgt å bruke denne datatypen til bilder og lyd: Objektet cd har et attributt, cdbilde og det inneholder et bilde av forsiden til cden. Bildefilene har endelsen.jpg Objektet versjon har et attributt, versjonsnutt og det inneholder en lydsnutt. Lydfilene har endelsen.ra Funksjoner i form av server side triggers: En trigger er en SQL-kommando som blir utført automatisk av databasen ved forandring på en navngitt tabell. Triggeren blir utført når hendelsen som trigger den blir utført. Triggeren tar ikke imot argumenter. Hendelser som kan utløse en trigger er INSERT, UPDATE og DELETE. Triggerne kan for eksempel brukes for å validere inputdata og for å vedlikeholde komplekse integritetskrav. Vi har brukt triggers for å sjekke om verdien som legges inn i ulike tabeller (enten ved INSERT eller UPDATE) har riktig verdi. Vi trenger ikke å lage triggers til sangforfatter og versjoncdartist da disse kun kan inneholde verdier som allerede ligger i sang, forfatter, versjon, cd eller artist Rules: Du bruker rules når man skal kontrollere INSERT, UPDATE og DELETE statements. De er bra å bruke for å kontrollere hva som blir gjort med databasen. Vi har brukt rules som fører en logg over endringer til versjonskommentaren. Det som blir logget er hvem som utfører endringen, når endringen blir gjort samt id og kommentaren. Vi har også laget en regel som kontrollerer at brukeren ikke får slette de 5 første cd-ene i databasen. Moderne Databaseteknologi, Høgskolen i Østfold

17 3.8 CREATE TABLE Tabellen cd Tabellen cd har 5 attributter. id som er av typen SERIAL er unik og er derfor satt til PN. Cd- titlene er av variabel lengde og vi har derfor valgt å bruke datatypen VARCHAR. Feltet har en maksimallengde på 70 tegn. Siden dette feltet må inneholde en verdi er det spesifisert som NOT NULL. Attributtet cdutaar har en fast lengde på 4 tegn. Har valgt å bruke CHAR og ikke INT siden vi ikke kommer til å benytte attributtet til beregninger. Siden dette feltet må inneholde en verdi er det spesifisert som NOT NULL. VARCHAR [] definere en endimensjonal array. Spesifiserer ikke hvor stor den skal være da det kan være flere kommentarer til hver cd. Attributtet cdbilde er av datatypen BLOB og inneholder en filsti til et bilde. Vi har valgt å bruke OID som representasjon for en BLOB. CREATE TABLE cd ( id SERIAL, cdtittel VARCHAR(70) NOT NULL, cdutaar CHAR(4) NOT NULL, cdkom VARCHAR[], cdbilde OID, PRIMARY KEY (id) ); Tabellen sang Tabellen sang har 2 attributter. id som er av typen SERIAL er unik og er derfor satt til PN. De ulike sang titlene er av variabel lengde og vi har derfor har vi valgt å bruke datatypen VARCHAR. Feltet har en maksimallengde på 70 tegn. Siden dette feltet må inneholde en verdi er det spesifisert som NOT NULL. CREATE TABLE sang ( id SERIAL, sangtittel VARCHAR(70) NOT NULL, PRIMARY KEY (id) ); Tabellen versjon Tabellen versjon har 6 attributter. id som er av typen SERIAL er unik og er derfor satt til PN. De to ulike versjonsutgavene som kan registreres har ulike lengder. Vi har derfor valgt å bruke datatypen VARCHAR med en maksimallengde på 6 tegn. En versjon må ha en utgave derfor er feltet spesifisert som NOT NULL. En kommentar til en versjon kan bestå av ulik antall tegn og vi har derfor valgt å bruke datatypen VARCHAR til dette attributtet. Hver kommentar kan maksimalt inneholde 200 tegn. Attributtet versjonlengde inneholder en tidsenhet og vi har derfor valgt en tidsdatatype. Formatet på denne datatypen er timer:minutter:sekunder. Moderne Databaseteknologi, Høgskolen i Østfold

18 Attributtet versjonsnutt er av datatypen BLOB og inneholder en filsti til en lydsnutt. Vi har valgt å bruke OID som representasjon for en BLOB. Attributtet sangid som er FK i denne tabellen er av datatypen INT. Vi har ikke spesifisert noe maksimalgrense siden vi ikke kan vite hvor stor den kan være/vil bli. sangid referere til PN id i tabellen sang. Hvis attributtet id oppdateres/slettes i tabellen sang vil attributtet sangid i tabellen versjon også oppdateres/slettes. CREATE TABLE versjon ( id SERIAL, versjonutgave VARCHAR(6) NOT NULL, versjonkom VARCHAR(200), versjonlengde TIME, versjonsnutt OID, sangid VARCHAR, PRIMARY KEY (id), FOREIGN KEY (sangid) REFERENCES sang(id) ON UPDATE CASCADE ON DELETE CASCADE ); Tabellen person Tabellen person har 6 attributter. id som er av typen SERIAL er unik og er derfor satt til PN. Ulike artister har variabel lengde på deres etternavn og vi har derfor valgt å bruke datatypen VARCHAR til attributtet enavn. Feltet har en maksimallengde på 35 tegn. Siden dette feltet må inneholde en verdi er det spesifisert som NOT NULL. Ulike artister har variabel lengde på deres fornavn og derfor har vi valgt å bruke datatypen VARCHAR til attributtet fnavn. Feltet har en maksimallengde på 25 tegn. Atributtene fodselsdato og dodsdato består av dato og vi har derfor valgt datatypen Date. Formatet til denne datatypen er dd.mm.yyyy og er satt i settingen DATESTYLE (european). Innholdet i attributtet nasjonalitet vil inneholde verdier av variabel lengde og vi har derfor valgt å bruke datatypen VARCHAR. Feltet har en maksimallengde på 35 tegn. Siden dette feltet må inneholde en verdi er det spesifisert som NOT NULL. CREATE TABLE person ( id SERIAL, enavn VARCHAR(30) NOT NULL, fnavn VARCHAR(25), fodselsdato DATE, dodsdato DATE, nasjonalitet VARCHAR(35) NOT NULL, PRIMARY KEY (id) ); Moderne Databaseteknologi, Høgskolen i Østfold

19 3.8.5 Tabellen forfatter Tabellen forfatter har 1 attributt. id som er av typen SERIAL er unik og er derfor satt til PN. Tabellen forfatter skal arve alle attributtene til tabellen person og dette gjøres ved spesifikasjonen INHERITS(person). CREATE TABLE forfatter ( id SERIAL, PRIMARY KEY (id) )INHERITS (person); Tabellen artist Tabellen forfatter har 1 attributt. id som er av typen SERIAL er unik og er derfor satt til PN. Tabellen artist skal arve alle attributtene til tabellen person og dette gjøres ved spesifikasjonen INHERITS(person). CREATE TABLE artist ( id SERIAL, PRIMARY KEY (id) ) INHERITS (person); Tabellen sangforfatter Tabellen forfatter har 2 attributter. Attributtet sangid som er FK i denne tabellen er av datatypen INT. Vi har ikke spesifisert noe maksimalgrense siden vi ikke kan vite hvor stor den kan være/vil bli. Attributtet sangid referere til PN id i tabellen sang. Hvis attributtet id oppdateres/slettes i tabellen sang vil attributtet sangid i tabellen sangforfatter også oppdateres/slettes. Attributtet personid som er FK i denne tabellen er av datatypen INT. Vi har ikke spesifisert noe maksimalgrense siden vi ikke kan vite hvor stor den kan være/vil bli. personid referere til PN id i tabellen forfatter. Hvis attributtet id oppdateres/slettes i tabellen forfatter vil attributtet personid i tabellen sangforfatter også oppdateres/slettes. CREATE TABLE sangforfatter ( sangid INT, personid INT, FOREIGN KEY (sangid) REFERENCES sang(id) ON UPDATE CASCADE ON DELETE CASCADE, FOREIGN KEY (personid) REFERENCES forfatter(id) ON UPDATE CASCADE ON DELETE CASCADE ); Tabellen versjoncdartist Tabellen versjoncdartist har 4 attributter. Attributtet cdid som er FK i denne tabellen er av datatypen INT. Vi har ikke spesifisert noe maksimalgrense siden vi ikke kan vite hvor stor den kan være/vil bli. cdid referere til PN id i tabellen cd. Hvis attributtet id oppdateres/slettes i tabellen cd vil attributtet cdid i tabellen versjoncdartist også oppdateres/slettes. Moderne Databaseteknologi, Høgskolen i Østfold

20 Attributtet versjonid som er FK i denne tabellen er av datatypen INT. Vi har ikke spesifisert noe maksimalgrense siden vi ikke kan vite hvor stor den kan være/vil bli. versjonid referere til PN id i tabellen versjon. Hvis attributtet id oppdateres/slettes i tabellen versjon vil attributtet versjonid i tabellen versjoncdartist også oppdateres/slettes. Attributtet personid som er FK i denne tabellen er av datatypen INT. Vi har ikke spesifisert noe maksimalgrense siden vi ikke kan vite hvor stor den kan være/vil bli. personid referere til PN id i tabellen artist. Hvis attributtet id oppdateres/slettes i tabellen artist vil attributtet personid i tabellen versjoncdartist også oppdateres/slettes. Attributtet hovedbiartist har en fast lengde på 1 tegn, H h eller B b. En versjon må ha en hovedartist derfor er feltet spesifisert som NOT NULL. CREATE TABLE versjoncdartist ( cdid INT, versjonid INT, personid INT, hovedbiartist CHAR(1) NOT NULL, FOREIGN KEY (cdid) REFERENCES cd(id) ON UPDATE CASCADE ON DELETE CASCADE, FOREIGN KEY (versjonid) REFERENCES versjon(id) ON UPDATE CASCADE ON DELETE CASCADE, FOREIGN KEY (personid) REFERENCES artist(id) ON UPDATE CASCADE ON DELETE CASCADE ); Tabellen versjonkom_log Oppretter tabellen versjonkom_log med 4 attributter. id blir automatisk unik og er derfor satt til PN. En kommentar til en versjon kan bestå av ulik antall tegn og vi har derfor valgt å bruke datatypen VARCHAR til dette attributtet. Hver kommentar kan maksimalt inneholde 200 tegn. Attributtet log_hvem vil inneholde tekst med variabel lengde og vi har derfor valgt datatypen TEXT. Attributtet log_tid skal inneholde tidspunktet der og da og det var da naturlig å bruke TIMESTAMP. CREATE TABLE versjonkom_log ( id SERIAL, versjonkom VARCHAR (200), log_hvem TEXT, log_tid TIMESTAMP, PRIMATY KEY (id) ); Moderne Databaseteknologi, Høgskolen i Østfold

21 3.9 Server-side trigger funksjoner På tabellen cd Denne TRIGGER-funksjonen skal sikre at når du oppdaterer eller setter inn verdier i attributtet cdutaar i tabellen cd, så kan verdien kun består av tall mellom 1965 og dagens dato. Funksjonen heter trigger_insert_update_cd. Den første IF-testen sjekker om attributtet cdutaar inneholder andre tegn enn tall. Hvis IF-testen slår til skrives det ut Årstallet kan kun bestå av tall. Den andre IF-testen sjekker om attributtet cdutaar er mindre enn 1965 eller større en dagens dato. Hvis IF-testen slår til skrives det ut Årstallet må være fra 1965 frem til året i år.. Språket som brukes er plpgsql. CREATE FUNCTION trigger_insert_update_cd() RETURNS opaque AS 'BEGIN IF new.cdutaar!~ ''^[0-9][0-9][0-9][0-9]$'' THEN RAISE EXCEPTION ''Årstallet kan kun bestå av tall.''; END IF; IF new.cdutaar NOT BETWEEN 1965 AND CURRENT_DATE THEN RAISE EXCEPTION ''Årstallet må være fra 1965 frem til året i år.''; END IF; RETURN new; END;' LANGUAGE 'plpgsql'; Oppretter TRIGGER som heter trigger_statement_cd. Denne TRIGGER kjøres før du kan sette inn eller oppdatere rader i tabellen cd. Kaller funksjonen trigger_insert_update_cd(). CREATE TRIGGER trigger_statement_cd BEFORE INSERT OR UPDATE ON cd FOR EACH ROW EXECUTE PROCEDURE trigger_insert_update_cd(); Test INSERT INTO cd (cdtittel, cdutaar, cdkom, cdbilde) VALUES('Unplugged','t195','{"Loep aa kjøp"}', lo_import('/home/studenter/it00/kjellggu/database2003/blobs/bilder/unplugged_n eil.jpg')); ERROR: Årstallet kan kun bestå av tall. Test INSERT INTO cd (cdtittel, cdutaar, cdkom, cdbilde) VALUES('Unplugged','1950','{"Loep aa kjøp"}', lo_import('/home/studenter/it00/kjellggu/database2003/blobs/bilder/unplugged_n eil.jpg')); ERROR: ''Årstallet må være fra 1965 frem til året i år Moderne Databaseteknologi, Høgskolen i Østfold

22 3.9.2 På tabellen versjon Denne TRIGGER-funksjonen skal sikre at når du oppdatere eller setter inn verdier i attributtet versjonutgave i tabellen versjon, så kan verdien kun bestå av S studio eller L live. Funksjonen heter trigger_insert_update_versjon. IF-testen sjekker om attributtet cdutaar inneholder andre ting enn S studio eller L live. Hvis IF-testen slår til skrives det ut ''Kan kun ha disse 2 utgavene, studio eller live.. initcap setter stor forbokstav. Språket som brukes er plpgsql. CREATE FUNCTION trigger_insert_update_versjon() RETURNS opaque AS 'BEGIN IF new.versjonutgave!~ ''[Ss]tudio [Ll]ive'' THEN RAISE EXCEPTION ''Kan kun ha disse 2 utgavene, studio eller live.''; END IF; new.versjonutgave = initcap(new.versjonutgave); RETURN new; END;' LANGUAGE 'plpgsql'; Oppretter TRIGGER som heter trigger_statement_versjon. Denne TRIGGER kjøres før du kan sette inn eller oppdatere rader i tabellen versjon. Kaller funksjonen trigger_insert_update_versjon(). CREATE TRIGGER trigger_statement_versjon BEFORE INSERT OR UPDATE ON versjon FOR EACH ROW EXECUTE PROCEDURE trigger_insert_update_versjon(); Test INSERT INTO versjon (versjonutgave, versjonkom, versjonlengde, versjonsnutt, sangid) VALUES('Remix','','3:05','',70); ERROR: Kan kun ha disse 2 utgavene, studio eller live. Moderne Databaseteknologi, Høgskolen i Østfold

23 3.9.3 På tabellen forfatter og artist Denne TRIGGER-funksjonen skal sikre at når du oppdatere eller setter inn verdier i attributtet nasjonalitet i tabellene artist og forfatter, så kan verdien kun inneholde bokstaver. Funksjonen heter trigger_insert_update_forfatterartist. IF-testen sjekker om attributtet nasjonalitet inneholder andre ting enn bokstaver. Hvis IF-testen slår til skrives det ut ''Nasjonalitet kan kun inneholde bokstaver.''. Språket som brukes er plpgsql. CREATE FUNCTION trigger_insert_update_forfatterartist() RETURNS opaque AS 'BEGIN IF new.nasjonalitet!~ ''^[A-Za-z]*$'' THEN RAISE EXCEPTION ''Nasjonalitet kan kun inneholde bokstaver.''; END IF; RETURN new; END;' LANGUAGE 'plpgsql'; Oppretter TRIGGERE som heter trigger_statement_ forfatter / trigger_statement_artist. Disse TRIGGERE kjøres før du kan sette inn eller oppdatere rader i tabellen forfatter / artist. Kaller funksjonen trigger_insert_update_forfatterartist(). CREATE TRIGGER trigger_statement_forfatter BEFORE INSERT OR UPDATE ON forfatter FOR EACH ROW EXECUTE PROCEDURE trigger_insert_update_forfatterartist(); CREATE TRIGGER trigger_statement_artist BEFORE INSERT OR UPDATE ON artist FOR EACH ROW EXECUTE PROCEDURE trigger_insert_update_forfatterartist(); Test Tabellen artist INSERT INTO artist (enavn, fnavn, fodselsdato, dodsdato, nasjonalitet) VALUES('Pickett','Wilson',' ', null,'1938'); ERROR: Nasjonalitet kan kun inneholde bokstaver. Tabellen forfatter INSERT INTO forfatter (enavn, fnavn, fodselsdato, dodsdato, nasjonalitet) VALUES('Gates','Adam',' ', null,'2i01'); ERROR: Nasjonalitet kan kun inneholde bokstaver. Moderne Databaseteknologi, Høgskolen i Østfold

24 3.9.4 På tabellen versjoncdartist Denne TRIGGER-funksjonen skal sikre at når du oppdatere eller setter inn verdier i attributtet hovedbiartist i tabellen versjoncdartist, så kan kun verdien inneholde H h eller B b. Funksjonen heter trigger_insert_ update_versjoncdartist. IF-testen sjekker om attributtet hovedbiartist inneholder andre ting enn bokstavene H h og B b. Hvis IF-testen slår til skrives det ut ''HovedBiArtist skal enten inneholde H eller B.''. upper setter stor bokstav. Språket som brukes er plpgsql. CREATE FUNCTION trigger_insert_update_versjoncdartist() RETURNS opaque AS 'BEGIN IF new.hovedbiartist!~ ''[Hh] [Bb]$'' THEN RAISE EXCEPTION ''HovedBiArtist skal enten inneholde H eller B.''; END IF; new.hovedbiartist = upper(new.hovedbiartist); RETURN new; END;' LANGUAGE 'plpgsql'; Oppretter TRIGGERE som heter trigger_statement_versjoncdartist. Denne TRIGGER kjøres før du kan sette inn eller oppdatere rader i tabellen versjoncdartist. Kaller funksjonen trigger_insert_update_versjoncdartist (). CREATE TRIGGER trigger_statement_versjoncdartist BEFORE INSERT OR UPDATE ON versjoncdartist FOR EACH ROW EXECUTE PROCEDURE trigger_insert_update_versjoncdartist(); Test INSERT INTO versjoncdartist (cdid, versjonid, personid, hovedbiartist) VALUES(2,17,4,'S'); ERROR: HovedBiArtist skal enten inneholde H eller B. Moderne Databaseteknologi, Høgskolen i Østfold

25 3.9.5 Check-statements Istedenfor å lage triggers kan man også legge inn checkstatements i CREATE TABLE. Utdrag av de ulike CREATE TABLE statementene Lager en CHECK som sjekker om innholdet i attributtet cdutaar i tabellen cd ligger mellom 1965 og dagens dato. CREATE TABLE cd ( cdutaar CHAR(4) NOT NULL CHECK (cdutaar BETWEEN '1965' AND CURRENT_DATE), ); Lager en CHECK som sjekker om innholdet i attributtet versjonutgave i tabellen versjon består av enten Studio eller Live. CREATE TABLE versjon ( versjonutgave CHAR(6) NOT NULL CHECK (versjonutgave IN ('Studio', 'Live'), ); Lager en CHECK som sjekker om innholdet i attributtet hovedbiartist i tabellen versjoncdartist består av enten H eller B. CREATE TABLE versjoncdartist (. hovedbiartist CHAR(1) NOT NULL CHECK (hovedbiartist IN ('H', 'B') ); Moderne Databaseteknologi, Høgskolen i Østfold

26 3.10 Utdrag fra DROP FUNCTION, TRIGGER, TABLE, SEQUENCE og RULES Under har vi tatt med noen eksempler på DROP statements som sletter ulikt innhold i databasen. Her slettes spesifisert funksjon og trigger. ON cd spesifiserer at triggeren er opprettet mot tabellen cd. - DROP FUNCTION trigger_insert_update_cd(); - DROP TRIGGER trigger_statement_cd ON cd; Under slettes tabellene sangforfatter og sang. Hvis det er to tabeller som er koblet sammen med PN og FN må man slette tabellen med PN først. DROP table sangforfatter; DROP table sang; Sekvensene som blir opprettet når man benytter datatypen SERIAL må slettes manuelt etter at tabellene er slettet. - DROP SEQUENCE sang_id_seq; Sletter regelene versjonkom_regel og beskytt_cd. - DROP RULE versjonkom_regel; - DROP RULE beskytt_cd; Moderne Databaseteknologi, Høgskolen i Østfold

27 4. Utdrag over innholdet i tabellene 4.1 Tabellen cd Setter inn verdier i attributtene cdtittel, cdutaar, cdkom og cdbilde i tabellen cd. Tabellen har også atributtet id, men id har datatype SERIAL og får automatisk tildelt en verdi. Verdien til cdkom må skrives inne i { } siden datatypen til cdkom er en array. Verdien til cdbilde er en filsti som spesifisere hvor bildet ligger. INSERT INTO cd (cdtittel, cdutaar, cdkom, cdbilde) VALUES('Tapestry','1971','{"Rock pa sitt beste", "Denne må du høre"}', lo_import('/home/studenter/it00/kjellggu/database2003/blobs/bilder/tapestry.jpg' )); INSERT INTO cd (cdtittel, cdutaar, cdkom, cdbilde) VALUES('Unplugged','1993','{"Loep aa kjøp"}', lo_import ('/home/studenter/it00/kjellggu/database2003/blobs/bilder/unplugged_neil.jpg')); 4.2 Tabellen sang Setter inn verdier i attributtet sangtittel i tabellen sang. Tabellen har også atributtet id, men id har datatype SERIAL og får automatisk tildelt en verdi. INSERT INTO sang (sangtittel) VALUES('I Feel the Earth Move'); INSERT INTO sang (sangtittel) VALUES('So Far Away'); 4.3 Tabellen versjon Setter inn verdier i attributtene versjonutgave, versjonkom, versjonlengde, versjonsnutt og sangid i tabellen versjon. Tabellen har også atributtet id, men id har datatype SERIAL og får automatisk tildelt en verdi. Verdien til versjonlengde innholder en tidsenhet skilt med : (2 minutter:58 sekunder). Verdien til versjonsnutt er en filsti som spesifiserer hvor lydklippet ligger. INSERT INTO versjon (versjonutgave, versjonkom, versjonlengde, versjonsnutt, sangid) VALUES ('studio','','2:58',lo_import('/home/studenter/it00/kjellggu/ database2003/blobs/lyd/carole_king_i_feel_the_earth_move.ra'),1); INSERT INTO versjon (versjonutgave, versjonkom, versjonlengde, versjonsnutt, sangid) VALUES('Studio','','3:55',lo_import('/home/studenter/it00/kjellggu/database2003/ blobs/lyd/carole_king_so_far_away.ra'),2); Moderne Databaseteknologi, Høgskolen i Østfold

28 4.4 Tabellen forfatter Setter inn verdier i attributtene enavn, fnavn, fodselsdato, dodsdato og nasjonalitet i tabellen forfatter. Tabellen har også atributtet id, men id har datatype SERIAL og får automatisk tildelt en verdi. Verdien til fodselsdato innholder en tidsenhet skilt med punktum (dd.mm.åååå). INSERT INTO forfatter (enavn, fnavn, fodselsdato, dodsdato, nasjonalitet) VALUES('King','Carole',' ', null,'usa'); INSERT INTO forfatter (enavn, fnavn, fodselsdato, dodsdato, nasjonalitet) VALUES('Wexler','Dan',' ', null,'kanada'); 4.5 Tabellen artist Setter inn verdier i attributtene enavn, fnavn, fodselsdato, dodsdato og nasjonalitet i tabellen artist. Tabellen har også atributtet id, men id har datatype SERIAL og får automatisk tildelt en verdi. Verdien til fodselsdato innholder en tidsenhet skilt med punktum (dd.mm.åååå). INSERT INTO artist (enavn, fnavn, fodselsdato, dodsdato, nasjonalitet) VALUES('King','Carole',' ', null,'usa'); INSERT INTO artist (enavn, fnavn, fodselsdato, dodsdato, nasjonalitet) VALUES('Wexler','Dan',' ', null,'kanada'); 4.6 Tabellen versjoncdartist Setter inn verdier i attributtene cdid, versjonid, personid og hovedbiartist i tabellen versjoncdartist. INSERT INTO versjoncdartist (cdid, versjonid, personid, hovedbiartist) VALUES (1,1,1,'H'); INSERT INTO versjoncdartist (cdid, versjonid, personid, hovedbiartist) VALUES(1,2,1,'H'); 4.7 Tabellen sangforfatter Setter inn verdier i attributtene sangid og personid i tabellen sangforfatter. INSERT INTO sangforfatter (sangid, personid) VALUES(1,1); INSERT INTO sangforfatter (sangid, personid) VALUES(2,1); Moderne Databaseteknologi, Høgskolen i Østfold

29 5. Rules Som tidligere nevnt i oppgaven (kapitel 3.7.7) fungerer regler (rules) fint når man skal kontrollere hva som blir gjort med databasen. Vi har lagd en regel som fører en logg over endringer til versjonskommentarer. Det som blir logget er hvem som utfører endringen, når endringen blir gjort samt ID og kommentaren. Kort beskrivelse av funksjonalitet: - AS ON UPDATE TO -> Hvis versjon blir oppdatert så blir regelen kjørt - WHERE -> Kontrollerer at den gamle versjonskommentaren ikke er lik den nye versjonskommentaren - DO INSERT INTO -> Legger de nye verdiene inn i loggen - VALUES (New.id ) -> Det er disse verdiene som blir lagt inn i loggen CREATE RULE versjonkom_regel AS ON UPDATE TO versjon WHERE NEW.versjonKom!= OLD.versjonKom DO INSERT INTO versjonkom_log VALUES ( NEW.id, NEW.versjonKom, current_user, current_timestamp ); Under har vi laget en regel som kontrollerer at brukeren ikke får slette de 5 første cd-ene i databasen. Dette er ingen nyttig funksjon i vår database, men bare et eksempel på hvilke muligheter man har med regler i postgresql. Kort beskrivelse av funksjonalitet: - DO INSTEAD -> Hvis id er mindre enn 5, så blir det skrevet ut UPDATE 0 (ikke oppdatert). Hvis ID er større enn 5 så skrives det ut UPDATE 1 (oppdatert) CREATE RULE beskytt_cd AS ON UPDATE TO cd WHERE old.id < 5 DO INSTEAD nothing; Moderne Databaseteknologi, Høgskolen i Østfold

30

31 6. SQL spørringer Under har vi tatt med et utvalg spørringer for å vise databasens funksjonalitet. Vi starter med noen enkle spørringer på enkle tabeller, for så å ta med noen spørringer med noe mer kompleks funksjonalitet. 1. Skriv ut alle cd-er i databasen. En enkel spørring som egentlig ikke inneholder funksjonalitet som behøver å forklares nærmere. Tegnet * er synonymt med ALL. Ved å bruke tegnet * får vi ut alle kolonnenavnene. Innholdet i arrayen blir presentert i klammene { } og cdbilde viser OID til hvert bilde. SELECT * FROM cd; id cdtittel cdutaar cdkom cdbilde Tapestry 1971 {"Rock pa sitt beste","denne må du høre"} Unplugged 1993 {"Loep aa kjøp"} Rust Never Sleeps 1967 {Yeah,"Mye musikk for få penger"} Greatest Hits 1976 {"La oss danse","la oss rocke"} Live at the Fillmore West 1971 {"Hennes beste","ikke verd penger"} Tom Jones Hits 2000 {"Tom Jones på sitt verste","sure penger"} Moderne Databaseteknologi, Høgskolen i Østfold

32 2. Skriv ut alle artister i databasen. Spørring som viser arv mellom tabeller. Det er kun attributtet id som ligger i tabellen artist. Resten av attributtene arves fra tabellen person. SELECT * FROM artist; id enavn fnavn fodselsdato dodsdato nasjonalitet King Carole USA 2 Wexler Dan Kanada 3 Sky Amy USA 4 Young Neil Kanada 5 Larson Nicolette USA 6 Osborne Joe USA 7 Pickett Wilson USA 8 Womack Aaron England 9 Leakes Jerry USA 10 Moore Brew USA 11 Drayton Charley England 12 Turner Hughes USA 13 Franklin Aretha USA 14 Charles Ray USA 15 Jones Tom England 16 Spector Phil USA 17 Mann Barry USA 18 Knight Gladys USA Moderne Databaseteknologi, Høgskolen i Østfold

33 3. Skriv ut alle sangforfattere i databasen. Spørring lik den i forrige eksempel, det vil si viser arv mellom tabellene forfatter og person. SELECT * FROM forfatter; id enavn fnavn fodselsdato dodsdato nasjonalitet King Carole USA 2 Wexler Dan Kanada 3 Young Neil Kanada 4 Pickett Wilson USA 5 Kenner Chris USA 6 Russell Alan USA 7 Field Rice England 8 Adams Christian USA 9 Womack Aaron England 10 Collins Allen USA 11 Browne Jackson Tyskland 12 McCartney Paul England 13 Holland Adam England 14 Andy Kim Kanada 15 Bellman David Skottland 16 Huff Bill Kanada 17 Shapiro Ben USA 18 Newman Andy USA 19 West David England 20 Sanders Adams Kanada 21 Franklin Aretha USA 22 Redding Otis USA 23 Stills Stephen USA 24 Simon Paul USA 25 Gates Adam USA 26 Ertegun Ahmet Tyrkia 27 Simpson Ray USA 28 Jones Tom England 29 Anka Paul Kanada 30 Rabbitt Eddie USA 31 Reed Lou USA 4. Hvor mange cd-er finnes i databasen? Enkel spørring som teller antall cd-er i databasen ved hjelp av aggregate funksjonen COUNT. Nøkkelordet AS gjør det mulig å bestemme navnet på egne overskrifter, her antallcd SELECT count(id) AS antallcd FROM cd; antallcd Moderne Databaseteknologi, Høgskolen i Østfold

34 5. List alle cd-ene sortert på tittel Spørring som lister ut alle cd-titlene i databasen sortert stigende (default) ved hjelp av funksjonen ORDER BY. Det er kun mulig å bruke ORDER BY på kolonner som er spesifisert i SELECT, her cdtittel. SELECT cdtittel AS Tittel from cd ORDER BY cdtittel; tittel Greatest Hits Live at the Fillmore West Rust Never Sleeps Tapestry Tom Jones Hits Unplugged 6. Hvilke cd-er ble gitt ut i 1976? Finner cd-er utgitt i 1976 ved hjelp av WHERE. SELECT cdtittel FROM cd WHERE cdutaar = '1976'; cdtittel Greatest Hits 7. Hvilke cd-er ble gitt ut i perioden ? Spørring som gir alle cd-er som er gitt ut fra og med 1990 til og med Bruker BETWEEN for å få til dette. SELECT cdtittel FROM cd WHERE cdutaar BETWEEN '1990' AND 1995 ; cdtittel Unplugged Moderne Databaseteknologi, Høgskolen i Østfold

35 8. Hvilke låter har lengde på mer enn 5 minutter? Vår første spørring der vi joiner to tabeller (sang og versjon) for å få frem ønsket informasjon. Setter alias til begge tabellene, s til sang og v til versjon. Disse aliasene brukes for å få en enklere og renere syntaks. WHERE sjekker at id i tabellene sang (s) og versjon (v) er den samme. Dette gjøres for å få frem korrekt resultat og for å unngå og få kartesisk produkt. SELECT sangtittel, versjonlengde FROM sang s, versjon v WHERE s.id = v.sangid AND v.versjonlengde > '05:00'; sangtittel versjonlengde You have Got a Friend 05:09:00 The Old Laughing Lady 05:15:00 Pocahontas 05:06:00 Helpless 05:48:00 Harvest Moon 05:20:00 Look Out for My Love 05:57:00 Long May You Run 05:22:00 From Hank to Hendrix 05:51:00 Thrasher 05:38:00 Powderfinger 05:30:00 Hey Hey My My (Into the Black) 05:18:00 Get Me Back on Time, Engine Number 9 06:23:00 9. Hvor mange låter har Neil Young sunget? I denne spørringen må vi ha to joins for å få korrekt resultat. Tabellene cd og artist ligger på hver sin side av den svake entiteten versjoncdartist (vca). vca er kun med i databasen for å unngå mange til mange forhold mellom cd og artist (samt versjon). SELECT count(cdid) AS Antall FROM cd, versjoncdartist vca, artist a WHERE a.fnavn = 'Neil' AND a.enavn = 'Young' AND cd.id = vca.cdid AND vca.personid = a.id; antall Moderne Databaseteknologi, Høgskolen i Østfold

1. SQL datadefinisjon og manipulering

1. SQL datadefinisjon og manipulering Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag SQL datadefinisjon og manipulering Tore Mallaug 7.10.2008 Lærestoffet er utviklet for faget Databaser 1. SQL datadefinisjon og manipulering

Detaljer

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

SQL: Datatyper m.m. Evgenij Thorstensen V18. Evgenij Thorstensen SQL: Datatyper m.m. V18 1 / 12 SQL: Datatyper m.m. Evgenij Thorstensen V18 Evgenij Thorstensen SQL: Datatyper m.m. V18 1 / 12 Datatyper, kort om mye Vi går en rask ekskursjon i manualen, Kap. 8. https://www.postgresql.org/docs/9.2/sql.html

Detaljer

Tilkobling og Triggere

Tilkobling og Triggere Tilkobling og Triggere Lars Vidar Magnusson October 12, 2011 Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 12, 2011 1 / 25 Tilkobling med PHP PHP bruker databasespesifike moduler til å koble

Detaljer

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

Databaser. Relasjonsmodellen 1 Læreboka: Kap. 2 Relasjonsmodellen Faglærere: Tore Mallaug, Kjell Toft Hansen Databaser Relasjonsmodellen 1 Læreboka: Kap. 2 Relasjonsmodellen Faglærere: Tore Mallaug, Kjell Toft Hansen Tema for dagen Relasjonsmodellen Hvorfor relasjoner? Fra ER diagram til relasjoner 22.09.2008

Detaljer

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

SQL Structured Query Language. Definere tabeller Skranker Fylle tabeller med data SQL Structured Query Language Definere tabeller Skranker Fylle tabeller med data Lage en tabell med SQL create table R (A 1 D 1 [S 1 ],... A n D n [S n ], [liste av skranker] R er navnet på relasjonen/tabellen

Detaljer

Metaspråket for å beskrive grammatikk

Metaspråket for å beskrive grammatikk 1 SQL-syntaks Korrekt språkbruk bygger på et sett av regler. Eksempler: En SQL utvalgsspørring inneholder alltid ordene SELECT og FROM, mens WHERE og tilhørende betingelse er valgfri. Etter SELECT kan

Detaljer

Integritetsregler i SQL. Primærnøkler

Integritetsregler i SQL. Primærnøkler Integritetsregler i SQL Kandidat- og primærnøkler Referanseintegritet - fremmednøkler Domenebegrensende integritetsregler skranker på attributter og tupler Interrelasjonsskranker assertions Triggere INF212

Detaljer

Integritetsregler i SQL

Integritetsregler i SQL UNIVERSITETET I OSLO Integritetsregler i SQL INF3100 8.2.2005 Ragnar Normann 1 Integritetsregler i SQL Kandidat- og primærnøkler Referanseintegritet - fremmednøkler Domenebegrensende integritetsregler

Detaljer

Oppgaver Oppgave a: Sett opp mulige relasjoner

Oppgaver Oppgave a: Sett opp mulige relasjoner Løsningsforslag til øving 4: Relasjonsmodellen Kjell Toft Hansen 18.09.2008 Opphavsrett: Forfatter og AITeL Lærestoffet er utviklet for faget LO151D Informatikk 1: databaser Oppgaver Oppgave a: Sett opp

Detaljer

SQL 3: Opprette tabeller, datainnsetting og utsnitt

SQL 3: Opprette tabeller, datainnsetting og utsnitt SQL 3: Opprette tabeller, datainnsetting og utsnitt Læreboka kap. 4 03.11.2008 Kjell Toft Hansen 1 Datainnsetting Legg til en ny leverandor i tabellen leverandor INSERT INTO leverandor (lev_nr, lev_navn,

Detaljer

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

Prosedyrer. Lars Vidar Magnusson. October 26, Lars Vidar Magnusson () Forelesning i DAS October 26, / 19 Prosedyrer Lars Vidar Magnusson October 26, 2011 Lars Vidar Magnusson () Forelesning i DAS 11.10.2011 October 26, 2011 1 / 19 Repetisjon om triggere og prosedyrer Triggere og prosedyrer ligner på hverandre

Detaljer

Datamodellering og databaser http://www.aitel.hist.no/fag/_dmdb/ SQL, del 2

Datamodellering og databaser http://www.aitel.hist.no/fag/_dmdb/ SQL, del 2 http://www.aitel.hist.no/fag/_dmdb/ SQL, del 2 Eksempelbase side 2 Virtuelle tabeller (views) side 3-6 NULL-verdier side 7-14 UPDATE-setningen side 15-16 INSERT-setningen side 17 DELETE-setningen side

Detaljer

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

INF 329: Web-Teknologier. Dataimplementasjon. Fra Kapittel 11 i «Designing Data-Intensive Web Applications» Presentasjonsdato: 17/10/2004 INF 329: Web-Teknologier Dataimplementasjon Fra Kapittel 11 i «Designing Data-Intensive Web Applications» Presentasjonsdato: 17/10/2004 av: Dag Viggo Lokøen (dagvl@ii.uib.no) Kent Inge F. Simonsen (kentis@ii.uib.no)

Detaljer

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

Objektorientering i ER-modeller EER-modeller Enhanced Entity Relationship Models LC238D Datamodellering og databaser http://www.aitel.hist.no/fag/_dmdb/ Objektorientering i ER-modeller EER-modeller Enhanced Entity Relationship Models Oppsummering: Å oversette fra ER- til relasjonsmodell

Detaljer

Databaser: Relasjonsmodellen, del I

Databaser: Relasjonsmodellen, del I LC238D http://www.aitel.hist.no/fag/_dmdb/ Databaser: Relasjonsmodellen, del I En relasjon er en matematisk mengde side 2 Egenskaper ved relasjoner side 3 Entitetsintegritet side 4-5 Referanseintegritet

Detaljer

Integritetsregler i SQL

Integritetsregler i SQL UNIVERSITETET I OSLO Integritetsregler i SQL Institutt for Informatikk INF3100 13.2.2007 Ellen Munthe-Kaas 1 Integritetsregler i SQL Kandidat- og primærnøkler Referanseintegritet - fremmednøkler Domenebegrensende

Detaljer

Miniverden og ER- modell

Miniverden og ER- modell TDT4145 Datamodellering og databasesystemer SQL- oppgave 1 Miniverden og ER- modell Vi tar utgangspunkt i en enkel modell for en pizza- restaurant, der følgende ER- diagram beskriver databasen: Relasjonsdatabase-

Detaljer

Repetisjon: Normalformer og SQL

Repetisjon: Normalformer og SQL IN2090 databaser og datamodellering Repetisjon: Normalformer og SQL Mathias Stang og Stein Michael Storleer 21. november 2018 1 Agenda Normalformer Funksjonelle avhengigheter Nøkler Finne hvilke normalformer

Detaljer

1. SQL spørringer mot flere tabeller

1. SQL spørringer mot flere tabeller 1. SQL spørringer mot flere tabeller Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag SQL spørringer mot flere tabeller Tore Mallaug 29.9.2008 Lærestoffet er utviklet for faget Databaser

Detaljer

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

Institutt for datateknikk. Fag TDT4145 Datamodellering og databasesystemer Løsningsforslag til øving 3: Algebra og SQL NTNU Norges teknisk-naturvitenskapelige Universitet Institutt for datateknikk og informasjonsvitenskap Fag TDT4145 Datamodellering og databasesystemer Løsningsforslag til øving 3: Algebra og SQL Side 1

Detaljer

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

Sensorveiledning for IN2090 og INF desember :30 18:30 (4 timer) Sensorveiledning for IN2090 og INF1300 6. desember 2018 14:30 18:30 (4 timer) 1. Eksterne skranker (5%) I modellene nedenfor (ORM2) skal du anta at alle begreper har en unik representasjon. Er plasseringen

Detaljer

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

TDT4102 Prosedyre og Objektorientert programmering Vår 2014 Norges teknisk naturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap TDT4102 Prosedyre og Objektorientert programmering Vår 2014 Øving 10 Frist: 2014-04-11 Mål for denne øvinga:

Detaljer

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

En liten rekap. Spørrespråk. I dag SELECT [Kurssidene] [ ABI - fagsider bibin ] Michael Preminger (michaelp@hioa.no) 06/11-15 Databaser høsten 2015 En liten rekap ER-diagram - vi modellerer dataene våre til danne best mulig grunnlag for informasjonen

Detaljer

Oppgave 1 (Opprett en database og en tabell)

Oppgave 1 (Opprett en database og en tabell) Oppgave 1 (Opprett en database og en tabell) 1) I «Object Explorer» (i «SQL Server Management Studio»), høyreklikk over Databases : 1 2 2) Skriv så databasenavnet og klikk OK: 3) Plasser så kursoren på

Detaljer

Datamodellering og databaser SQL, del 2

Datamodellering og databaser  SQL, del 2 http://www.aitel.hist.no/fag/_dmdb/ SQL, del 2 Eksempelbase side 2 Virtuelle tabeller (views) side 3-6 NULL-verdier side 7-14 UPDATE-setningen side 15-16 INSERT-setningen side 17 DELETE-setningen side

Detaljer

Databaser & objektorientering.

Databaser & objektorientering. Databaser & objektorientering. Noen grunnbegreper innen objektorientering. Klasser og forekomster klasser beskriver strukturen for noe. Beskrivelsen inneholder: et navn attributter /egenskaper / tilstander

Detaljer

Høgskolen i Telemark EKSAMEN 6102 DATABASER 10.12.2015. Tid: 10-14. Hjelpemidler: Vedlegg: Eksempeldata til oppgave 1

Høgskolen i Telemark EKSAMEN 6102 DATABASER 10.12.2015. Tid: 10-14. Hjelpemidler: Vedlegg: Eksempeldata til oppgave 1 Høgskolen i Telemark EKSAMEN 6102 DATABASER 10.12.2015 Tid: 10-14 Målform: Sidetall: Hjelpemidler: Merknader: Bokmål/nynorsk 13 med forside Ingen Ingen Vedlegg: Eksempeldata til oppgave 1 Eksamensresultater

Detaljer

TDT4102 Prosedyreog objektorientert programmering Vår 2016

TDT4102 Prosedyreog objektorientert programmering Vår 2016 Norges teknisk naturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap TDT4102 Prosedyreog objektorientert programmering Vår 2016 Øving 4 Frist: 2016-02-12 Mål for denne øvingen:

Detaljer

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

ITGK - H2010, Matlab. Dagens tema : Teori - Databaser 1 ITGK - H2010, Matlab Dagens tema : Teori - Databaser 2 I dag Teori: Databaser Bok: 8.1 8.2 (8.1-8.4 i gamle bøker) Læringsmål Lære det grunnleggende om databaser Lære det grunnleggende om databasedesign

Detaljer

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

INF1300 SQL Structured Query Language del 1. Stoff som blir/ble forelest i oktober 2013 INF1300 SQL Structured Query Language del 1 Stoff som blir/ble forelest i oktober 2013 Dagens tema SQLs definisjonsspråk SQLs spørrespråk select-from-where distinct order by SQLs manipulasjonsspråk Indekser

Detaljer

Datamodellering 101 En tenkt høgskoledatabase

Datamodellering 101 En tenkt høgskoledatabase Datamodellering 101 En tenkt høgskoledatabase Spesifikasjoner for databasen vi skal modellere: Oversikt over studenter med: Fullt navn Klasse Studium Avdeling Brukernavn Fødselsdag Adresse Telefonnummer

Detaljer

Datamodellering og databaser SQL, del 2

Datamodellering og databaser  SQL, del 2 http://www.aitel.hist.no/fag/_dmdb/ SQL, del 2 Eksempelbase side 2 Virtuelle tabeller (views) side 3-6 NULL-verdier side 7-14 UPDATE-setningen side 15-16 INSERT-setningen side 17 DELETE-setningen side

Detaljer

Databaser kort intro. Tom Heine Nätt

Databaser kort intro. Tom Heine Nätt Databaser kort intro Tom Heine Nätt Agenda Hva er en database? Hva er SQL? Hente ut data fra en database SELECT Behandle data i en database (kort) CREATE TABLE, INSERT, UPDATE, DELETE Databaser med flere

Detaljer

Utvikling fra kjernen og ut

Utvikling fra kjernen og ut Utvikling fra kjernen og ut PHP-arkitektur Brukergrensesnitt! inn ut Dynamisk web-side bygges opp på grunnlag av spørring mot databasen Utviklingsretning Applikasjon Virkelighetsmodell Plattform Bruker

Detaljer

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

Ekstramateriale: Eksempel på PostgreSQL 8.4 og SQL:1999 (ikke pensum 2012) UNIVERSITETET I OSLO Ekstramateriale: Eksempel på PostgreSQL 8.4 og SQL:1999 (ikke pensum 2012) Institutt for Informatikk INF3100 17.4.2012 Ellen Munthe-Kaas 1 UDTer Distinkt UDT i Postgres: create domain

Detaljer

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

Løsningsforslag til eksamen i IN2090 Databaser og datamodellering og INF1300 Introduksjon til databaser 6. desember :30 18:30 (4 timer) Løsningsforslag til eksamen i IN2090 Databaser og datamodellering og INF1300 Introduksjon til databaser 6. desember 2018 14:30 18:30 (4 timer) 1. Eksterne skranker (5%) I modellene nedenfor (ORM2) skal

Detaljer

INF1300 Introduksjon til databaser

INF1300 Introduksjon til databaser UNIVERSITETET I OSLO INF1300 Introduksjon til databaser Dagens tema: Fra skranker til integritetsregler (restriksjoner) Klassifisering av integritetsregler Forekomstrestriksjoner Realisering av integritetsregler

Detaljer

<?php. count tar en array som argument, og returnerer et tall som uttrykker antallet innførsler i arrayen.

<?php. count tar en array som argument, og returnerer et tall som uttrykker antallet innførsler i arrayen. Hver gang funksjonen printhallo kalles utføres instruksjonene spesifisert i den. [Kurssidene] [ ABI - fagsider bibin ] Webprogrammering høsten 2015 //funksjonskall printhallo(); //enda en gang printhallo();

Detaljer

Applikasjonsutvikling med databaser

Applikasjonsutvikling med databaser Applikasjonsutvikling med databaser Lars Vidar Magnusson October 12, 2011 Lars Vidar Magnusson () Forelesning i DAS 10.10.2011 October 12, 2011 1 / 24 Applikasjonsutvikling med databaser Databaser tilbyr

Detaljer

Løsningsskisse til Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

Løsningsskisse til Eksamensoppgave i TDT4145 Datamodellering og databasesystemer Institutt for datateknikk og informasjonsvitenskap Løsningsskisse til Eksamensoppgave i TDT4145 Datamodellering og databasesystemer Eksamensdato: 23. mai 2013 Eksamenstid (fra-til): 09:00-13:00 Hjelpemiddelkode/Tillatte

Detaljer

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

Databaser. Relasjonsmodellen 2 Læreboka: Kap. 2 Relasjonsmodellen Databaser Relasjonsmodellen 2 Læreboka: Kap. 2 Relasjonsmodellen Tema for dagen Hva er relasjonsalgebra? Seleksjon Projeksjon Produkt Indre forening Ytterforening Settoperasjoner: union, snitt, differanse

Detaljer

HVA ER XML? extensible Markup Language En standardisert måte å strukturere ulike typer data Åpent format Enkelt:

HVA ER XML? extensible Markup Language En standardisert måte å strukturere ulike typer data Åpent format Enkelt: HVA ER XML? extensible Markup Language En standardisert måte å strukturere ulike typer data Åpent format Enkelt: Tagger/Noder Attributter Mest kjente XML-versjon er XHTML En mengde datakilder er tilgjengelige

Detaljer

Introduksjon til beslutningsstrukturer

Introduksjon til beslutningsstrukturer [Kurssidene] [ ABI - fagsider bibin ] Utvikling av dynamiske nettsteder med PHP og databaser, våren 2014 Introduksjon til beslutningsstrukturer Michael Preminger (michaelp@hio.no) 24/01-14 Repitisjon fra

Detaljer

[Kurssidene] [ ABI - fagsider bibin ] Michael Preminger (michaelp@hio.no) 07/09-15. Vi holder orden på verdier med hjelp av variabler

[Kurssidene] [ ABI - fagsider bibin ] Michael Preminger (michaelp@hio.no) 07/09-15. Vi holder orden på verdier med hjelp av variabler [Kurssidene] [ ABI - fagsider bibin ] Michael Preminger (michaelp@hio.no) 07/09-15 Vi holder orden på verdier med hjelp av variabler Vi lagrer verdier i variabler. Variabelnavn uttrykker verdienes rolle

Detaljer

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL Kandidatnr: Eksamensdato: 4.mai 2011 Varighet: 0900-1300 Emnekode: Emnenavn: Klasse(r): LO191D / LC191D Campus: LC191D Videregående

Detaljer

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

Oppgave 1 1. Spørring: Resultattabell: 2. Spørring: Resultattabell: 3. Spørring: Kjell Toft Hansen 02.10.2008 Opphavsrett: Forfatter og AITeL Lærestoffet er utviklet for faget LO151D Informatikk 1: databaser Oppgave 1 1. Spørring: SELECT oh.*, delnr, kvantum FROM ordrehode oh, ordredetalj

Detaljer

Labquality/NKK ELEKTRONISK RESULTATSKJEMA VIA INTERNET. Åpning av skjemaet. Logg inn på Participant services. Velg resultatskjemaet

Labquality/NKK ELEKTRONISK RESULTATSKJEMA VIA INTERNET. Åpning av skjemaet. Logg inn på Participant services. Velg resultatskjemaet ELEKTRONISK RESULTATSKJEMA VIA INTERNET Åpning av skjemaet Logg inn på Participant services 1. Åpne internett leseren din (IE7 eller senere er den mest egnede nettleseren) 2. Skriv i adressefeltet: http://www.labquality.fi

Detaljer

ORDBMS og OODBMS i praksis

ORDBMS og OODBMS i praksis ORDBMS og OODBMS i praksis Lars Vidar Magnusson November 2, 2011 Lars Vidar Magnusson () Forelesning i DAS 01.11.2011 November 2, 2011 1 / 18 Eksempler på ORDBMS Flere av de store databaser i dag hevder

Detaljer

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

En lett innføring i foreninger (JOINs) i SQL En lett innføring i foreninger (JOINs) i SQL Noen ord om forening (JOIN)! 2 JOINs til gjennomgang! 3 1. INNER JOIN! 3 Eksempel på [INNER] JOIN! 4 NATURAL JOIN! 5 Eksempel på NATURAL JOIN! 5 2. LEFT [OUTER]

Detaljer

Utviklingssak/ID Resume Endring (g2) Rettet i versjon (g1) Rettet i versjon

Utviklingssak/ID Resume Endring (g2) Rettet i versjon (g1) Rettet i versjon Utviklingssak/ID Resume Endring (g2) Rettet i versjon (g1) Rettet i versjon Går inte att spara typ tid "ingen beräkning" i Legg till zon Beskrivning av resultatintjäning" Denna raden behövs när man använder

Detaljer

INF1300 Introduksjon til databaser

INF1300 Introduksjon til databaser UNIVERSITETET I OSLO INF1300 Introduksjon til databaser Dagens tema: SQL SQLs spørrespråk: select-from-where distinct order by Indekser INF1300-15.10.2007 Ellen Munthe-Kaas 1 SQL The Intergalactic Dataspeak

Detaljer

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

EKSAMEN. Emne: Webprogrammering med PHP (kont.) Webprogrammering 1 (kont.) Eksamenstid: 09.00-13.00 EKSAMEN Emnekode: ITM20606 ITF10208 Dato: Emne: Webprogrammering med PHP (kont.) Webprogrammering 1 (kont.) Eksamenstid: 09.00-13.00 01/06-2010 Hjelpemidler: 2 A4 ark (4 sider) med egenproduserte notater

Detaljer

SQL: Integritetsregler, triggere og views

SQL: Integritetsregler, triggere og views UNIVERSITETET I OSLO SQL: Integritetsregler, triggere og views Institutt for Informatikk INF3100 14.2.2014 Ellen Munthe-Kaas 1 Integritetsregler i SQL Kandidat- og primærnøkler Referanseintegritet fremmednøkler

Detaljer

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 mandag 14. INF1300 Introduksjon til databaser: SQL Structured Query Language En første introduksjon Lysark til forelesning mandag 14. september 2009 Dagens tema SQLs definisjonsspråk SQLs spørrespråk select-from-where

Detaljer

Romlig datamanipulering

Romlig datamanipulering Romlig datamanipulering Gunnar Tenge, 18.04.08 Romlige manipuleringsteknikker brukes i GIS-analyser. I denne artikkelen forklares alle manipuleringsteknikker som man kan forvente å finne i et GIS-program.

Detaljer

1. Innføring i bruk av MySQL Query Browser

1. Innføring i bruk av MySQL Query Browser Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag Innføring i bruk av MySQL Query Browser Kjell Toft Hansen 28.02.2007 Lærestoffet er utviklet for faget LV338D Databaseadministrasjon 1. Innføring

Detaljer

IN2090 Databaser og datamodellering. 08 Typer og skranker

IN2090 Databaser og datamodellering. 08 Typer og skranker IN2090 Databaser og datamodellering 08 Typer og skranker Leif Harald Karlsen leifhka@ifi.uio.no Universitetet i Oslo 1 / 29 Databasers typesystem De fleste relasjonelle databaser har et strengt typesystem

Detaljer

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

Databasers typesystem. IN2090 Databaser og datamodellering. 08 Typer og skranker. SQL-standarden vs. RDBMSer. Hvilke datatyper har vi IN2090 Databaser og datamodellering 08 Typer og skranker Leif Harald Karlsen leifhka@ifi.uio.no Databasers typesystem De fleste relasjonelle databaser har et strengt typesystem Alle kolonner må ha en tilhørende

Detaljer

Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

Eksamensoppgave i TDT4145 Datamodellering og databasesystemer Institutt for datateknikk og informasjonsvitenskap Eksamensoppgave i TDT4145 Datamodellering og databasesystemer Faglig kontakt under eksamen: Svein Erik Bratsberg: 995 39 963 Roger Midtstraum: 995 72

Detaljer

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

INF1300 Introduksjon til databaser: SQL Structured Query Language. En første introduksjon Lysark til forelesning onsdag 22. INF1300 Introduksjon til databaser: SQL Structured Query Language En første introduksjon Lysark til forelesning onsdag 22. september 2010 Dagens tema SQLs definisjonsspråk SQLs spørrespråk select-from-where

Detaljer

Løsningsforslag matoppskrifter modellering

Løsningsforslag matoppskrifter modellering Løsningsforslag matoppskrifter modellering Oppgave 1 Det beste er å ha et felles løpenummer på alle oppskrifter, uavhengig av hvor de stammer fra, og heller ha ekstraopplysninger som avhenger av om oppskriften

Detaljer

IN2090 Databaser og datamodellering. 08 Typer og skranker

IN2090 Databaser og datamodellering. 08 Typer og skranker IN2090 Databaser og datamodellering 08 Typer og skranker Leif Harald Karlsen leifhka@ifi.uio.no Universitetet i Oslo 1 / 29 Databasers typesystem De fleste relasjonelle databaser har et strengt typesystem

Detaljer

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

Fag TDT4145 Datamodellering og databasesystemer Løsningsforslag til øving 3: Algebra og SQL NTNU Norges teknisk-naturvitenskapelige Universitet Institutt for datateknikk og informasjonsvitenskap Fag TDT4145 Datamodellering og databasesystemer Løsningsforslag til øving 3: Algebra og SQL Side 1

Detaljer

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

UNIVERSITETET SQL. Structured Query Language (forts.) Institutt for Informatikk. INF Ellen Munthe-Kaas 1 UNIVERSITETET IOSLO SQL Structured Query Language g (forts.) Institutt for Informatikk INF3100 9.2.2009 Ellen Munthe-Kaas 1 null Resultatet av å evaluere et uttrykk som produserer en skalar verdi, kan

Detaljer

Dagens program. Kunnskapsorganisasjon og gjenfinning 1. Spørring mot databaser: SQL 2 - Spørring mot flere tabeller 12.11.2014

Dagens program. Kunnskapsorganisasjon og gjenfinning 1. Spørring mot databaser: SQL 2 - Spørring mot flere tabeller 12.11.2014 Kunnskapsorganisasjon og gjenfinning 1 Spørring mot databaser: SQL 2 - Spørring mot flere tabeller SQL 2 - flere tabeller 12.11.2014 Dagens program SQL oppgave 2 - løsningsforslag Spørring mot flere tabeller

Detaljer

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - Kandidatnr: AITeL Eksamensdato: 2.desember 2009 Varighet: 0900-1300 Emnekode: Emnenavn: Klasse(r): LO191D / LC191D LO191D Videregående programmering

Detaljer

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

Å bruke Java API-et til å sortere tabeller/arraylister der elementene er (referanser til) objekter Sortering og søking i Java-API-et Tabeller og Arraylister Comaparable Comparator equals() LC9D Videregående programmering Semesterplan: http://aitel.hist.no/fag/vprg/index_lc9d.php Høgskolen i Sør-Trøndelag,

Detaljer

UNIVERSITETET SQL-99. Institutt for Informatikk. INF Ellen Munthe-Kaas 1

UNIVERSITETET SQL-99. Institutt for Informatikk. INF Ellen Munthe-Kaas 1 UNIVERSITETET IOSLO Objektrelasjonelle DBMSer. SQL-99 Institutt for Informatikk INF3100 2.3.2009 Ellen Munthe-Kaas 1 Objektrelasjonelle DBMSer ORDBMS = Object-Relational Database Management System Motivasjon:

Detaljer

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

TDT4102 Prosedyre og Objektorientert programmering Vår 2014 Norges teknisk naturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap TDT4102 Prosedyre og Objektorientert programmering Vår 2014 Øving 1 Frist: DD.MM.YYYY Mål for denne øvinga:

Detaljer

Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

Eksamensoppgave i TDT4145 Datamodellering og databasesystemer Institutt for datateknikk og informasjonsvitenskap Eksamensoppgave i TDT4145 Datamodellering og databasesystemer Faglig kontakt under eksamen: Svein Erik Bratsberg: 99539963 Roger Midtstraum: 99572420

Detaljer

Kanter, kanter, mange mangekanter

Kanter, kanter, mange mangekanter Kanter, kanter, mange mangekanter Nybegynner Processing PDF Introduksjon: Her skal vi se på litt mer avansert opptegning og bevegelse. Vi skal ta utgangspunkt i oppgaven om den sprettende ballen, men bytte

Detaljer

EKSAMEN 6102 / 6102N DATABASER

EKSAMEN 6102 / 6102N DATABASER EKSAMEN 6102 / 6102N DATABASER 06.12.2016 Tid: 4 timer (10-14) Målform: Sidetall: Hjelpemidler: Merknader: Vedlegg: Bokmål / nynorsk 13 (inkludert denne) Ingen Ingen Eksempeltabeller Sensuren finner du

Detaljer

1. Relasjonsmodellen. 1.1. Kommentarer til læreboka

1. Relasjonsmodellen. 1.1. Kommentarer til læreboka Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag Relasjonsmodellen Tore Mallaug 2.9.2013 Lærestoffet er utviklet for faget Databaser 1. Relasjonsmodellen Resymé: Denne leksjonen gir en kort

Detaljer

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl. 23.59

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl. 23.59 Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl. 23.59 Formål Formålet med denne oppgaven er å gi trening i hele pensum og i å lage et større program. Løsningen du lager skal være

Detaljer

Videregående programmering 6

Videregående programmering 6 Videregående programmering 6 1. Feilkontroll i klasser uten unntaksobjekter Klasser skal lages sikre. Argumentverdier skal kontrolleres, og eventuelle feil skal rapporteres til klienten. I praksis har

Detaljer

IN2090 Introduksjon til databaser

IN2090 Introduksjon til databaser UNIVERSITETET I OSLO IN2090 Introduksjon til databaser Dagens tema: Data, databaser og databasehåndteringssystemer Hva er data? Hva er informasjon? Fra idé til informasjonssystem Litt om modellering: Begreper

Detaljer

Oppgavesett videregående kurs i NVivo 9

Oppgavesett videregående kurs i NVivo 9 Oppgavesett videregående kurs i NVivo 9 Oppgave 1 Alt i en mappe Når man skal kode på lyd og video er det lurt å ha disse filene i samme mappa som NVivo-prosjektfila. Opprett en mappe på skrivebordet.

Detaljer

EKSAMEN (Konvertert fra en gammel PHP-eksamen)

EKSAMEN (Konvertert fra en gammel PHP-eksamen) EKSAMEN (Konvertert fra en gammel PHP-eksamen) Emnekode: Emne: ITF10208 Webprogrammering 1 Dato: Eksamenstid: 06/12-2011 09.00-13.00 Hjelpemidler: 2 A4 ark (4 sider) med egenproduserte notater (håndskrevne/maskinskrevne)

Detaljer

Testrapport for Sir Jerky Leap

Testrapport for Sir Jerky Leap Jasmine Garry (s135600) Line Sørensen (s135590) Fredrik Hoem Grelland (s135595) Tor Anders Gustavsen (s127668) 1 1. Forord Dette dokumentet inneholder informasjon og redegjøring av tester foretatt i forbindelse

Detaljer

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

UNIVERSITETET I OSLO SQL. Structured Query Language. (forts.) Institutt for Informatikk. INF Ragnar Normann 1 UNIVERSITETET I OSLO SQL Structured Query Language (forts.) Institutt for Informatikk INF3100 7.2.2005 Ragnar Normann 1 null Resultatet av å evaluere et uttrykk som produserer en skalar verdi, kan være

Detaljer

IN2090 Databaser og datamodellering 07 Datamanipulering

IN2090 Databaser og datamodellering 07 Datamanipulering IN2090 Databaser og datamodellering 07 Datamanipulering Leif Harald Karlsen leifhka@ifi.uio.no Universitetet i Oslo 1 / 43 Komplisert eksempel Finn kundenavn og productnavn på alle kunder som har bestilt

Detaljer

1. Profiler og variabler

1. Profiler og variabler Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag Profiler og variabler Stein Meisingseth 26.05.2014 Lærestoffet er utviklet for faget IDRI3005 PowerShell 1. Profiler og variabler Resymé:

Detaljer

SQL Introduksjonskurs. Oversikt

SQL Introduksjonskurs. Oversikt SQL Introduksjonskurs Oversikt Oversikt 2/7 Introduksjon til datamodellering Normalisering Logisk skjema til Database Strukturelle operasjoner Operasjoner mot data Kontrolloperasjoner Aggregering og indekser

Detaljer

Å programmere databasetjeneren JavaDB. Programkoden ligger i databasen

Å programmere databasetjeneren JavaDB. Programkoden ligger i databasen http://www.aitel.hist.no/fag/_dmdb/ Å programmere databasetjeneren JavaDB Programkoden ligger i databasen: hva, hvorfor og hvordan side 2-5 Hallo til verden (eksempel) side 6 CallSpec s side 7 CREATE PROCEDURE

Detaljer

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

EKSAMEN. Les gjennom alle oppgavene før du begynner. Husk at det ikke er gitt at oppgavene står sortert etter økende vanskelighetsgrad. EKSAMEN Emnekode: Emne: ITF10208 Webprogrammering 1 Dato: Eksamenstid: 09/12-2008 09.00-13.00 Hjelpemidler: 2 A4 ark (4 sider) med egenproduserte notater (håndskrevne/maskinskrevne) Faglærer: Tom Heine

Detaljer

Bruke SQL fra Python. Med Psycopg2

Bruke SQL fra Python. Med Psycopg2 Bruke SQL fra Python Med Psycopg2 0 1 (1/3) 1 (2/3) 1 (3/3) 2 Pakken psycopg2 3 Pakken psycopg2 De viktigste klassene vi trenger i psycopg2: connection Håndterer forbindelsen fra Python til PostgreSQL

Detaljer

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

UNIVERSITETET. triggere og views. Institutt for Informatikk. INF Arne Maus 1 UNIVERSITETET IOSLO SQL: Integritetsregler, triggere og views Institutt for Informatikk INF3100 28.2.2012 Arne Maus 1 Integritetsregler i SQL Kandidat- og primærnøkler Referanseintegritet fremmednøkler

Detaljer

INF1300 Introduksjon til databaser

INF1300 Introduksjon til databaser UNIVERSITETET I OSLO INF1300 Introduksjon til databaser Dagens tema: Fra skranker til integritetsregler (restriksjoner) Klassifisering av integritetsregler Forekomstrestriksjoner Realisering av integritetsregler

Detaljer

Klasser. Webprogrammering høsten 2015. Objekter. Eksempelklasser og -objekter. 2 of 11 14.10.2015 07:56. 1 of 11 14.10.2015 07:56

Klasser. Webprogrammering høsten 2015. Objekter. Eksempelklasser og -objekter. 2 of 11 14.10.2015 07:56. 1 of 11 14.10.2015 07:56 [Kurssidene] [ ABI - fagsider bibin ] Objekter Webprogrammering høsten 2015 Et objekt er en "ting" som representeres i et program. Representasjonen tar for seg attributter og oppførsel Attributter (egenskaper)

Detaljer

TDT4102 Prosedyreog objektorientert programmering Vår 2016

TDT4102 Prosedyreog objektorientert programmering Vår 2016 Norges teknisk naturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap TDT4102 Prosedyreog objektorientert programmering Vår 2016 Øving 5 Frist: 2016-02-19 Mål for denne øvingen:

Detaljer

Enalyzer Norge. Nice to know - ESS

Enalyzer Norge. Nice to know - ESS Enalyzer Norge Nice to know - ESS Oversikt Generelle tanker omkring spørsmålsformulering Typiske utfordringer ved de forskjellige spørsmålstyper Typiske utfordringer i lanseringsdelen Husk at folk gjør

Detaljer

Eksamen i Internetteknologi Fagkode: IVA1379

Eksamen i Internetteknologi Fagkode: IVA1379 Høgskolen i Narvik Side 1 av 5 Eksamen i Internetteknologi Fagkode: IVA1379 Tid: Mandag, 07.06.04, 9:00-12:00 Tillatte hjelpemidler: Alle trykte og skrevne hjelpemidler tillatt. Eksamen består av 4 oppgaver

Detaljer

Utvikling fra kjernen og ut

Utvikling fra kjernen og ut Utvikling fra kjernen og ut PHP-arkitektur Brukergrensesnitt! inn ut Dynamisk web-side bygges opp på grunnlag av spørring mot databasen Utviklingsretning Applikasjon Virkelighetsmodell Plattform Bruker

Detaljer

TDT4300 Datavarehus og datagruvedri3, Våren 2014

TDT4300 Datavarehus og datagruvedri3, Våren 2014 TDT4300 Datavarehus og datagruvedri3, Våren 2014 23/1 2014 Trond Aalberg 1 Dagens tema MulAdimensjonale data Dimensjoner og hierarkier revisited Fra modellering Al OLAP implementasjon Vi ser på eksempler

Detaljer

SELECT DISTINCT Fornavn, Etternavn, Programtittel FROM Program P, Medvirkende M, Deltagelse D. SELECT Tilgjengelighet FROM Program

SELECT DISTINCT Fornavn, Etternavn, Programtittel FROM Program P, Medvirkende M, Deltagelse D. SELECT Tilgjengelighet FROM Program [Kurssidene] [ ABI - fagsider bibin ] Michael Preminger (michaelp@hioa.no) 10/11-15 DISTINCT Pregnante navn på kolonner Boolske operatorer: OR, NOT Beregningsfunksjoner og Gruppering NULL-verdier Maria

Detaljer

SQL Structured Query Language

SQL Structured Query Language SQL Structured Query Language Litt tabellterminologi Definere tabeller Fylle tabeller med data Hente data fra tabeller select-from-where distinct order by Relasjoner terminologi relasjonsnavn Personale

Detaljer

DATAUTFORSKNING I EG, EG 7.1 OG EGENDEFINERTE FUNKSJONER SAS FANS I STAVANGER 4. MARS 2014, MARIT FISKAAEN

DATAUTFORSKNING I EG, EG 7.1 OG EGENDEFINERTE FUNKSJONER SAS FANS I STAVANGER 4. MARS 2014, MARIT FISKAAEN DATAUTFORSKNING I EG, EG 7.1 OG EGENDEFINERTE FUNKSJONER SAS FANS I STAVANGER 4. MARS 2014, MARIT FISKAAEN 2 INNLEDNING TEMA I SAS Enterprise Guide versjon 5.1 (februar 2012) kom det et nytt datautforskingsverktøy,

Detaljer

Hvordan aktivere pakker og enkelttitler

Hvordan aktivere pakker og enkelttitler Hvordan aktivere pakker og enkelttitler Innholdsfortegnelse 1 Fullpakker... 1 2 Partpakker... 2 2.1 Manuell aktivering... 2 2.2 Maskinell aktivering... 2 3 Custom-pakker... 5 3.1 Jeg har fått en fil fra

Detaljer

INF1300 Introduksjon til databaser: SQL Structured Query Language

INF1300 Introduksjon til databaser: SQL Structured Query Language 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

Detaljer

1. Mer om oppbyning av XML-dokument

1. Mer om oppbyning av XML-dokument Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag Mer om oppbyning av XML-dokument Lene Hoff 2.9.2013 Lærestoffet er utviklet for faget XML Teknologi 1. Mer om oppbyning av XML-dokument Resymé:

Detaljer