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

  1. Hva er prim?rn?kkelen i relasjonen Ansatt? Hva med relasjonen AnsattDeltarIProsjekt?
  2. Hva er n?kkelattributtene i relasjonen Ansatt? Hva med relasjonen AnsattDeltarIProsjekt?
  3. Har relasjonen Ansatt en kandidatn?kkel? I s? fall, hva er kandidatn?kkelen?
  4. 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:

  1. En liste over alle kunder. Listen skal inneholde kundenummer, kundenavn og kundeadresse.
  2. Navn p? alle prosjektledere. Dersom en ansatt er prosjektleder for flere prosjekter skal navnet kun forekomme en gang.
  3. Alle ansattnummerene som er knyttet til prosjektet med prosjektnavn 'Ruter app'.
  4. 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:

  1. Finn ut hvordan du kan bruke UPDATE for ? endre en rad. Skriv en UPDATE-sp?rring som endrer en rad du la inn i Oppgave 3.
  2. Finn ut hvordan du kan bruke DELETE for ? slette en rad. Skriv en DELETE-sp?rring som sletter én rad du la inn i Oppgave 3 (eller legg til en ny rad som du s? sletter).