IN2090-ukesoppgaver: Uke 6
Datamanipulering i SQL
En ting vi gjerne ?nsker ? ha lagret i en database, er informasjon om et firmas kunder, prosjekter og ansatte. I denne oppgaven har vi et relasjonsdatabaseskjema for slike data, som ser slik ut:
Kunde(kundenummer, kundenavn, [kundeadresse], [postnr], [poststed])
Prosjekt(prosjektnummer, [prosjektleder], prosjektnavn, [kundenummer], [status])
Ansatt(ansattnr, navn, [f?dselsdato], [ansattDato])
AnsattDeltarIProsjekt(ansattnr, prosjektnr)
I relasjonene er det som st?r f?r parentesen relasjonsnavnet, de kommaseparerte ordene er relasjonensattributter, mens prim?rn?klene er som f?lger:
Kunde(kundenummer)
Prosjekt(prosjektnummer)
Ansatt(ansattnr)
AnsattDeltarIProsjekt(ansattnr, prosjektnr)
Attributter som st?r i [klammeparentes]
, er attributter
som kan inneholde NULL
.
Relasjonene har f?lgende fremmedn?kler:
Prosjekt(kundenummer) → Kunde(kundenummer)
AnsattDeltarIProsjekt(prosjektnr) → Prosjekt(prosjektnummer)
Prosjekt(prosjektleder) → Ansatt(ansattnr)
AnsattDeltarIProsjekt(ansattnr) → Ansatt(ansattnr)
Det er anbefalt ? gj?re oppgavene i rekkef?lgen som er satt opp.
Oppgave 1 – CREATE TABLE
Skriv SQL-setninger som oppretter tabellene i skjemaet. Finn passende
datatyper for attributtene. I tillegg ?nsker vi at attributtet
status
i relasjonen Prosjekt
kun skal kunne
inneholde verdiene 'planlagt'
, 'aktiv'
, eller
'ferdig'
.
Oppgave 2 – Teori
- Hva er prim?rn?kkelen i relasjonen
Ansatt
? Hva med relasjonenAnsattDeltarIProsjekt
? - Hva er n?kkelattributtene i relasjonen
Ansatt
? Hva med relasjonenAnsattDeltarIProsjekt
? - Har relasjonen Ansatt en kandidatn?kkel? I s? fall, hva er kandidatn?kkelen?
- Hva er supern?klene i relasjonen Ansatt?
Oppgave 3 – INSERT
Fyll tabellene med data. Skriv INSERT
-setninger som gj?r
det mulig ? teste noen av SELECT
-setningene som skal
skrives i neste oppgave. Pr?v ogs? ? legge til data i
AnsattDeltarIProsjekt
for et ansattnr
eller
prosjektnr
som ikke finnes. Dette skal gi deg en
feilmelding. Hva er det som hindrer deg i ? legge til slike data?
Oppgave 4 – SELECT
Skriv SQL-sp?rringer som henter ut f?lgende informasjon:
- En liste over alle kunder. Listen skal inneholde kundenummer, kundenavn og kundeadresse.
- Navn p? alle prosjektledere. Dersom en ansatt er prosjektleder for flere prosjekter skal navnet kun forekomme en gang.
- Alle ansattnummerene som er knyttet til prosjektet med prosjektnavn
'Ruter app'
. - En liste over navn p? alle ansatte som er knyttet til prosjekter som
har kunden med navn
'NSB'
Oppgave 5 – CRUD
De siste ukene har vi sett p? hvordan vi henter ut informasjon fra en database. Dette er bare én del av helheten – i en database vil vi normalt ogs? legge inn, endre og slette data. Disse 4 grunnleggende operasjonene kalles gjerne CRUD – Create, read, update, delete.
I dette oppgavesettet har du ogs? pr?vd deg p? create-delen, nemlig
INSERT
og CREATE
. For ? fullf?re kabalen m? vi
l?re de to siste operasjonene:
- Finn ut hvordan du kan bruke
UPDATE
for ? endre en rad. Skriv enUPDATE
-sp?rring som endrer en rad du la inn i Oppgave 3. - Finn ut hvordan du kan bruke
DELETE
for ? slette en rad. Skriv enDELETE
-sp?rring som sletter én rad du la inn i Oppgave 3 (eller legg til en ny rad som du s? sletter).