Moderator |
|
De combinatie af_season_id + af_position is wellicht uniek, in die zin dat een team in elk seizoen precies één positie bekleed, maar deze positie kan door een win- of verliesbeurt kunnen gaan toebehoren aan een ander team (team promoveert/degradeert n.a.v. een uitslag). Daarom lijkt mij deze combinatie niet echt geschikt als "identificerend attribuut(paar)".
Wat ik voor de UPDATE-statements zou gebruiken is af_season_id en af_team_id maar als je op grond hiervan een UPDATE query uitvoert komt je in de knoei met de unique constraint op af_season_id + af_position, of je moet alle UPDATE-queries uitvoeren in een volgorde waarmee je de (tijdelijke) introductie van een dubbel af_season_id + af_position vermijd, of je moet tijdelijk je KEYS disablen tijdens het uitvoeren van je UPDATE-proces maar dat lijkt mij niet de bedoeling.
Ik denk dat de beste oplossing een herstructurering van je database is, het lijkt namelijk alsof je meerdere zaken (wedstrijden, uitslagen, stand in het klassement) in één tabel hebt proberen te verenigen.
De stand in het klassement is de uitkomst van een of andere berekening, het kan handig zijn om de uitkomsten van berekeningen op te slaan in een database(tabel) maar deze gegevens zijn in zekere zin redundant (afleidbaar uit andere zaken (wedstrijden + scores)). Maar nu staat dus alles bij (of door) elkaar . Als de berekening van de stand in het klassement te vangen is in PHP (of zelfs in MySQL), dan zijn straks de uitkomsten van de wedstrijden (en door welke partijen deze gespeeld zijn, en in welk seizoen) het enige wat je als gebruiker hoeft in te voeren, de rest is afleidbaar!
Als ik bovenstaande gegevens bekijk, heb je ongeveer de volgende tabellen/informatie nodig:
seizoenen
id
datum_begin
datum_eind
teams
id
naam
...
wedstrijden
id
datum
seizoen_id
partij_thuis_team_id
partij_uit_team_id
score_thuis
score_uit
(en mogelijk hier een soort van (redundante) indicatie van wie de wedstrijd heeft gewonnen, bijvoorbeeld: winnaar_partij_id met het partij_id van de winnaar of geen partij_id (NULL) in geval gelijkspel)
En dan, als het handig is om deze resultaten te "cachen" een tabel
ladders (ofzo)
seizoen_id
positie
partij_id
totaal_X (wat je allemaal wilt bijhouden in totaalscores)
totaal_Y
totaal_Z
...
Elke keer als je de ladder bijwerkt verwijder je alle entries van het huidige seizoen, en bereken je deze opnieuw.
Come to think of it, dat kun je dus ook doen met jouw data hierboven. Als af_endranking_id verder helemaal geen betekenis heeft (het dient alleen als auto_increment veld) kun je alles van seizoen 109 wegkieperen en alles opnieuw INSERTen.
Toch zou ik serieus overwegen om je database wat gestructureerder op te zetten, en alle afgeleide/berekende gegevens te verplaatsen naar een aparte resultaattabel, of, als deze berekening redelijk triviaal is, deze elke keer on-the-fly uit te voeren. |