Commit 2a90f768 authored by K9272's avatar K9272
Browse files

H9

parent 6ed228cc
# Viikko 9 Kertaus
## Tehtävä 1 [15p]
Tehtävä: Suunnittele ja toteuta tietokanta.
[SQL-tiedosto](H9/tor.sql)
[PDF-kuva](H9/EER.pdf)
Tehtävä 2 [5p]
Esimerkkidataa tietokantaan
```
INSERT INTO taitoluokat(nimi,kuvaus)
VALUES
("Tekniset pätevyydet", "Taidot, jotka kuvaavat teknisiä pätevyyksiä"),
("Käytöspätevyydet", "Taidot, jotka kuvaavat henkilöiden välisen toiminnan pätevyyksiä");
INSERT INTO taidot(nimi,kuvaus,taitoluokkaid)
VALUES
("Projektinjohdollinen osallistuminen", "Kuvaus 1",1),
("Sidosryhmät", "Kuvaus 2",1),
("Johtajuus", "Kuvaus 3",2),
("Sitoutuminen ja motivaatio", "Kuvaus 4",2);
INSERT INTO roolit(nimi,kuvaus)
VALUES
("Tavis", "Tavallinen arvioitava"),
("Asiantuntija", "OKM:n asiantuntija-arvioija");
INSERT INTO henkilot(nimi,rooliid)
VALUES
("Teppo Tarkkailija",2),
("Ansa Arvioija",2),
("Indri Insinööri",1),
("Juuso Johtaja",1);
INSERT INTO arviot(arvioitava, arvioija, taitoid, kokemus, tietamys)
VALUES
(3,1,1,10,10),
(3,1,2,9,9),
(3,1,3,7,7),
(3,1,4,8,8),
(3,3,1,5,5),
(3,3,2,4,4),
(3,3,3,3,3),
(3,3,4,2,2),
(4,2,1,9,9),
(4,2,2,9,9),
(4,2,3,9,9),
(4,2,4,9,9),
(4,4,1,8,8),
(4,4,2,8,8),
(4,4,3,8,8),
(4,4,4,8,8);
```
Esimerkkidata tietokannassa
```
MariaDB [tor]> SELECT * FROM taitoluokat;
+---------------+---------------------+------------------------------------------------------------------+
| taitoluokkaid | nimi | kuvaus |
+---------------+---------------------+------------------------------------------------------------------+
| 1 | Tekniset pätevyydet | Taidot, jotka kuvaavat teknisiä pätevyyksiä |
| 2 | Käytöspätevyydet | Taidot, jotka kuvaavat henkilöiden välisen toiminnan pätevyyksiä |
+---------------+---------------------+------------------------------------------------------------------+
2 rows in set (0.000 sec)
MariaDB [tor]> SELECT * FROM taidot;
+---------+-------------------------------------+----------+---------------+
| taitoid | nimi | kuvaus | taitoluokkaid |
+---------+-------------------------------------+----------+---------------+
| 1 | Projektinjohdollinen osallistuminen | Kuvaus 1 | 1 |
| 2 | Sidosryhmät | Kuvaus 2 | 1 |
| 3 | Johtajuus | Kuvaus 3 | 2 |
| 4 | Sitoutuminen ja motivaatio | Kuvaus 4 | 2 |
+---------+-------------------------------------+----------+---------------+
4 rows in set (0.000 sec)
MariaDB [tor]> SELECT * FROM roolit;
+---------+--------------+-----------------------------+
| rooliid | nimi | kuvaus |
+---------+--------------+-----------------------------+
| 1 | Tavis | Tavallinen arvioitava |
| 2 | Asiantuntija | OKM:n asiantuntija-arvioija |
+---------+--------------+-----------------------------+
2 rows in set (0.000 sec)
MariaDB [tor]> SELECT * FROM henkilot;
+-----------+-------------------+---------+
| henkiloid | nimi | rooliid |
+-----------+-------------------+---------+
| 1 | Teppo Tarkkailija | 2 |
| 2 | Ansa Arvioija | 2 |
| 3 | Indri Insinööri | 1 |
| 4 | Juuso Johtaja | 1 |
+-----------+-------------------+---------+
4 rows in set (0.000 sec)
MariaDB [tor]> SELECT * FROM arviot;
+------------+----------+---------+---------+----------+
| arvioitava | arvioija | taitoid | kokemus | tietamys |
+------------+----------+---------+---------+----------+
| 3 | 1 | 1 | 10 | 10 |
| 3 | 1 | 2 | 9 | 9 |
| 3 | 1 | 3 | 7 | 7 |
| 3 | 1 | 4 | 8 | 8 |
| 3 | 3 | 1 | 5 | 5 |
| 3 | 3 | 2 | 4 | 4 |
| 3 | 3 | 3 | 3 | 3 |
| 3 | 3 | 4 | 2 | 2 |
| 4 | 2 | 1 | 9 | 9 |
| 4 | 2 | 2 | 9 | 9 |
| 4 | 2 | 3 | 9 | 9 |
| 4 | 2 | 4 | 9 | 9 |
| 4 | 4 | 1 | 8 | 8 |
| 4 | 4 | 2 | 8 | 8 |
| 4 | 4 | 3 | 8 | 8 |
| 4 | 4 | 4 | 8 | 8 |
+------------+----------+---------+---------+----------+
16 rows in set (0.000 sec)
```
## Tehtävä 3 [5p]
### A. Hae jokaisen itselleen antamien kaikkien arvosanojen keskiarvot sekä tietämyksestä että kokemuksesta. Tulokset henkilöittäin.
```
SELECT nimi, AVG(kokemus), AVG(tietamys)
FROM arviot
INNER JOIN henkilot
ON arviot.arvioitava = henkilot.henkiloid
WHERE arvioija=arvioitava
GROUP BY arvioitava;
```
```
+-----------------+--------------+---------------+
| nimi | AVG(kokemus) | AVG(tietamys) |
+-----------------+--------------+---------------+
| Indri Insinööri | 3.5000 | 3.5000 |
| Juuso Johtaja | 8.0000 | 8.0000 |
+-----------------+--------------+---------------+
2 rows in set (0.000 sec)
```
### B. Hae valitsemiesi asiantuntijoiden antamien arvosanojen keskiarvot sekä tietämyksestä että kokemuksesta. Tulokset henkilöittäin.
```
SELECT nimi, AVG(kokemus), AVG(tietamys) FROM arviot
INNER JOIN henkilot
ON arviot.arvioitava = henkilot.henkiloid
WHERE arvioija in (SELECT henkiloid FROM henkilot WHERE nimi in ("Teppo Tarkkailija") AND rooliid = (SELECT rooliid FROM roolit WHERE nimi = "Asiantuntija"))
GROUP BY arvioitava;
```
```
+-----------------+--------------+---------------+
| nimi | AVG(kokemus) | AVG(tietamys) |
+-----------------+--------------+---------------+
| Indri Insinööri | 8.5000 | 8.5000 |
+-----------------+--------------+---------------+
1 row in set (0.000 sec)
```
### C. Hae valitsemiesi asiantuntijoiden antamien arvosanojen keskiarvot sekä tietämyksestä että kokemuksesta. Tulokset henkilöittäin ja osaamisittain.
```
SELECT henkilot.nimi as hnimi, taidot.nimi as tnimi, AVG(kokemus), AVG(tietamys) FROM arviot
INNER JOIN henkilot
ON arviot.arvioitava = henkilot.henkiloid
INNER JOIN taidot
ON arviot.taitoid = taidot.taitoid
WHERE arvioija in (SELECT henkiloid FROM henkilot WHERE nimi in ("Teppo Tarkkailija") AND rooliid = (SELECT rooliid FROM roolit WHERE nimi = "Asiantuntija"))
GROUP BY arvioitava,tnimi;
```
```
+-----------------+-------------------------------------+--------------+---------------+
| hnimi | tnimi | AVG(kokemus) | AVG(tietamys) |
+-----------------+-------------------------------------+--------------+---------------+
| Indri Insinööri | Johtajuus | 7.0000 | 7.0000 |
| Indri Insinööri | Projektinjohdollinen osallistuminen | 10.0000 | 10.0000 |
| Indri Insinööri | Sidosryhmät | 9.0000 | 9.0000 |
| Indri Insinööri | Sitoutuminen ja motivaatio | 8.0000 | 8.0000 |
+-----------------+-------------------------------------+--------------+---------------+
4 rows in set (0.001 sec)
```
### D. Hae jokaisen itselleen antamien arvosanojen keskiarvot sekä tietämyksestä että kokemuksesta. Tulokset henkilöittäin ja osaamisryhmittäin.
```
SELECT henkilot.nimi as hnimi, taitoluokat.nimi as oryhma, AVG(tietamys), AVG(kokemus) FROM arviot
INNER JOIN henkilot
ON arviot.arvioitava = henkilot.henkiloid
INNER JOIN taidot
ON arviot.taitoid = taidot.taitoid
INNER JOIN taitoluokat
ON taidot.taitoluokkaid = taitoluokat.taitoluokkaid
WHERE arvioija=arvioitava
GROUP BY arvioitava, oryhma;
```
```
+-----------------+---------------------+---------------+--------------+
| hnimi | oryhma | AVG(tietamys) | AVG(kokemus) |
+-----------------+---------------------+---------------+--------------+
| Indri Insinööri | Käytöspätevyydet | 2.5000 | 2.5000 |
| Indri Insinööri | Tekniset pätevyydet | 4.5000 | 4.5000 |
| Juuso Johtaja | Käytöspätevyydet | 8.0000 | 8.0000 |
| Juuso Johtaja | Tekniset pätevyydet | 8.0000 | 8.0000 |
+-----------------+---------------------+---------------+--------------+
```
### E. Hae KAIKKIEN asiantuntijoiden antamien arvosanojen keskiarvot sekä tietämyksestä että kokemuksesta. Tulokset henkilöittäin. (Vinkki: Alikysely voisi olla helpoin)
```
SELECT henkilot.nimi as hnimi, AVG(tietamys), AVG(kokemus) FROM arviot
INNER JOIN henkilot
ON arviot.arvioitava = henkilot.henkiloid
INNER JOIN taidot
ON arviot.taitoid = taidot.taitoid
INNER JOIN taitoluokat
ON taidot.taitoluokkaid = taitoluokat.taitoluokkaid
WHERE arvioija in (SELECT henkiloid FROM henkilot WHERE rooliid = (SELECT rooliid FROM roolit WHERE nimi = "Asiantuntija"))
GROUP BY arvioitava;
```
```
+-----------------+---------------+--------------+
| hnimi | AVG(tietamys) | AVG(kokemus) |
+-----------------+---------------+--------------+
| Indri Insinööri | 8.5000 | 8.5000 |
| Juuso Johtaja | 9.0000 | 9.0000 |
+-----------------+---------------+--------------+
2 rows in set (0.001 sec)
```
-- MySQL Workbench Forward Engineering
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
-- -----------------------------------------------------
-- Schema tor
-- -----------------------------------------------------
DROP SCHEMA IF EXISTS `tor` ;
-- -----------------------------------------------------
-- Schema tor
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `tor` DEFAULT CHARACTER SET utf8 ;
USE `tor` ;
-- -----------------------------------------------------
-- Table `tor`.`roolit`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `tor`.`roolit` (
`rooliid` INT NOT NULL AUTO_INCREMENT,
`nimi` VARCHAR(45) NOT NULL,
`kuvaus` VARCHAR(3000) NULL,
PRIMARY KEY (`rooliid`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `tor`.`henkilot`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `tor`.`henkilot` (
`henkiloid` INT NOT NULL AUTO_INCREMENT,
`nimi` VARCHAR(45) NOT NULL,
`rooliid` INT NOT NULL,
PRIMARY KEY (`henkiloid`),
INDEX `fk_henkilot_roolit1_idx` (`rooliid` ASC),
CONSTRAINT `fk_henkilot_roolit1`
FOREIGN KEY (`rooliid`)
REFERENCES `tor`.`roolit` (`rooliid`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `tor`.`taitoluokat`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `tor`.`taitoluokat` (
`taitoluokkaid` INT NOT NULL AUTO_INCREMENT,
`nimi` VARCHAR(45) NOT NULL,
`kuvaus` VARCHAR(3000) NULL,
PRIMARY KEY (`taitoluokkaid`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `tor`.`taidot`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `tor`.`taidot` (
`taitoid` INT NOT NULL AUTO_INCREMENT,
`nimi` VARCHAR(45) NOT NULL,
`kuvaus` VARCHAR(3000) NULL,
`taitoluokkaid` INT NOT NULL,
PRIMARY KEY (`taitoid`),
INDEX `fk_taidot_taitoluokat1_idx` (`taitoluokkaid` ASC),
CONSTRAINT `fk_taidot_taitoluokat1`
FOREIGN KEY (`taitoluokkaid`)
REFERENCES `tor`.`taitoluokat` (`taitoluokkaid`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `tor`.`arviot`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `tor`.`arviot` (
`arvioid` INT NOT NULL AUTO_INCREMENT,
`arvioitava` INT NOT NULL,
`arvioija` INT NOT NULL,
`taitoid` INT NOT NULL,
`kokemus` INT NOT NULL,
`tietamys` INT NOT NULL,
INDEX `fk_henkilot_has_taidot_henkilot_idx` (`arvioitava` ASC),
INDEX `fk_arviot_henkilot1_idx` (`arvioija` ASC),
INDEX `fk_arviot_taidot1_idx` (`taitoid` ASC),
UNIQUE INDEX `uq_arvioija_taitoid` (`arvioija` ASC, `taitoid` ASC, `arvioitava` ASC),
PRIMARY KEY (`arvioid`),
CONSTRAINT `fk_henkilot_has_taidot_henkilot`
FOREIGN KEY (`arvioitava`)
REFERENCES `tor`.`henkilot` (`henkiloid`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_arviot_henkilot1`
FOREIGN KEY (`arvioija`)
REFERENCES `tor`.`henkilot` (`henkiloid`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_arviot_taidot1`
FOREIGN KEY (`taitoid`)
REFERENCES `tor`.`taidot` (`taitoid`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment