Question

J'ai 2 tables de base de données: équipes et des jeux

.

Aux fins de cette question, nous avons affaire avec le football (soccer) des équipes et des jeux.

Chaque jeu a exactement deux équipes, généralement une équipe locale et une équipe d'équipes bien parfois les deux peuvent être neutres.

Ma question est de savoir si je représenter cette relation de données à l'aide de 2 clés étrangères dans la table Jeux (equipe_locale_id, equipe_exterieure_id) ou si je devrais utiliser un grand nombre à plusieurs avec une table de games_teams pour relier les deux, auquel cas Je aurais besoin de stocker également si l'équipe était la maison ou de l'équipe loin et semble un peu exagéré.

Pour ajouter à la confusion, je me sers du libs ORM dans KohanaPHP et ceux-ci attendrais un fk à appeler team_id ou une table de lien pour ne contenir que 2 colonnes. Si vous avez une expérience avec ce problème KohanaPHP alors s'il vous plaît laisser une réponse, sinon tout conseil général est également très apprécié.

Était-ce utile?

La solution

Si vous voulez être en mesure d'épingler un badge « Xème Normal Form » sur votre serveur de base de données, il devrait probablement être traitée comme un grand nombre à plusieurs, sinon, je pense que vous allez réduire vos frais généraux de la requête avec 1 moins table que vous allez juste à se joindre à tous temps vous voulez des données utiles sur.

Autres conseils

Il suffit d'utiliser les deux colonnes, sinon vous auriez juste besoin de se qualifier dans la table de menuisier. Ce n'est pas comme si cela est une bombe à retardement de sommeil et tout à coup un jour, vous aurez vous découvrir besoin d'avoir un réel plusieurs à plusieurs.

2 colonnes est parfaitement appropriée ici à mon avis. Le fait qu'il ne peut peut-être deux équipes pour un jeu se reflète dans votre schéma de base de données en ayant deux colonnes. En introduisant une table de liaison, vous introduisons la possibilité qu'un seul jeu pourrait avoir 2 équipes à domicile, 2 équipes de suite, et vous auriez besoin de validation supplémentaire pour faire en sorte que ce scénario ne se produit jamais. En gardant les choses isolées aux deux colonnes, votre schéma applique intrinsèquement l'intégrité des données.

En ce qui concerne la normalisation: Oui. Il y a seulement un à plusieurs ou plusieurs à beaucoup qui obtient décomposé en un ou plusieurs un à plusieurs.

Mais de façon réaliste, si je devais sauver quelque chose comme genre. Est-ce que je vraiment besoin d'un multi-état et un timbre datetime attaché à cela?

La réponse est surprenante: OUI - mais seulement si je dois suivre les changements de sexe pour des raisons commerciales -. À toutes fins utiles, la réponse est NON

Je garde une table avec deux touches -. À moins d'une raison commerciale de le suivre en tant que tel

Selon la façon dont vous avez abstraire, je dirais que match de football doit avoir deux équipes, dans ce cas, ayant les colonnes dans la table de jeu est non seulement plus pratique, il est plus correct.

Je ne pouvais même pas imaginer être parties naturelles de l'équipe id de la clé primaire du jeu.

pense totalement que vous ne devriez pas avoir une table séparée pour cela. Plus facile sur le programmeur, plus facile sur la DB. Bon à penser à la ifs ce que, mais semble que vous avez déjà. Ne pas se laisser penser que la normalisation est toujours la voie à suivre pour tout.

Je respecte les réponses de l'autre à dire que l'utilisation des deux colonnes est le meilleur choix, vous mentionnez toutefois que vous utilisez la bibliothèque ORM dans Kohana. En utilisant deux colonnes dans la table de jeux que vous perdez l'ORM dispose de plusieurs à plusieurs. Si vous configurez un tableau croisé dynamique de games_teams, vous pouvez faire ce qui suit:

$game = ORM::factory('game', 1); // 1 is the game id

Ensuite, vous pouvez faire une boucle à travers les équipes dans ce jeu:

foreach ($game->teams as $team) {
// do stuff with $team
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top