2010-12-09 18 views
5

Estoy tratando de diseñar una base de datos para almacenar estadísticas de jugadores para varios tipos de deportes.¿Cómo diseñar una base de datos de estadísticas deportivas para deportes múltiples?

En la base de datos, tendría un grupo de jugadores. Cada jugador pertenece a un equipo, y cada equipo juega un solo deporte. Aquí están las tablas que tengo por sólo esa parte hasta el momento:

Player (player_id, Team_ID, Nombre, Apellido)

equipo (Team_ID, Sport_ID, teamname)

Deporte (Sport_ID, SportName)

Ahora quiero almacenar las estadísticas del jugador. Me encuentro con un problema con diferentes jugadores que juegan diferentes deportes y, por lo tanto, tienen que almacenar diferentes tipos de estadísticas para cada deporte. Si estuviera almacenando los jugadores de hockey y jugadores de béisbol, por ejemplo:

  • para los jugadores de hockey que desea almacenar goles y asistencias

  • para los jugadores de béisbol que desea almacenar hits, jonrones y carreras impulsadas.

¿Hay una manera correcta de hacer algo como esto usando una base de datos? ¿Incluso he empezado de la manera correcta?

+0

¿Estás absolutamente seguro de que un jugador solo puede jugar un deporte para un equipo? - p.ej. que no hay posibilidad de que un jugador juegue hockey y beisbol? Si es así, sus tablas hasta ahora se ven bien para mí. – Steve314

+0

Si esto es tarea, es una buena idea decirlo. No significa que no recibirás ayuda. – Steve314

+0

sí, cada jugador nunca juega más de un deporte. Supongo que es una especie de tarea, no realmente. Es un proyecto de demostración que estoy haciendo para alguien. – Curtis

Respuesta

4

La forma correcta es hacer varias tablas, una para cada deporte parece probable.

Player (player_id, Nombre, Apellido)
Equipo (Team_ID, Sport_ID, teamname)
TeamList (Team_ID, player_id)
Deporte (Sport_ID, SportName)
HockeyStats (player_id, Team_ID, año, Objetivos, GamesPlayed, asistencias)
BaseBallStats (player_id, Team_ID, años, BoringSport)

Esto también resuelve la situación con el comercio, que el equipo los puntos se obtuvieron a partir, así como varios deportes.

+0

+1 - probablemente sea cierto si el conjunto de estadísticas que debe guardar para cada deporte es estático (una estadística por columna). – Steve314

+0

También agregué una mejor manera de poner jugadores en equipos. Siento que se puede hacer más para rastrear el intercambio de jugadores, pero por ahora el OP tiene algo con lo que trabajar. –

+0

gracias, eso tiene mucho sentido ahora que lo veo. Por alguna razón, pensé que sería más complicado. – Curtis

2

Su diseño inicial está bien.

Tendrá que crear una mesa para juegos. Entonces, tendrías una tabla de juegos con campos (Game_ID, Sport_ID, Team1_ID, Team2_ID) y luego quizás (Date_Played, Win_Lose_Tie, etc.)

Luego colocaría Crear una tabla de estadísticas para cada deporte. TBL_Baseball_Stats (Stat_ID, game_id, player_id, hits, jonrones, carreras impulsadas etc ...

entonces usted podría tener una mesa de hockey sobre Estadísticas. TBL_Hockey_Stats (Stat_ID, game_id, player_id, goles, asistencias, etc ...)

Esto le permitirá extraer estadísticas por Jugador, Juego, Deporte, etc. ...

+0

+1 especialmente para asociar estadísticas con juegos particulares - buen punto, suponiendo que sea necesario. – Steve314

+0

Gracias por su ayuda, no me preocupan las estadísticas de los juegos individuales o los resultados del juego (el equipo gana o pierde). – Curtis

2

Un enfoque alternativo es una sola tabla con una columna de ID de estadística que identifica qué estadística se describe en esa fila. puede funcionar bien si las estadísticas que se guardarán cambiarán con el tiempo.Solo funcionará bien si la forma básica de cada estadística es la misma (lo siento, soy británico y no estoy familiarizado con los deportes y las estadísticas que mencionas), pero hay variantes menores de varias mesas (todas las estadísticas porcentuales en una tabla, todas las estadísticas de conteo simple en otro, etc.).

1

Si desea poder crear dinámicamente nuevos deportes, sin modificar la base de datos, deberá crear algo lo suficientemente inteligente como para generalizar el almacenamiento de cualquier tipo de estadísticas. Cualquiera que sea su elección, no podrá hacer eso con una sola tabla.

Si tiene un número determinado de deportes diferentes, le recomendaría que cree una tabla por estadística.

Si no (desea poder crear nuevos deportes en el futuro con sus estadísticas), debe buscar cómo abstraer tal cosa. Algunos proyectos de Toughts:

  • un deporte tiene muchas estadísticas
  • una estadística tiene muchos campos y un deporte
  • un campo tiene muchas propiedades (tipo, valor, etc.)

Si el los mismos contornos aparecen en diferentes estadísticas, puede aprovechar la herencia de la tabla.

4

Puede obtener inspiración en sportsdb, un esquema rdbms para modelado deportivo creado por XML Team. En ese esquema, las estadísticas del juego y los jugadores se almacenan en tablas desnormalizadas, y las estadísticas centrales (como el puntaje) se mantienen separadas de las específicas del deporte. El esquema es bastante complejo, pero puede darle una idea acerca de una posible implementación

+0

+1 más o menos lo que el usuario está tratando de lograr – mateoc

0

debe tener en cuenta que hay ciertos atletas que tienen el mismo nombre (primero y último) para tomar eso en consideración al definir las claves principales.

Para el béisbol hay muchos tipos diferentes de estadísticas. Intentaré cumplir las expectativas con los DB de la competencia al menos agregando AVG./Juegos/Carreras/Hits/AB/SB/2B/3B. y las estadísticas del lanzador también - W/ERA/WHIP/SO.

1

Múltiples deportes tienen su propio tipo de regla para que pueda usar el uso de bases de datos basadas en documentos (Ej .: MONGODB) porque es flexible y no tiene una columna específica.

Cuestiones relacionadas