Pakillo,
estoy de acuerdo con Trumpetero. En mi opinión, la mejor solución implica esto:
Tablas:
equipos
id_equipo (PK)
equipo
pilotos
id_piloto (PK)
piloto
refidequipo (FK)
edad
...
carreras
id_carrera (PK)
carrera
fecha
temporada
...
clasificaciones
id_clasificaciones (PK)
refidcarrera(FK)
refidpiloto (FK)
refidposicion (FK)
puntosposicion
id_posicion (PK)
puntos int
Naturalmente, puedes añadir otras e incluso eliminar la tabla puntosposicion y añadir en clasificaciones un campo puntos, como te recomendaba trumpetero.
Por cada uno de los 8 primeros de cada carrera insertas un registro en la tabla clasificaciones con los datos indicados. Puedes poner las posiciones de todos los que terminen, aunque ello no conlleve puntos (conviene guardar datos que luego puedas presentar en la estadística), pues no es lo mismo terminar el noveno que el undécimo. Naturalmente, añades campos en la tabla puntosposicion con 0 puntos para esas otras clasificaciones. E incluso añadir un valor para los que no terminen, aunque eso lo podrías sacar de otro modo.
Luego, por ponerte un ejemplo, una consulta como esta de más abajo te sacará la clasificación de los que intervinieron en la segunda carrera. En el where puedes poner los datos que quieras, año, temporada, etc. O no poner nada y te sumará el total.
Además, luego podrás casi todo lo que se te ocurra con los datos. He puesto la tabla de puntosposicion para el caso de que esos puntos sean siempre los mismos para cada posición, pero, como te he dicho, puedes incluir los puntos en la tabla clasificaciones y evitarte esta tabla.
Código sql:
Ver originalSELECT p.piloto, SUM( pp.puntos ) puntos
FROM `clasificaciones` cl
INNER JOIN pilotos p ON cl.refidpiloto = p.id_piloto
INNER JOIN carreras ca ON cl.refidcarrera = ca.id_carrera
INNER JOIN puntosposicion pp ON pp.id_posicion = cl.refidposicion
WHERE ca.id_carrera =2
GROUP BY p.id_piloto
ORDER BY puntos DESC