SQL mening gevraagd
Ik heb een tabel met allemaal wedstrijden in (id = wid) daarnaast heb ik een tabel met alle leden/spelers (id = lid) nu wou ik na elke match laten weten wie er welke wedstrijd mee heeft gespeeld en hoeveel punten die gemaakt heeft.
Ik hiervoor een koppeltabel aangemaakt, geven jullie even je mening of dit een goede datamodel keuze is?
Hou je hier ook de uitslag van de wedstrijd bij? Ik zie hier bv. geen mogelijkheid om aan te geven in welke minuut er is gescoord, of het een penalty is, eerste/tweede helft, verlenging, etc.
Ik heb al een tabel met verslagen.
voorbeeld van een match met 2 verslagen (2de verslag is wat ik zou vervangen door dit systeem):
• backtics kunnen weg
• int(11) of int(3) maakt geen verschil voor MySQL; ze zijn allemaal even groot
• maak de combi wid/lid UNIQUE. Dan krijg je geen verdubbelingen voor spelers per wedstrijd
Ook met basketbal heb je verschillende types, bv. de 3-punter. Of je dit ook wilt opslaan, laat ik even in het midden, maar ik zou er voor kiezen dat dit wel mogelijk is. Vervolgens ga je per wedstrijd alle scores per speler invoeren en je hebt direct de uitslag per wedstrijd te pakken. Dat is namelijk een berekend resultaat.
• Backtics zijn gegenereerd door phpmyadmin en had geen zin ze te verwijderen.
• int(3) is omdat score toch nooit boven 100 zal gaan per speler (zou ik dan beter int(2) nemen?)
• combinatie wid-lid UNIQUE, had ik ook al aan gedacht, maar wist dit niet te realiseren.. Heb je ms een voorbeeldje?
@Frank:
• ik kan daarnaast ook nog kolommen invoegen hoeveel keer dit een lay-up, vrijworp, shot en 3punter inhield.
• Wedstrijdscore berekenen op basis van de spelers-score is niet mogelijk omdat niet bij alle matchen (lees: bij de jeugdploegen) de scores van de spelers ingevoerd word. (vandaar de mogelijkheid tot NULL bij score)
Gewijzigd op 01/01/1970 01:00:00 door Hipska BE
Wanneer je de uitslag niet kunt berekenen, zorg wel voor een hele goede controle van de uitslagen en de scores van de spelers. Je loopt namelijk het risico op corrupte data, bv. een uitslag van 48-63, maar de spelers van de thuisploeg hebben totaal 50x gescored...
UNIQUE maken kun je gewoon in phpMyAdmin doen. De twee velden aanvinken en op het ikoontje met de U klikken.
Edit:
en mocht je geen phpMyAdmin hebben:
ALTER TABLE tabelnaam ADD UNIQUE (
lid,
wid
);
en mocht je geen phpMyAdmin hebben:
ALTER TABLE tabelnaam ADD UNIQUE (
lid,
wid
);
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
Code (php)
1
2
3
4
5
6
2
3
4
5
6
CREATE TABLE wedstrijdspelers (
wid int(11) NOT NULL default '0',
lid int(11) NOT NULL default '0',
score tinyint(2) default NULL,
UNIQUE KEY uniek (wid,lid)
) TYPE=MyISAM COMMENT='Koppeltabel';
wid int(11) NOT NULL default '0',
lid int(11) NOT NULL default '0',
score tinyint(2) default NULL,
UNIQUE KEY uniek (wid,lid)
) TYPE=MyISAM COMMENT='Koppeltabel';
verder kan ik ook het aantal fouten er bij laten zetten (max. 5)
@Jan:
• oei, die unique heb ik via index toevoegen gedaan, is hetzelfde zeker?
• die unsigned heb ik nog niet gevonden, maar komt ms wel (waarvoor dient die juist?) punten zijn altijd positief
@Frank: ja, men kan maar verslagen e.d. toevoegen als de score is ingevoerd, zodat ik zeker kan controleren.
Quote:
@Jan:
• oei, die unique heb ik via index toevoegen gedaan, is hetzelfde zeker?
• die unsigned heb ik nog niet gevonden, maar komt ms wel (waarvoor dient die juist?) punten zijn altijd positief
• oei, die unique heb ik via index toevoegen gedaan, is hetzelfde zeker?
• die unsigned heb ik nog niet gevonden, maar komt ms wel (waarvoor dient die juist?) punten zijn altijd positief
Via index toevoegen kan het ook.
Die unsigned doe je in phpMyAdmin met het vak 'attributen'. Het kan ook via een query:
ALTER TABLE tabelnaam
CHANGE veldnaam veldnaam INT( 11 ) UNSIGNED NOT NULL
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
CREATE TABLE wedstrijdscore (
wid int(11) NOT NULL default '0',
lid int(11) NOT NULL default '0',
totaal tinyint(2) unsigned default NULL,
lay-up tinyint(2) unsigned default NULL,
shot tinyint(2) unsigned default NULL,
vrijworp tinyint(2) unsigned default NULL,
3punter tinyint(2) unsigned default NULL,
fouten tinyint(1) unsigned default NULL,
UNIQUE KEY uniek (wid,lid)
) TYPE=MyISAM COMMENT='Koppeltabel';
wid int(11) NOT NULL default '0',
lid int(11) NOT NULL default '0',
totaal tinyint(2) unsigned default NULL,
lay-up tinyint(2) unsigned default NULL,
shot tinyint(2) unsigned default NULL,
vrijworp tinyint(2) unsigned default NULL,
3punter tinyint(2) unsigned default NULL,
fouten tinyint(1) unsigned default NULL,
UNIQUE KEY uniek (wid,lid)
) TYPE=MyISAM COMMENT='Koppeltabel';