SQL mening gevraagd

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Hipska BE

Hipska BE

20/09/2006 20:29:00
Quote Anchor link
hoi mensen, even jullie 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?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
CREATE TABLE `wedstrijdspelers` (
  `wid` int(11) NOT NULL default '0',
  `lid` int(11) NOT NULL default '0',
  `score` int(3) default NULL
) TYPE=MyISAM COMMENT='Koppeltabel';
 
PHP hulp

PHP hulp

18/11/2024 09:49:49
 
Frank -

Frank -

20/09/2006 20:31:00
Quote Anchor link
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.
 
Hipska BE

Hipska BE

20/09/2006 20:41:00
Quote Anchor link
(Tip: het is basketbal)

Ik heb al een tabel met verslagen.
voorbeeld van een match met 2 verslagen (2de verslag is wat ik zou vervangen door dit systeem):
 
Jan Koehoorn

Jan Koehoorn

20/09/2006 20:46:00
Quote Anchor link
Tips:
• 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
 
Frank -

Frank -

20/09/2006 20:49:00
Quote Anchor link
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.
 
Hipska BE

Hipska BE

20/09/2006 20:50:00
Quote Anchor link
@Jan:
• 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
 
Frank -

Frank -

20/09/2006 20:57:00
Quote Anchor link
Gebruik een TINYINT, dat is beter dan een INT(3).

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...
 
Jan Koehoorn

Jan Koehoorn

20/09/2006 21:06:00
Quote Anchor link
Nogmaals, INT(3) of INT(11) maakt niets uit. Ik heb het uitgebreid getest en het bereik van een INT is altijd even groot. Frank's optie van een TINYINT is dan beter. Je zou hem nog UNSIGNED kunnen maken als je zeker weet dat je alleen positieve getallen nodig hebt, dan heb je nog iets uitloop na de 100.

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
);
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
 
Hipska BE

Hipska BE

20/09/2006 21:19:00
Quote Anchor link
ok, ik heb nu dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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';


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.
 
Jan Koehoorn

Jan Koehoorn

20/09/2006 21:37:00
Quote Anchor link
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

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
 
Hipska BE

Hipska BE

20/09/2006 22:26:00
Quote Anchor link
Thanks.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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';
Nog iemand opmerkingen?
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.