[Database] ontwerp

Pagina: 1
Acties:

  • paragon
  • Registratie: April 2000
  • Laatst online: 15:37
Ik ben bezig met het onwerpen van een database(schema) In mijn noobheid heb ik alleen een probleem met hoe een bepaald gedeelte vast te leggen. Het volgende is volgens mij wel goed.

Drivers(driverID,Name,Email,carID,)

Cars(carID,Manufacturer,Model,Tires,Class)

Tracks(trackID,Name,Length,Date)

Het probleem zit hem in het volgende hoe kan je het beste een tabel met de standen opnemen zoals op de volgende pagina:

http://www.fscrl.com/gtr2002/gt/sarja_gt_p.html

het gaat om de bovenste tabel. ik zat zelf aan he volgende te denken.

Standings(driverID,track1,track2,track3 enz)

maar volgens mij is dat niet de beste oplossing.

  • muis|IA
  • Registratie: Oktober 2001
  • Laatst online: 18-11-2022
je zou een extra tabel kunnen maken:
Standings(driverID,trackID,position)

of hoe je die position dan ook zou willen noemen
als je met bv meerdere seizoenen werkt zou je ook nog een veld seizoen erbij kunnen zetten

[ Voor 27% gewijzigd door muis|IA op 11-07-2003 11:27 ]

Een vergissing is menselijk maar om er een puinhoop van te maken heb je een computer nodig (met mij erachter)


  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
nee, volgens mij kun je het beste 1 extra tabel aanmaken met
driverID, trackID, score
dan hou je het variabel. anders zou je iedere keer je tabel aan moeten passen als een track wijzigt. En je kunt als soort rule of thumb gebruiken dat als je (het risico loopt) later je tabel aan moet passen dat je database model niet goed is (maar daarom vroeg je het ook ;) )

Verwijderd

Standings (driverID,trackID,stand)

  • paragon
  • Registratie: April 2000
  • Laatst online: 15:37
hmm de antwoorden zijn eenduidig en ik zie nu ook waarom. Om een totaal score van een driver te krijgen doe je gewoon een select op driverid en dan sum(score) of zo...

  • Wilfred
  • Registratie: Januari 2000
  • Laatst online: 22-08-2022
standings (driverID, TrackID, Year, Stand)

Zodat je idd ook over meerdere jaren een coureur of een track kan bekijken

Sign of my Time


  • Freee!!
  • Registratie: December 2002
  • Laatst online: 08:37

Freee!!

Trotse papa van Toon en Len!

Wilfred schreef op 11 July 2003 @ 11:55:
standings (driverID, TrackID, Year, Stand)

Zodat je idd ook over meerdere jaren een coureur of een track kan bekijken
standings (driverID, TrackID, Year, Stand)

Het verdient aanbeveling om sleutelvelden als zodanig te kenmerken (nofi).

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Wilfred schreef op 11 July 2003 @ 11:55:
standings (driverID, TrackID, Year, Stand)

Zodat je idd ook over meerdere jaren een coureur of een track kan bekijken
als dat belangrijk is kun je beter een veld datum opnemen en die van het type DATE maken. Dan kun je er ook mee rekenen of per maand doen ofzo

  • Banpei
  • Registratie: Juli 2001
  • Laatst online: 21-08 13:52
Drivers(driverID,Name,Email,carID,)
Rijd een rijder altijd in dezelfde auto of kan deze nog wel eens wisselen?

  • Freee!!
  • Registratie: December 2002
  • Laatst online: 08:37

Freee!!

Trotse papa van Toon en Len!

Banpei schreef op 11 July 2003 @ 12:47:
[...]

Rijd een rijder altijd in dezelfde auto of kan deze nog wel eens wisselen?
Goede vraag _/-\o_

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


  • paragon
  • Registratie: April 2000
  • Laatst online: 15:37
Das nog niet duidelijk, maar het is naar mijn idee de bedoeling dat de rijder in dezelfde auto het hele seizoen afmaakt. Zo niet dan moet er natuurlijk iets veranderen...iig moet carID uit de driver tabel lijkt me...

Verwijderd

Om het iets verder uit te breiden kan je ook een tabel seizoenen en competities aanmaken, en die te plaatsen ipv datum:
Seasons(SeasonID, CompetitionId, Date_start, Date_end);
En:
Competitions(CompetitionID, Name);

In seizoenen kan bijvoorbeeld staan: (2, 3, 2-3-2003, 2-3-2004) en dan in competities (3, 'Sarjataulukko')

Nu kan je in de tabel Standings ipv het jaar veel meer info koppelen:
standings (driverID, TrackID, SeasonID, Stand)

  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 11:37

ripexx

bibs

Misschien is het handiger als je eerst een duidelijk hebt wat je nu daadwerkelijk wilt, desnoods schrijf je het beschrijvend op. Ga dan langzaam alles uit werken. Zoals al gezegd is kan een rijder wisselen (ongeluk tijdje niet racen), wordt er meerdere keren in een seizoen op hetzelfde circuit gereden. Probeer dus eens alle mogelijkheden op papier te zetten en ga dan je model uitwerken.

buit is binnen sukkel


  • paragon
  • Registratie: April 2000
  • Laatst online: 15:37
De database is alleen nodig voor 1 seizoen en er is 1 competitie. Ik zou het wel zo kunnen maken dat er meerdere seizoenen/competities zjin maar dat is nu geen vereiste. Rijders kunnen zoals het er nu uitziet niet van auto veranderen. Ze kunnen wel races missen dan krijgen ze gewoon geen punten. Er komt dan ook een extra veld positie in de standings tabel want je kan natuurlijk wel een positie behalen zonder dat je puntent krijgt.

Het ging eigenlijk gewoon om de standing tabel. Het blijft dus allemaal erg basic want er zijn maar 4 tabellen als er dan iets moet veranderen levert dat niet zoveel problemen(hoop ik).

  • paragon
  • Registratie: April 2000
  • Laatst online: 15:37
Ik heb dus even de tables aangemaakt en gevuld met wat "dummy" data: http://80.60.91.31/test.php Ik vraag me nu allleen af of het ontwerp van de standings table wel juist is omdat ik niet zie hoe ik tot de volgende soort uitvoer kom: http://www.fscrl.com/gtr2002/gt/sarja_gt_p.html

  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Wat is je query die je gebruikt bij de standings-table?
En wat is het resultaat wat je zou willen hebben?

Wil je de resultaten van 1 track zien voor alle drivers?
Of wil je de resultaten van 1 driver zien voor alle tracks?

  • paragon
  • Registratie: April 2000
  • Laatst online: 15:37
Ik wil eigenlijk het resultaat laten zijn voor alle drivers voor alle tracks met een totaal score. Net zo als de tabel op de aangegeven pagina

Ik probeer nu alleen de totaal score van idere driver te krijgen alleen werkt dit wel:
code:
1
2
3
4
5
6
7
8
9
10
Select
     drivers.Name,standings.Points
From 
     drivers
INNER JOIN 
     standings 
ON 
     drivers.driverID = standings.driverID 
GROUP BY 
     drivers.Name

Echter kan "Select drivers.Name,standings.SUM(Points) From drivers...." niet

[ Voor 58% gewijzigd door paragon op 11-07-2003 16:52 ]


  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Dat zal niet in 1 query gaan lukken, omdat je links de drivers wilt hebben en rechts de tracks en nog per driver het totaal aantal punten.

code:
1
2
3
4
SELECT driver_ID, SUM(score) AS Score
FROM Standings
GROUP BY driver_ID
ORDER BY Score DESC


Hiermee heb je het lijstje van alle drivers met hun score.

Dan zul je per drivers nog alle scores per track op moeten halen

code:
1
2
3
SELECT Track_ID, score
FROM Standings
WHERE Driver_ID = $Driver_ID

  • paragon
  • Registratie: April 2000
  • Laatst online: 15:37
het moet natuurlijk SUM(standings.Points) zijn nu nog de heletable te voorschijnkrijgen

  • Cai
  • Registratie: December 2001
  • Laatst online: 09:43

Cai

Het is imo verstandiger om een tabel aan te maken waarin je de uitkomst van elke wedstrijd plaatst, omdat een stand van iets een berekend beeld is. En dit zijn gegevens die je niet vast wilt leggen,(berekende gegevens gooi je er na de 3e normaal vorm uit, volgens mij).

Zie het als het volgende, in voetbalcompetities slaat men de stand ook niet op, maar de uitkomsten van elke wedstijd, en uit die gegevens word de stand berekend.

Outcome
driverid,trackid,points

De reden dat auto's niet opgenomen zijn, is omdat in het voorbeeldtabel wat je gegeven hebt die informatie niet opgenomen is.

Als je toch wilt weten in welke auto je coureur rijdt neem je deze niet op in je tabel outcome de reden hiervoor is:
stel Schumacher rijdt de 1e race in een ferrarie als jij/de data invoerder, dan bij de 2e race invoert dat hij in een Mclaren rijd accepteert je DB dat. Dat is niet de bedoeling. Dus om inconsistensie te voorkomen, doe je het volgende:

maak een tabel:
Driver-Car
Driver-id,Car-id

Met de juiste SQL-codes kan je nou veel interessante data uit je DB halen.

Er zitten nog meer facetten in je ontwerp waar ik m'n vraagtekens bij heb, maar zoals je zelf zegt, gebruik je hem toch maar één seizoen, dus ik zal die dingen links laten liggen.

Ik hoop dat je er wat aan hebt...succes

  • Cai
  • Registratie: December 2001
  • Laatst online: 09:43

Cai

SQL
TRANSFORM Min(outcome.punten) AS MinVanpunten
SELECT outcome.driver, driver.name, Cars.name, Sum(outcome.punten) AS Totaal
FROM tracks INNER JOIN ((driver INNER JOIN (Cars INNER JOIN [Driver-Car] ON Cars.[car-id] = [Driver-Car].[Car-id]) ON driver.[driver-id] = [Driver-Car].[Driver-ID]) INNER JOIN outcome ON driver.[driver-id] = outcome.driver) ON tracks.[track-id] = outcome.track
GROUP BY outcome.driver, driver.name, Cars.name
PIVOT tracks.naam;

alsteblaft, ik had niks te doen.

Voor het .mdb bestand http://80.61.54.54/auto.mdb

  • paragon
  • Registratie: April 2000
  • Laatst online: 15:37
Hmm dat ziet er erg cool uit :) ik zat zelf een beetje te knutselen en had de standings op een beetje onhandige manier geplaatst qua db ontwerp maar het werkte wel prima voor de website. http://80.60.91.31/standings.php. Zal even kijken of ik jouw versie kan omzetten naar mysql. Het gaat hier btw om een league for online races.

  • Cai
  • Registratie: December 2001
  • Laatst online: 09:43

Cai

offtopic:
TY en NP


Misschien ben je bezig met je opgegeven site, want het is één en al foutmelding

[ Voor 59% gewijzigd door Cai op 14-07-2003 00:54 ]


  • paragon
  • Registratie: April 2000
  • Laatst online: 15:37
Ik was even een tijdje weg maar het is nu eigenlijk wel een beetje gelukt nieet zo goed als die mdb file maar het werkt.

http://www.fscrl.com/EGTRS/standings.php

alleen vind ik de php code gebruikt een beetje omslachtig.

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 21-08 18:29
Misschien kun je die query's op je pagina beter een beetje geordend tonen, dus met wat tabs enzovoorts dan zijn ze wat duidelijker.

edit:Ben je momenteel weer bezig? Want ik zie nu alleen maar errors, terwijl ik eerst wel resultaten te zien kreeg.

[ Voor 37% gewijzigd door djluc op 10-08-2003 16:33 ]

Pagina: 1