Prosjektoppgave: Bildedatabase TDT4145 Datamodellering og Databasesystemer Våren 2007 NB! Kun for de som ikke tar fellesprosjektet.
Innledning I løpet av de siste årene har det blitt stadig mer vanlig å lagre bilder digitalt. Større utbredelse av PC-er, brukbare fargeskrivere, billige scannere og stadig billigere digitalkamera har bidratt til at digital lagring av bilder ikke lenger bare er for profesjonelle fotografer. Digital lagring gjør det også mulig å knytte beskrivelsesdata opp mot bildene på en enkel måte. Dette kan for eksempel gjøres i en relasjonsdatabase. Dessverre kan det være vanskelig for både hobbyfotografer og profesjonelle fotografer å lære seg nok om databaser til å realisere en slik løsning selv. Forretningsideen til Digitalt Album & Sønn er å tilby en komplett databaseløsning som passer fotografer uansett ambisjonsnivå. For en billig penge skal man få tilgang til en ferdig designet database, samt applikasjoner for innlegging og uthenting av både bilder og beskrivelsesdata. I denne oppgaven skal dere designe og implementere bildedatabasen til Digitalt Album & Sønn. Dere skal også lage en enkel Java-applikasjon som tilfredsstiller behovene til mindre krevende hobbyfotografer. Innholdet i databasen kan deles inn i to hoveddeler: Bildedata Digitale utgaver av bilder. Det skal være mulig å lagre mer enn en utgave (versjon) av hvert bilde. Slik kan f.eks. mobile terminaler (som PDA-er og mobiltelefoner) få levert en liten utgave, mens stasjonære PC-er kan få en større. Metadata Beskrivelser tilknyttet et bilde. Hvem har tatt bildet og med hvilket kamera? Når og hvor ble bildet tatt? Hvem er til stede på bildet? Nøyaktig hva som skal lagres er beskrevet i kravspesifikasjonen på neste side. Prosjektoppgaven består av tre deler. Først skal dere designe en konseptuell datamodell som tilfredsstiller alle oppgitte krav til datamodellen. Deretter skal denne modellen realiseres som en relasjonsdatabase i Oracle. Til slutt skal det lages en enkel Java-applikasjon som ved hjelp av JDBC gjør det mulig å legge inn og hente ut data fra databasen.
Kravspesifikasjon 1. Systemet skal lagre bilder i en database. For hvert bilde skal det lagres en tittel, en beskrivelse og datoen da bildet ble tatt (eksponeringsdato). Det skal også lagres om bildet kan publiseres offentlig eller om det skal regnes som privat. 2. Hvert bilde har ett eller flere utgaver. En utgave er en versjon av et bilde f.eks. et JPEG-komprimert bilde på 800x600 piksler. Hver utgave skal ha en innleggingsdato og muligheter for registrering av en beskrivelse. (Se sist i oppgaveteksten for informasjon om hvordan man lagrer bilder i databasen) 3. For hver utgave skal det registreres hvordan det er digitalisert. Gyldige alternativer skal være kun: Digitalkamera, filmscanner, flatbedscanner, trommelscanner og vet ikke. 4. Hvert bilde kan være en del av en (og bare en) film. Hver film har en produsent (f.eks. Fuji), type (f.eks. Reala) og følsomhet (f.eks. ISO 100). Det skal også kunne lagres hvilket nummer i filmen et gitt bilde er. 5. Det skal være mulig å registrere med hvilket kamera et bilde er tatt. Hvert kamera er eid av en fotograf. For et kamera skal det lagres merke, modell og om det er digitalt eller ikke. 6. Det skal være mulig å registrere hvilken fotograf som har tatt et bilde. For fotografer skal det lagres fornavn og etternavn. E-post adresse, beskrivelse og hjemmeside-url skal det også være mulig å lagre. 7. Bildene skal kunne tilhøre en eller flere kategorier. Eksempler på kategorier: Feriebilder, Høytid og fest og Skogsturer. Hver kategori skal ha en tittel og en beskrivelse. Navn på kategorier skal ikke hardkodes i databasen hver bruker skal legge inn sine egne. 8. Hver kategori skal kunne ha en overkategori og en eller flere underkategorier. For eksempel kan kategorien Feriebilder ha underkategoriene Maldivene 2000 og Hardangervidda høsten 2001. 9. Hvert bilde skal kunne være med i en eller flere bildeserier. En bildeserie har et navn og mulighet for en beskrivelse. Eksempel: Mine beste bilder 2000. Rekkefølgen til bildene i en serie skal også lagres. 10. Hvert bilde skal kunne ha ett eller flere motiv. Et motiv er enten en person, et sted, en hendelse eller et objekt. 11. For personer skal fornavn, etternavn og beskrivelse lagres, mens navn og beskrivelse skal lagres for sted, hendelse og objekt. 12. Steder er enten land, fylker, kommuner eller områder. Et område ligger i en kommune, en kommune ligger i et fylke og et fylke ligger i et land. Hvis et bilde er tatt i et annet land enn Norge, skal kun land og område registreres (område ligger da direkte i et land). En oversikt over alle fylker og kommuner i Norge er lagt ut på http://www.idi.ntnu.no/emner/tdt4145 slik at dere slipper å registrere slike data manuelt.
Oppgaver Oppgavene går ut på å gjennomføre en praktisk databasekonstruksjon for systemet, med utgangspunkt i de fremsatte kravene. I praksis vil det si at dere lager en konseptuell datamodell for systemet, realiserer den i Oracle, og benytter denne databasen ved hjelp av JDBC i en implementasjon av deler av systemet. Praktiske opplysninger Denne prosjektoppgaven skal løses i grupper med maksimalt 5 studenter. Gruppene setter dere sammen selv. Send en e-post til tdt4145@idi.ntnu.no med navnet og e-postadressen på alle i gruppa. Hvis ikke annet er oppgitt i oppgaveteksten, skal øvingene leveres i en merket boks i vrimleområdet utenfor F1 før kl. 16.00 på innleveringsdagen. De tre innleveringene prosjektet er organisert på følgende måte: Innlevering Tidsfrist Oppgave 1 02.03.07 Oppgave 2 09.03.07 Oppgave 3 02.05.07 For å få prosjektet godkjent, må man ha alle delinnleveringene godkjent. Det er også en veldig god ide å få en delinnlevering godkjent før man leverer inn neste slik at man slipper å dra med seg feil. Oppgave 1: Konseptuell datamodell Dere skal lage en konseptuell databasemodell som oppfyller kravspesifikasjonen på alle punkter. Det er to ting som skal leveres: 1. Et diagram som viser datamodellen. Det er valgfritt om dere vil bruke UML eller EER, og om dere vil tegne for hånd eller bruke modelleringsverktøy. Uansett skal modellen leveres på papir. Ta med alle entitetsklasser, relasjonsklasser, kardinaliteter og (eventuelle) eksistensavhengigheter og svake entitetsklasser. 2. Et dokument som beskriver hvordan modellen oppfyller kravspesifikasjonen. For hvert nummerert krav i kravspesifikasjonen skal det kort (et par linjer burde holde) forklares hvordan modellen deres oppfyller kravet. Dette skal også leveres på papir. For å bli godkjent må modellen deres oppfylle absolutt alle krav i kravspesifikasjonen. Kravoppfyllelsesdokumentet er en forutsetning for at vi skal kunne sjekke dette noenlunde enkelt, så innleveringer uten dette vil ikke bli godkjent. Husk å skrive gruppenummer og navn på alle i gruppa på innleveringen. Leveringsfrist: 2. mars
Oppgave 2: Logisk databaseskjema Den konseptuelle modellen fra Oppgave 1 skal omformes til et logisk databaseskjema, i form av et SQL-skript som skal kunne brukes til å generere en relasjonsdatabase i Oracle. Det er to ting som skal leveres: 1. Et kjørbart SQL-skript som genererer databasen. Husk alle primær- og fremmednøkler, og eventuelt andre restriksjoner (constraints). Dette skal leveres på papir. 2. Oppgave 1-innleveringen. Hvis dere har endret modellen siden oppgave 1, lag en revidert versjon av modellen. Dere står fritt til å endre datamodellen til enhver tid, men alle krav må alltid være oppfylt. Husk å oppdatere kravoppfyllelsedokumentet, og marker endringene slik at vi slipper å sjekke alt på nytt. Vitsen med å levere inn oppgave 1 igjen, er at vi skal kunne kontrollere at dere har laget SQL-koden korrekt i henhold til modellen. Det må derfor være samsvar mellom modellen og SQL-koden for at innleveringen skal bli godkjent. Husk å skrive gruppenummer og navn på alle i gruppa på innleveringen. Leveringsfrist: 9. mars Oppgave 3: Databaseprogrammering med Java/JDBC Dere skal lage en begrenset implementasjon som gjør det mulig for hobbyfotografer å bruke databasen til Digitalt Album & Sønn. Nøyaktig hvilke krav implementasjonen skal tilfredsstille er gitt under. Programmet skal lages som en Java-applikasjon som bruker JDBC for kommunikasjon med databasen. Det er tre ting som skal leveres: Et kjørbart program, helst i form av en kjørbar jar-fil. Leveres elektronisk pr e-post til tdt4145@idi.ntnu.no. (Les http://java.sun.com/docs/books/tutorial/jar/index.html for å lære om jar-filer.) Kildekoden til programmet. Leveres også elektronisk til tdt4145@idi.ntnu.no. En EER/UML-modell (med attributter) av de delene av databasen dere benytter I programmet. Denne kan være forskjellig fra den tilsvarende delen av det dere leverte I DB2, men alle relevante krav fra kravspesifikasjonen på være oppfylt (dvs. Modellen skal kunne inngå i en større modell som oppfyller alle kravene i kravspeken). Leveres elektronisk til tdt4145@idi.ntnu.no eller på papir. Kravspesifikasjon 1. Implementasjonen trenger kun å omfatte de delene av datamodellen som er dekket av følgende krav fra den opprinnelige kravspesifikasjonen: 1, 2, 5 og 6. Det vil med andre ord si bilder, utgaver, fotografer og kamera. 2. Implementasjonen trenger kun å omfatte uthenting av data - innlegging av data kan dere gjøre manuelt f.eks. ved bruk av SQL*Plus eller SqlClient 3. Ved oppstart av applikasjonen skal det vises en liste over bilder registrert i databasen. 4. For hvert av bildene skal det være mulig å få se hvem som har tatt bildet og med hvilket kamera samt en liste over registrerte utgaver av bildet. Det skal være mulig å velge en utgave for så å se det. 5. Det skal være mulig å søke på bildetittel, bildebeskrivelse, fotograf-fornavn, fotografetternavn og fotograf-beskrivelse. Resultatet skal være en liste med bilder.
Kildekode For å unngå at all tid går med på ikke-db-relatert Java-programmering, får dere utdelt kildekode til et nesten ferdig program. Kildekoden består av fire filer: DB3.java Hovedprogrammet Picture.java - Bilde-klasse Version.java - Utgave-klasse ImageLoader.java - Klasse for lasting av bilder inn i databasen I toppen av hver java-fil er det listet opp hva dere må gjøre. For å få programmet til å fungere trengs noen ekstra Oracle-klasser. Disse finnes i oracle9.jar, ordim.zip, ordimimg.jar og runtime12.zip. Alle filene finnes på http://elefant.idi.ntnu.no Husk å skrive gruppenummer og navn på alle i gruppa på innleveringen. Leveringsfrist: 2. mai Lagring av bilder i Oracle Når dere skal gjøre oppgave 2 og 3, trenger dere å vite hvordan man lagrer bilder i Oracle. Tidligere gjorde man dette ved å bruke datatypen BLOB (Binary Large Object), noe som gjorde at Oracle behandlet et bilde som en mengde med bytes. Nyere versjoner av Oracle inneholder derimot en komponent kalt intermedia som bl.a. innholder spesielle datatyper for bilder, lyd og video. Det gjør det mulig å tilby spesiell funksjonalitet som f.eks. formatkonvertering, skalering o.l. I tillegg finner Oracle selv ut ting som bildeformat og bildedimensjon slik at man ikke trenger å lagre dette selv. I denne prosjektoppgaven skal intermedias datatype ORDImage brukes til å lagre bildedata. Siden ORDImage skiller seg litt ut fra vanlige datatyper som NUMBER og VARCHAR, gir vi dere litt hjelp til å komme i gang. På http://www.idi.ntnu.no/emner/tdt4145 vil dere etter hvert finne Javakode for å legge inn og hente ut bilder som ORDImage. Husk også at dokumentasjon til Oracle ligger tilgjengelig på http://gigabase.idi.ntnu.no/oradoc/.