Toon posts:

[MySQL] wedstrijd schema database!

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een database met clubs, teams, gebruikers enzovoorts.
Nu wil ik dus bezig met de tables voor de wedstrijden. Hoe kan ik dit het best doen.

Hieronder krijgen we in table teammatch elke keer twee lijnen per match (één voor thuisteam en één voor uitteam)
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE TABLE `match` (
    `match_id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
    `match_datetime` DATETIME NOT NULL,
    `match_season` DATE NOT NULL DEFAULT '2004-08-01',
    `match_class_id` SMALLINT UNSIGNED NOT NULL,
    `match_region_id` TINYINT UNSIGNED NOT NULL,
    `match_hall_id` TINYINT UNSIGNED NOT NULL,
    PRIMARY KEY  (`match_id`, `match_season`)
);

CREATE TABLE `teammatch` (
    `teammatch_match_id` INT UNSIGNED NOT NULL,
    `teammatch_club_id` SMALLINT UNSIGNED NOT NULL,
    `teammatch_team_id` TINYINT UNSIGNED NOT NULL,
    `teammatch_home` ENUM('H','O') NOT NULL,
    `teammatch_sets` TINYINT NOT NULL,
    PRIMARY KEY  (`teammatch_match_id`, `teammatch_club_id`, `teammatch_team_id`)
);

of is het sneller en eenvoudiger op deze manier.
Hier vul ik alles gewoon direct in één tabel.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CREATE TABLE `match` (
    `match_id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
    `match_datetime` DATETIME NOT NULL,
    `match_season` DATE NOT NULL DEFAULT '2004-08-01',
    `match_class_id` SMALLINT UNSIGNED NOT NULL,
    `match_region_id` TINYINT UNSIGNED NOT NULL,
    `match_hall_id` TINYINT UNSIGNED NOT NULL,
    `teammatch_home_club_id` SMALLINT UNSIGNED NOT NULL,
    `teammatch_home_team_id` TINYINT UNSIGNED NOT NULL,
    `teammatch_home_team_sets` TINYINT UNSIGNED NOT NULL,
    `teammatch_out_club_id` SMALLINT UNSIGNED NOT NULL,
    `teammatch_out_team_id` TINYINT UNSIGNED NOT NULL,
    `teammatch_out_team_sets` TINYINT UNSIGNED NOT NULL,
    PRIMARY KEY  (`match_id`, `match_season`)
);

Vraag mij af wat beter te gebruiken is.
Of zouden jullie het nog anders doen??

Heb gezocht, maar kon zo niets vinden. tips over hoe ik kan kijken wat de minste proc. tijd kost en hoe ik kan berekenen wat minder belastend is voor de server is altijd welkom.

  • Cavorka
  • Registratie: April 2003
  • Laatst online: 27-03-2018

Cavorka

Internet Entrepreneur

Moet je niet in je tabel (je eerste model) het team_id erbij hebben en niet het match_id in je team tabel? Ik vind dat namelijk een beetje rare oplossing. Je zou dan namelijk

Oplossing twee lijkt me zowieso geen oplossing (Johan Cruyff stylee :+). Dan krijg je geheid problemen met data.

Waarom is season een DATE trouwens?

Ik denk dat het makkelijkst zoiets zou zijn:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE TABLE `match` (
    `match_id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
    `match_datetime` DATETIME NOT NULL,
    `match_season` DATE NOT NULL DEFAULT '2004-08-01',
    `match_class_id` SMALLINT UNSIGNED NOT NULL,
    `match_region_id` TINYINT UNSIGNED NOT NULL,
    `match_team_home_id` INT UNSIGNED NOT NULL,
    `match_team_away_id` INT UNSIGNED NOT NULL,
    `match_hall_id` TINYINT UNSIGNED NOT NULL,
    PRIMARY KEY  (`match_id`, `match_season`)
);

CREATE TABLE `teammatch` (
    `teammatch_club_id` SMALLINT UNSIGNED NOT NULL,
    `teammatch_team_id` TINYINT UNSIGNED NOT NULL,
    `teammatch_home` ENUM('H','O') NOT NULL,
    `teammatch_sets` TINYINT NOT NULL,
    PRIMARY KEY  (`teammatch_match_id`, `teammatch_club_id`, `teammatch_team_id`)
);


Ik zou zeggen, lees eens wat over normaliseren.
Hier en daar.

[ Voor 103% gewijzigd door Cavorka op 09-07-2004 19:28 ]

the-blueprints.com - The largest free blueprint collection on the internet: 50000+ drawings.


Verwijderd

Topicstarter
Cavorka schreef op 09 juli 2004 @ 19:19:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE TABLE `match` (
    `match_id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
    `match_datetime` DATETIME NOT NULL,
    `match_season` DATE NOT NULL DEFAULT '2004-08-01',
    `match_class_id` SMALLINT UNSIGNED NOT NULL,
    `match_region_id` TINYINT UNSIGNED NOT NULL,
    `match_team_home_id` INT UNSIGNED NOT NULL,
    `match_team_away_id` INT UNSIGNED NOT NULL,
    `match_hall_id` TINYINT UNSIGNED NOT NULL,
    PRIMARY KEY  (`match_id`, `match_season`)
);

CREATE TABLE `teammatch` (
    `teammatch_club_id` SMALLINT UNSIGNED NOT NULL,
    `teammatch_team_id` TINYINT UNSIGNED NOT NULL,
    `teammatch_home` ENUM('H','O') NOT NULL,
    `teammatch_sets` TINYINT NOT NULL,
    PRIMARY KEY  (`teammatch_match_id`, `teammatch_club_id`, `teammatch_team_id`)
);


Ik zou zeggen, lees eens wat over normaliseren.
Het tweede gedeelte is niet mijn team tabel.
de tweede was mijn veel op veel relatie :)
ik gebruik om mijn team op te roepen een combinatie van club_id en team_id.

  • Cavorka
  • Registratie: April 2003
  • Laatst online: 27-03-2018

Cavorka

Internet Entrepreneur

Verwijderd schreef op 09 juli 2004 @ 19:26:
ik gebruik om mijn team op te roepen een combinatie van club_id en team_id.
Ah, k, op die manier.

Wat is precies je hele database layout? Want ik kan wel gaan proberen dingen uit te leggen, maar als dan blijkt dat dat niet kan is dat een beetje nutteloos.
Het lijkt er dus ook een beetje op dat daar ook een knelpunt zit. Je moet en het club_id en het team_id weten. Maar ehm, is het team_id dan niet uniek?

Maar anyways, ik geloof dat ik er wat snel overheen las (over de tweede optie)... nu ik nog een keer kijk, is dat wel een stuk handiger, alhoewel ik nog steeds niet begrijp waarom je die beide ID's nodig hebt. :) Met de 2e optie heb je alle webstrijd informatie in een ROW.

[ Voor 29% gewijzigd door Cavorka op 09-07-2004 19:34 ]

the-blueprints.com - The largest free blueprint collection on the internet: 50000+ drawings.


Verwijderd

Topicstarter
Uhm, hoe ga ik dit makkelijk uitleggen.
post wel even hoe ik het nu heb.
is niet meer helemaal up to date.
maar toch.
Afbeeldingslocatie: http://members.home.nl/devinity/table.png

  • McFreak
  • Registratie: December 2000
  • Laatst online: 27-04 21:09

McFreak

McFraGG de gekste !!

offtopic:
Ey met welk prog heb je die classdiagram gemaakt ?

De 2e lijkt me sneller hier hoef je in veel gevallen maar 1 querie te doen, terwijl je bij de eerste er meer moet doen, bv bij toevoegen moet je in 3 tabellen gaan schrijven per match (als ik je goed begrijp tenm )

McFraGG de gekste !!


Verwijderd

Topicstarter
FabForce DBDesigner.
www.fabforce.net

Bij het toevoegen moet je inderdaad 2 insert queries uitvoeren, maar de inserts worden 1 maal per half jaar gedraait (dan zijn de nieuwe wedstrijd schema's beschikbaar). Dus daar zal het niet aan liggen.

selects kan allebei met één regel.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT tm1.teammatch_match_id, c1.club_name, t1.team_type, t1.team_nr, c2.club_name, t2.team_type, t2.team_nr, tm1.teammatch_sets, tm2.teammatch_sets
FROM `teammatch` as tm1, `teammatch` as tm2, `club` as c1, `club` as c2, `team` as t1, `team` as t2
WHERE tm1.teammatch_match_id=tm2.teammatch_match_id
AND tm1.teammatch_home='H'

AND tm1.teammatch_club_id=c1.club_id
AND tm2.teammatch_club_id=c2.club_id
AND c1.club_id<>c2.club_id

AND tm1.teammatch_team_id=t1.team_id
AND tm2.teammatch_team_id=t2.team_id
AND tm1.teammatch_club_id=t1.team_club_id
AND tm2.teammatch_club_id=t2.team_club_id

ORDER BY tm1.teammatch_match_id, tm1.teammatch_home


zo snel even van de eerste. Kan veel korter, maar zo is hij lekker eenvoudig om mee te PHP-en :)

[ Voor 9% gewijzigd door Verwijderd op 09-07-2004 20:07 ]

Pagina: 1