Commit 034787e8 authored by M1888's avatar M1888

dokua

parent 56605a01
......@@ -27,33 +27,4 @@ mysql> INSERT INTO ottelutapahtuma (tyyppi, tapahtuma_id, ottelu_id, aika) VALUE
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)
```
Takaisin suunnittelupöydän ääreen siis. Seuraava versio oli sellainen, jossa ottelutapahtuma-taulussa on oma erillinen foreign key jokaiselle ottelutapahtumatyypille, ja näistä täytetään rajoitteen avulla vain ja ainoastaan yksi. Taulun pääavain tulee ottelu_id:stä ja tästä yhdestä täytetystä FK:sta.
Itse kirjoitettu check tätä varten meni näin:
```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)
```
![](er_v2.png)
Mutta edelleen törmättiin samankaltaiseen ongelmaan:
```SQL
mysql> INSERT INTO ottelutapahtuma (ottelu_id, jaahy_id, aika) VALUES (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_aikalisa1` FOREIGN KEY (`aikalisa_id`) REFERENCES `aikalisa` (`aikalisa_id`) ON DELETE NO ACTION ON UPDATE NO ACTION)
```
Googlesta ja StackOverflow'sta aikani luettuani, kokeilin pariakin eri lähestymistapaa:
- Vaihdoin ottelutapahtuma-taulun vierasavaimet UNSIGNED INT -tyyppiin
- Kokeilin määrittää kaikki muut vierasavaimet INSERTin aikana erikseen NULL-arvolle
- Vielä paria erilaista constraintia ja muuta määrettä taululle
Mikään ei auttanut vaikka tämän piti toimia hyvin. Olin jo varma, että Student-palveimen MySQL on liian vanha ja buginen eikä koodissani mitään vikaa ole. Sitten tajusin vielä kokeilla, että jätän FK-määreet näille ottelutapahtuman eri id:ille, mutta teen taululle erillisen oman id:n primary keyksi, näiden neljän fuusion sijaan. Sillä päästiinkin etenemään.
Muutaman eri version jälkeen (ks. [vaatimusmaarittely.md](vaatimusmaarittely.md)), saatiin kanta vihdoin toimimaan.
......@@ -100,7 +100,7 @@ Lisäksi tulisi saada koosteita mm. seuraavista asioista:
## Ulkoiset liittymät
Käyttöliittymä toteutetaan mieluiten joko web-pohjaisena (ensisijainen) tai MS Accessilla (toisisijainen) riippuen jäljellä olevasta käytettävästä ajasta, kun itse tietokanta on saatu toimimaan.
Kannalle toteutetaan MS Access -pohjainen käyttöliittymä tietojen tarkastelua ja lisäilyä varten.
## Muut ominaisuudet
......
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