J'essaie de concevoir une base de données pour stocker des statistiques sur les joueurs pour plusieurs types de sports. P>
Dans la base de données, vous auriez un groupe de joueurs. Chaque joueur appartient à une équipe et chaque équipe joue un sport. Voici les tables que j'ai pour juste cette partie jusqu'à présent: p>
lecteur (player_id, taper_id, prénom, lastname) p>
équipe (Team_id, Sport_ID, TeamName) P>
Sport (Sport_ID, SportName) P>
Maintenant, je veux stocker les statistiques du joueur. Je rencontre un problème avec différents joueurs jouant des sports différents et je devais donc stocker différents types de statistiques pour chaque sport. Si je stockais des joueurs de hockey et des joueurs de baseball par exemple: p>
pour les joueurs de hockey, je veux stocker des objectifs et des assistants p> li>
Pour les joueurs de baseball, je veux stocker des hits, des courses à la maison et des rbis. P> Li> ul>
Y a-t-il une bonne façon de faire quelque chose comme celui-ci en utilisant une base de données? Ai-je même commencé la bonne façon? P>
7 Réponses :
La manière appropriée est de faire plusieurs tables, une pour chaque sport semble probable. P>
lecteur (player_id, prénom, lastname)
Équipe (Team_id, Sport_id, TeamName)
Teamlist (Team_id, Player_id)
Sport (Sport_ID, SportName)
Hockeystats (player_id, taper_id, année, buts, jeu de jeux, passes d'aide)
BaseballStats (Player_id, Team_id, Années, Boringsport) P>
Cela résout également la situation avec le trading, quelle équipe les points ont été obtenus de, ainsi que de nombreux sports. P>
+1 - probablement vrai si l'ensemble des statistiques à conserver pour chaque sport est statique (une statistique par colonne).
J'ai aussi ajouté une meilleure façon de mettre les joueurs dans des équipes. J'ai envie qu'il y ait plus que cela puisse être fait pour suivre le négoce des joueurs, mais pour l'instant, l'OP a quelque chose à travailler avec.
Merci, cela a beaucoup de sens maintenant que je le vois. Pour une raison quelconque, je pensais que ce serait plus compliqué.
Votre conception initiale est OK. p>
Vous devrez créer une table pour les jeux. Donc, vous auriez une table de jeux avec des champs (game_id, sport_id, équipe1_id, équipe2_id), puis peut-être (date_played, win_lose_tie, etc.) p>
Je placerais alors créer une table de statistiques pour chaque sport. Tbl_baseball_stats (stat_id, game_id, player_id, hits, hrs, rbis, etc ... p>
Ensuite, vous pourriez avoir une table pour les statistiques de hockey. Tbl_hockey_stats (stat_id, game_id, player_id, buts, passes, etc ...) p>
Cela vous permettra de tirer des statistiques par lecteur, jeu, sport, etc. p>
+1 En particulier pour associer des statistiques avec des jeux particuliers - Bon point, en supposant que ce soit nécessaire.
Merci pour votre aide, je ne suis pas préoccupé par des statistiques pour des jeux individuels ou des résultats du jeu (équipe gagne ou perd).
Une autre approche est une seule table avec une colonne de statistique-ID, identifiant quelle statistique est décrite dans cette ligne. Cela peut bien fonctionner si les statistiques à maintenir changeront au fil du temps. Cela ne fonctionnera que si la forme de base de chaque statistique est la même (désolée, je suis britannique et non familiaris avec les sports et les statistiques que vous mentionnez), mais il existe des variantes mineures multi-tableaux (toutes les statistiques de pourcentage d'une table, toutes les statistiques simples-comptent dans un autre, etc.). P>
Si vous voulez pouvoir créer de nouveaux sports de manière dynamique, sans modifier la base de données, vous devrez créer quelque chose d'intelligent suffisamment intelligent pour généraliser le stockage de tout type de statistiques. Quel que soit votre choix, vous ne pourrez pas faire cela avec une seule table. P>
Donc, si vous avez un nombre déterminé de différents sports, je vous recommanderais de créer une table par statistique. P>
Si non (vous voulez être capable de créer de nouveaux sports dans le futur avec leurs statistiques), vous devez rechercher comment résumer une telle chose. Quelques arrières difficiles: p>
Si les mêmes contours apparaissent dans différentes statistiques, vous pouvez tirer parti de l'héritage de la table. P>
Vous pouvez vous inspirer de Sportsdb , un schéma SMDBMS pour la modélisation sportive créée par l'équipe XML. Dans ce schéma, les statistiques de jeu et de joueurs sont stockées dans des tables dénormalisées et que les statistiques principales (similaires) sont séparées des sports. Le schéma est assez complexe, mais peut vous donner une idée d'une éventuelle implémentation p>
+1 à peu près ce que l'utilisateur essaie d'accomplir
Vous devez noter qu'il existe certains athlètes qui ont le même nom (premier et dernier) à ce sujet considérant que lors de la définition des clés primaires. P>
Pour le baseball, il y a beaucoup de types de statistiques différents, j'essaierais de répondre aux attentes de la concurrence DBS en ajoutant au moins AVG. / Jeux / Runs / Hits / AB / SB / 2B / 3B. et statistiques de pichet aussi bien-w / ère / fouet / so. p>
Multiple Sport a son propre type de règle, vous pouvez donc utiliser une base de données basée sur les documents (par exemple: MongoDB), car il est flexible et ne dispose pas de la colonne spécifique. P>
Êtes-vous absolument certain qu'un joueur ne peut jouer qu'un seul sport pour une équipe? - par exemple. qu'il n'y a aucune chance qu'un joueur puisse jouer au hockey et au baseball? Si oui, vos tables vont jusqu'à présent bien pour moi.
S'il s'agit de devoirs, c'est une bonne idée de le dire. Cela ne signifie pas que vous n'obtiendrez pas d'aide.
Oui, chaque joueur ne joue jamais plus d'un sport. C'est une sorte de devoirs je suppose, pas vraiment, c'est un projet de démonstration que je fais pour quelqu'un.