Commit c22c55fb authored by M1888's avatar M1888

trigger

parent 9b55cc4b
......@@ -19,7 +19,17 @@ Vaatimusmäärittelyn pohjalta nousi ainakin seuraavanlaisia käsitteitä:
### 1. [create-kendokanta.sql](create-kendokanta.sql)
Kun kanta oli vihdoin saatu toimimaan, oli aika syöttää tietoja sinne.
Kun kannan skeema oli vihdoin kunnossa, oli aika alkaa työstämään rajoittimia ja triggereitä. Yhden hienon CHECK constraintin ehdin jo kirjoittaa, kunnes muistin, että ne eivät MySQL:ssä tehneetkään mitään.
```SQL
CONSTRAINT `CK_tapahtumaid` CHECK (
CASE WHEN aikalisa_id IS NULL THEN 0 ELSE 1 END +
CASE WHEN jaahy_id IS NULL THEN 0 ELSE 1 END +
CASE WHEN rankkari_id IS NULL THEN 0 ELSE 1 END +
CASE WHEN maali_id IS NULL THEN 0 ELSE 1 END = 1)
```
CHECKin kaltaiset rajoitteet pitikin siis toteuttaa triggereillä.
### 2. [insert-teams.sql](insert-teams.sql)
......@@ -128,13 +138,13 @@ mysql> SELECT * FROM Jaahyt_pelaajat ORDER BY minuutit DESC;
14 rows in set (0.01 sec)
mysql> SELECT * FROM Jaahyt_joukkue ORDER BY minuutit DESC;
+---------+----------+
| nimi | minuutit |
+---------+----------+
| Ässät | 00:12:00 |
| KalPa | 00:11:00 |
| JYP | 00:10:00 |
| Tappara | 00:08:00 |
+---------+----------+
4 rows in set (0.00 sec)
+------------+---------+----------+
| joukkue_id | nimi | minuutit |
+------------+---------+----------+
| 4 | Ässät | 00:12:00 |
| 2 | KalPa | 00:11:00 |
| 1 | JYP | 00:10:00 |
| 3 | Tappara | 00:08:00 |
+------------+---------+----------+
4 rows in set (0.03 sec)
```
......@@ -273,25 +273,11 @@ DELIMITER //
CREATE TRIGGER `vain_yksi_tapahtuma_ins` BEFORE INSERT ON `ottelutapahtuma`
FOR EACH ROW
BEGIN
DECLARE count integer;
SET @count = 0;
IF new.aikalisa_id IS NOT NULL THEN
SET @count = @count + 1;
END IF;
IF new.jaahy_id IS NOT NULL THEN
SET @count = @count + 1;
END IF;
IF new.rankkari_id IS NOT NULL THEN
SET @count = @count + 1;
END IF;
IF new.maali_id IS NOT NULL THEN
SET @count = @count + 1;
END IF;
IF @count != 1 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'ottelutapahtuma check failed';
IF ((CASE WHEN aikalisa_id IS NULL THEN 0 ELSE 1 END) +
(CASE WHEN jaahy_id IS NULL THEN 0 ELSE 1 END) +
(CASE WHEN rankkari_id IS NULL THEN 0 ELSE 1 END) +
(CASE WHEN maali_id IS NULL THEN 0 ELSE 1 END) != 1) THEN
CALL `ottelutapahtuma_liikaa_tapahtumia`;
END IF;
END//
......
......@@ -8,19 +8,20 @@ Tietokanta jääkiekko-otteluiden tapahtumien tallentamiseen.
|---|---|
| Joeli Hokkanen | M1888@student.jamk.fi |
Versio: 0.5 (9.4.2019)
Versio: 0.8 (12.4.2019)
## Johdanto
Ohjelmisto tehdään TTZC0800 Tietokannat -kurssin puitteissa harjoitustyönä. Tavoitteena on toteuttaa tietokanta, jonne voidaan tallentaa tietoa jääkiekkojoukkueista, pelaajista, areenoista, otteluista, sekä ottelutapahtumista.
Lisäksi toteutetaan MS Access -pohjainen käyttöliittymä tietojen lisäilyä ja raporttien katselua varten.
Lisäksi toteutetaan MS Access -pohjainen käyttöliittymä osalle tietokannan ominaisuuksista.
## Yleiskuvus
Järjestelmä sijoitetaan JAMKin student.labranet.jamk.fi -palvelimelle ja tietokantaratkaisuna on MySQL.
Olettamuksia arkkitehtuurista:
- Joukkueilla on kotikaupunki
- Joukkueilla on sopimuksia pelaajista, sopimukseen kuuluu alku- ja loppupäivä sekä pelinumero
- Kaupunki omistaa areenan
......@@ -54,7 +55,7 @@ mysql> INSERT INTO ottelutapahtuma (tyyppi, tapahtuma_id, ottelu_id, aika) VALUE
Suunnittelupöydältä pyörähti sitten ulos kakkosversio, jossa ottelutapahtuma-taulussa on suoraan oma erillinen foreign key jokaiselle ottelutapahtumatyypille, ja näistä rajoitteen avulla täytetään vain yksi. Taulun pääavain tulee ottelu_id:stä, sekä tästä yhdestä täytetystä foreign keystä.
Jotta varmistuttiin, että vain yksi näistä vierasavaimista täytetään kerralla, tuli ottelutapahtuma-taululle kirjoitettua vielä seuraavanlainen constraint:
Jotta varmistuttiin, että vain yksi näistä vierasavaimista täytetään kerralla, tuli ottelutapahtuma-taululle kirjoitettua vielä seuraavanlainen constraint *(myöhemmin tajusin, että eihän nämä CHECKit toimineet MySQL:ssä)*:
```SQL
CONSTRAINT `CK_tapahtumaid` CHECK (
......@@ -85,7 +86,6 @@ Mikään ei auttanut vaikka tämän piti toimia hyvin. Olin jo varma, että Stud
![ER final](er_final.png)
## Toiminnot
Pakollisia toimintoja ovat ainakin:
......@@ -96,9 +96,10 @@ Pakollisia toimintoja ovat ainakin:
4) Pelitapahtumien lisääminen otteluun (maalit, jäähyt, jne)
Lisäksi tulisi saada koosteita mm. seuraavista asioista:
1) Ottelun aikana tehdyt maalit
2) Joukkueiden tilanne (voitetut-hävityt ottelut/pisteet, jne)
3) Pelaajapörssi
2) Joukkueiden pistepörssi (= voitetut ottelut)
3) Pelaajapörssi (= maalit + syötöt)
## Ulkoiset liittymät
......@@ -106,4 +107,4 @@ Kannalle toteutetaan MS Access -pohjainen käyttöliittymä tietojen tarkastelua
## Muut ominaisuudet
Suorituskyky: Vasteajat tulisi olla alle sekunnin luokkaa vaativammissakin koosteissa.
Suorituskyky: Vasteajat tulisi olla käyttämällämme datamäärällä käytännössä välittömiä. Kannan tulisi skaalautua suuremmillekkin datamäärille.
\ No newline at end of file
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