Finish ov6

This commit is contained in:
Felix Albrigtsen 2022-10-25 12:13:01 +02:00
parent cefef7469f
commit 2c79996adf
7 changed files with 243 additions and 3 deletions

27
ov6/demodata.sql Normal file
View File

@ -0,0 +1,27 @@
INSERT INTO bedrift(orgnummer, navn, epost, telefon) VALUES (100, "Bjarnes Butikk", "bb@gmail.com", "12345670");
INSERT INTO bedrift(orgnummer, navn, epost, telefon) VALUES (200, "Vidars Verksted", "vv@gmail.com", "12345671");
INSERT INTO bedrift(orgnummer, navn, epost, telefon) VALUES (300, "Arnes Arkivtjenester", "aa@gmail.com", "12345672");
INSERT INTO kandidat(telefon, epost, fornavn, etternavn) VALUES ("12345678", "k_a@gmail.com", "Kari", "Aas");
INSERT INTO kandidat(telefon, epost, fornavn, etternavn) VALUES ("12345679", "a_b@gmail.com", "Anne", "Berg");
INSERT INTO kandidat(telefon, epost, fornavn, etternavn) VALUES ("12345680", "g_s@gmail.com", "Gunnar", "Svendsen");
INSERT INTO kandidat(telefon, epost, fornavn, etternavn) VALUES ("12345681", "s_w@gmail.com", "Svein", "Wold");
INSERT INTO kandidat(telefon, epost, fornavn, etternavn) VALUES ("12345682", "h_j@gmail.com", "Hans", "Jensen");
INSERT INTO kandidatkvalifikasjon(telefon, kvalifikasjon) VALUES ("12345678", "Kundeservice");
INSERT INTO kandidatkvalifikasjon(telefon, kvalifikasjon) VALUES ("12345678", "Kasse");
INSERT INTO kandidatkvalifikasjon(telefon, kvalifikasjon) VALUES ("12345679", "Kundeservice");
INSERT INTO kandidatkvalifikasjon(telefon, kvalifikasjon) VALUES ("12345679", "Kasse");
INSERT INTO kandidatkvalifikasjon(telefon, kvalifikasjon) VALUES ("12345680", "Excel");
INSERT INTO kandidatkvalifikasjon(telefon, kvalifikasjon) VALUES ("12345680", "Word");
INSERT INTO kandidatkvalifikasjon(telefon, kvalifikasjon) VALUES ("12345681", "Excel");
INSERT INTO kandidatkvalifikasjon(telefon, kvalifikasjon) VALUES ("12345681", "Word");
INSERT INTO oppdrag(orgnummer, kvalifikasjon, starttid, slutttid) VALUES (100, "Kundeservice", DATE("2023-01-01"), DATE("2023-01-31"));
INSERT INTO oppdrag(orgnummer, kvalifikasjon, starttid, slutttid) VALUES (300, "Kasse", DATE("2023-02-01"), DATE("2023-02-28"));
INSERT INTO oppdrag(orgnummer, kvalifikasjon, starttid, slutttid) VALUES (300, "Excel", DATE("2023-03-01"), DATE("2023-03-31"));
INSERT INTO oppdrag(orgnummer, kvalifikasjon, starttid, slutttid) VALUES (300, "Word", DATE("2023-04-01"), DATE("2023-04-30"));
INSERT INTO jobbhistorikk(oppdrag_id, kandidat_tlf, starttid, slutttid, arbeidstimer) VALUES (1, "12345678", DATE("2022-01-01"), DATE("2022-01-31"), 160);
INSERT INTO jobbhistorikk(oppdrag_id, kandidat_tlf, starttid, slutttid, arbeidstimer) VALUES (2, "12345679", DATE("2022-02-01"), DATE("2022-02-24"), 140);
INSERT INTO jobbhistorikk(oppdrag_id, kandidat_tlf, starttid, slutttid, arbeidstimer) VALUES (3, "12345680", DATE("2022-03-01"), DATE("2022-03-16"), 160);

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View File

@ -13,7 +13,7 @@ entity "Kandidat" as k {
entity "KandidatKvalifikasjon" as kk {
kandidat_id {PK} : Integer
--
kvalifikasjon : String
kvalifikasjon {PK} : String
}
entity "Bedrift" as b {

View File

@ -3,5 +3,156 @@ geometry: margin=30mm
author: Felix Albrigtsen
...
# Øving
# Øving 6
## Oppgave a
### Lag en datamodell (ER-modell der dere bruker UML-notasjon)
![ER-Modell](er_modell.png)
## Oppgave b
### Oversett til relasjonsmodellen
> kandidat(telefon\*, fornavn, etternavn, epost)
> kandidatkvalifikasjon(kandidat\_id*,kvalifikasjon*)
> bedrift(orgnummer\*, navn, epost, telefon)
> oppdrag(oppdrag\_id\*, <u>orgnummer</u>, kvalifikasjon, starttid, sluttid)
> jobbhistorikk(<u>oppdrag\_id\*</u>, <u>kandidat tlf</u>, starttid, sluttid, arbeidstimer)
> sluttatest(<u>oppdrag_id\*</u>, attest)
### Er det rimelig at noen av fremmednøklene kan være NULL? Hva betyr det i tilfelle?
Jeg bruker fire fremmednøkler i besvarelsen.
- oppdrag.orgnummer kan ikke være NULL, da alle jobber må høre til en bedrift.
- jobbhistorikk.oppdrag\_id kan ikke være NULL, da man ikke kan ha jobbet om det ikke fantes et oppdrag.
- jobbhistorikk.kandidat\_tlf kan ikke være NULL, da et oppdrag ikke kan være utført om det ikke gjøres av en kandidat.
- sluttatest.oppdrag\_id kan ikke være NULL, da man ikke kan skrive attest til en jobb som ikke er utført.
## Oppgave c
### Opprett databasetabellene med primær-og fremmednøkleri MySQL, dvs. lag CREATE TABLE og evt. ALTER TABLE-setninger. (Prøv å) bruk datatypen DATE for dato.
SQL-setningene finnes i [vikar.sql](./vikar.sql)
## Oppgave d
### Lag en liste over alle bedriftene. Navn, telefon og epost til bedriften skal skrives ut.
```sql
SELECT navn, epost, telefon
FROM bedrift;
```
```sql
MariaDB [idatt2103_ov6]> SELECT navn, epost, telefon FROM bedrift;
+----------------------+--------------+----------+
| navn | epost | telefon |
+----------------------+--------------+----------+
| Bjarnes Butikk | bb@gmail.com | 12345670 |
| Vidars Verksted | vv@gmail.com | 12345671 |
| Arnes Arkivtjenester | aa@gmail.com | 12345672 |
+----------------------+--------------+----------+
```
### Lag en liste over alle oppdragene. Om hvert oppdrag skal du skrive ut oppdragets nummer samt navn og telefonnummer til bedriften som tilbyr oppdraget.
```sql
SELECT oppdrag_id, navn, telefon, epost
FROM oppdrag
LEFT JOIN bedrift
ON oppdrag.orgnummer = bedrift.orgnummer;
```
```sql
MariaDB [idatt2103_ov6]> SELECT oppdrag_id, navn, telefon, epost FROM oppdrag LEFT JOIN bedrift ON oppdrag.orgnummer = bedrift.orgnummer;
+------------+----------------------+----------+--------------+
| oppdrag_id | navn | telefon | epost |
+------------+----------------------+----------+--------------+
| 1 | Bjarnes Butikk | 12345670 | bb@gmail.com |
| 2 | Arnes Arkivtjenester | 12345672 | aa@gmail.com |
| 3 | Arnes Arkivtjenester | 12345672 | aa@gmail.com |
| 4 | Arnes Arkivtjenester | 12345672 | aa@gmail.com |
+------------+----------------------+----------+--------------+
```
### Lag en liste over kandidater og kvalifikasjoner. Kandidatnavn og kvalifikasjonsbeskrivelse skal med i utskriften i tillegg til løpenumrene som identifiserer kandidat og kvalifikasjon.
Jeg har ikke brukt noen løpenummer, da ingen kandidater kan ha samme telefonnummer, og telefon+kvalifikasjon er tilstrekkelig primærnøkkel.
```sql
SELECT k.telefon, CONCAT (k.fornavn, ' ', k.etternavn) AS navn, kvalifikasjon
FROM kandidat k
RIGHT JOIN kandidatkvalifikasjon kk
ON k.telefon = kk.telefon;
```
```sql
MariaDB [idatt2103_ov6]> SELECT k.telefon, CONCAT (k.fornavn, ' ', k.etternavn) AS navn, kvalifikasjon FROM kandidat k RIGHT JOIN kandidatkvalifikasjon kk ON k.telefon = kk.telefon;
+----------+-----------------+---------------+
| telefon | navn | kvalifikasjon |
+----------+-----------------+---------------+
| 12345678 | Kari Aas | Kasse |
| 12345678 | Kari Aas | Kundeservice |
| 12345679 | Anne Berg | Kasse |
| 12345679 | Anne Berg | Kundeservice |
| 12345680 | Gunnar Svendsen | Excel |
| 12345680 | Gunnar Svendsen | Word |
| 12345681 | Svein Wold | Excel |
| 12345681 | Svein Wold | Word |
+----------+-----------------+---------------+
```
### Som oppgave 3d), men få med de kandidatene som ikke er registrert med kvalifikasjoner.
```sql
SELECT k.telefon, CONCAT (k.fornavn, ' ', k.etternavn) AS navn, kvalifikasjon
FROM kandidat k
LEFT JOIN kandidatkvalifikasjon kk
ON k.telefon = kk.telefon;
```
```sql
MariaDB [idatt2103_ov6]> SELECT k.telefon, CONCAT (k.fornavn, ' ', k.etternavn) AS navn, kvalifikasjon FROM kandidat k LEFT JOIN kandidatkvalifikasjon kk ON k.telefon = kk.telefon;
+----------+-----------------+---------------+
| telefon | navn | kvalifikasjon |
+----------+-----------------+---------------+
| 12345678 | Kari Aas | Kasse |
| 12345678 | Kari Aas | Kundeservice |
| 12345679 | Anne Berg | Kasse |
| 12345679 | Anne Berg | Kundeservice |
| 12345680 | Gunnar Svendsen | Excel |
| 12345680 | Gunnar Svendsen | Word |
| 12345681 | Svein Wold | Excel |
| 12345681 | Svein Wold | Word |
| 12345682 | Hans Jensen | NULL |
+----------+-----------------+---------------+
```
### Skriv ut jobbhistorikken til en bestemt vikar, gitt kandidatnr. Vikarnavn, sluttdato, oppdragsnr og bedriftsnavn skal med.
```sql
SELECT k.telefon, CONCAT(k.fornavn, ' ', k.etternavn) as kandidatnavn, j.slutttid, j.oppdrag_id, b.navn
FROM jobbhistorikk j
LEFT JOIN oppdrag o
ON j.oppdrag_id = o.oppdrag_id
LEFT JOIN bedrift b
ON o.orgnummer = b.orgnummer
LEFT JOIN kandidat k
ON j.kandidat_tlf = k.telefon
WHERE kandidat_tlf = 12345678;
```
```sql
MariaDB [idatt2103_ov6]> SELECT k.telefon, CONCAT(k.fornavn, ' ', k.etternavn) as kandidatnavn, j.slutttid, j.oppdrag_id, b.navn FROM jobbhistorikk j LEFT JOIN oppdrag o ON j.oppdrag_id = o.oppdrag_id LEFT JOIN bedrift b ON o.orgnummer = b.orgnummer LEFT JOIN kandidat k ON j.kandidat_tlf = k.telefon WHERE kandidat_tlf = 12345678;
+----------+--------------+------------+------------+----------------+
| telefon | kandidatnavn | slutttid | oppdrag_id | navn |
+----------+--------------+------------+------------+----------------+
| 12345678 | Kari Aas | 2022-01-31 | 1 | Bjarnes Butikk |
+----------+--------------+------------+------------+----------------+
```

BIN
ov6/losning.pdf Normal file

Binary file not shown.

View File

@ -1 +0,0 @@
er_modell.png

63
ov6/vikar.sql Normal file
View File

@ -0,0 +1,63 @@
DROP TABLE IF EXISTS sluttatest;
DROP TABLE IF EXISTS jobbhistorikk;
DROP TABLE IF EXISTS oppdrag;
DROP TABLE IF EXISTS kandidatkvalifikasjon;
DROP TABLE IF EXISTS kandidat;
DROP TABLE IF EXISTS bedrift;
CREATE TABLE bedrift
(
orgnummer INT UNSIGNED NOT NULL AUTO_INCREMENT,
navn VARCHAR(30),
epost VARCHAR(100),
telefon CHAR(15),
PRIMARY KEY(orgnummer)
);
CREATE TABLE kandidat
(
telefon CHAR(15) NOT NULL,
epost VARCHAR(100),
fornavn VARCHAR(30),
etternavn VARCHAR(30),
PRIMARY KEY(telefon)
);
CREATE TABLE kandidatkvalifikasjon
(
telefon CHAR(15) NOT NULL,
kvalifikasjon VARCHAR(100),
PRIMARY KEY(telefon, kvalifikasjon),
FOREIGN KEY(telefon) REFERENCES kandidat(telefon)
);
CREATE TABLE oppdrag
(
oppdrag_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
orgnummer INT UNSIGNED,
kvalifikasjon VARCHAR(30),
starttid DATE,
slutttid DATE,
PRIMARY KEY(oppdrag_id),
FOREIGN KEY(orgnummer) REFERENCES bedrift(orgnummer)
);
CREATE TABLE jobbhistorikk
(
oppdrag_id INT UNSIGNED NOT NULL,
kandidat_tlf CHAR(15) NOT NULL,
starttid DATE,
slutttid DATE,
arbeidstimer INT UNSIGNED,
PRIMARY KEY(oppdrag_id),
FOREIGN KEY(oppdrag_id) REFERENCES oppdrag(oppdrag_id),
FOREIGN KEY(kandidat_tlf) REFERENCES kandidat(telefon)
);
CREATE TABLE sluttatest
(
oppdrag_id INT UNSIGNED NOT NULL,
attest TEXT,
PRIMARY KEY(oppdrag_id),
FOREIGN KEY(oppdrag_id) REFERENCES jobbhistorikk(oppdrag_id)
);