README.md 1.54 KB
Newer Older
M1888's avatar
M1888 committed
1 2
# ttzc0800-harkka

M1888's avatar
M1888 committed
3 4
Tietokannat (TTZC0800) kurssin harkkatyö

M1888's avatar
M1888 committed
5
## Suunnitelmavaihe
M1888's avatar
M1888 committed
6 7 8 9 10

**[Vaatimusmäärittelyyn](vaatimusmaarittely.md)** tästä.

Vaatimusmäärittelyn pohjalta nousi ainakin seuraavanlaisia käsitteitä:

M1888's avatar
M1888 committed
11 12 13 14 15 16
- Kaupunki (sisältää areenoja, joukkueilla kotikaupunki)
- Areena (sisältää otteluita)
- Joukkue (sisältää pelaajia)
- Pelaaja (kuuluu joukkueeseen)
- Ottelu (sisältää tapahtumia)
- Tapahtumat (maali & jäähy, eri tauluista)
M1888's avatar
M1888 committed
17

M1888's avatar
M1888 committed
18
## Toteutus
M1888's avatar
M1888 committed
19 20 21 22 23

Lähdettäessä toteuttamaan vaatimusmäärittelyn mukaista ensimmäistä versiota tietokannasta, kannan luonti sujui hyvin ja alustavia tietojakin sai lisättyä. Ongelmat kuitenkin ilmenivät ottelutapahtumia lisätessä. Olin suunnitellut ottelutapahtuman tapahtuma_id:n olevan viittaus jonkin ottelutapahtuman id-tauluun (maali, jäähy, rankkari, aikalisä), ja oikea taulu josta tämä id etsittäisiin pääteltäisiin ottelutapahtuman tyyppi-kentän mukaan.

Tämä ei kuitenkaan onnistunut, vaan MySQL valitti vierasavaimien konfliktista, kun kaikista tauluista ei löytynyktään sopivaa id:tä:

M1888's avatar
M1888 committed
24
```SQL
M1888's avatar
M1888 committed
25 26 27 28 29
mysql> INSERT INTO ottelutapahtuma (tyyppi, tapahtuma_id, ottelu_id, aika) VALUES
    ->     (2, 1, 1, 3*60+14);
    ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`M1888`.`ottelutapahtuma`, CONSTRAINT `fk_ottelutapahtuma_maali1` FOREIGN KEY (`tapahtuma_id`) REFERENCES `maali` (`maali_id`) ON DELETE NO ACTION ON UPDATE NO ACTION)
```

M1888's avatar
M1888 committed
30
Muutaman eri version jälkeen (ks. [vaatimusmaarittely.md](vaatimusmaarittely.md)), saatiin kanta vihdoin toimimaan.