Finish ov6
This commit is contained in:
parent
cefef7469f
commit
2c79996adf
|
@ -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 |
|
@ -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 {
|
||||
|
|
153
ov6/losning.md
153
ov6/losning.md
|
@ -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 |
|
||||
+----------+--------------+------------+------------+----------------+
|
||||
```
|
||||
|
||||
|
|
Binary file not shown.
|
@ -1 +0,0 @@
|
|||
er_modell.png
|
|
@ -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)
|
||||
);
|
Loading…
Reference in New Issue