1 votes

Mise en correspondance d'une relation entre des objets d'une même table

J'ai rencontré un problème de conception : dans un projet, j'ai trois tableaux : League, Players, et une table d'association LeagueToPlayers qui établit des connexions multiples entre les deux premières (car un joueur peut jouer simultanément dans deux ligues ou plus) :

League        Players              LeagueToPlayers
Id Name       Id Alias             LeagueId  PlayerId
=--------     ------------         ----------------
1  League A   1  Longcat           1        1
2  League B   2  Leeroy Jenkins    1        2
3  League C   3  xyz               2        1
4  League D   4  qw3rty            2        3
              5  Myrkgrav          3        2
                                   4        1
  (...)           (...)            4        3
                                   5        1

                                     (...)

Mon problème est que je dois maintenant établir une relation de joueur à joueur. De mon point de vue, deux choses peuvent être faites : soit un champ supplémentaire est introduit dans la table Player (mappage d'un autre PlayerId) - ce qui est un assez mauvais pari car, selon toute probabilité, il s'agira d'une relation 1..* - soit une autre table d'association est créée (je n'aime pas vraiment l'idée, mais je suppose qu'il n'y a pas d'autre moyen).

J'aimerais connaître votre point de vue sur cette question... des idées brillantes ?

Salutations, Hal

EDIT : comme mentionné dans les commentaires, il s'agit d'une métaphore. Le type d'objets présents dans la table "Player" varie énormément (pensez à deux cents types distincts) et ils doivent vraiment être mappés de cette façon. Les objets de la table "Player" peuvent se référer les uns aux autres car ils finissent par participer au même processus et, en tant que tels, ils sont liés les uns aux autres. Cette connexion est définitivement 1 *

1voto

instanceof me Points 8419

Si c'est 1:*, alors mettez-le du côté * (ex. parent_id sur la ligne enfant pour une hiérarchie).

Si c'est *:*, utilisez une autre table de corrélation.

1voto

JohnIdol Points 16355

Si je devais maintenir votre base de données après votre départ hypothétique, je prierais pour que vous optiez pour une autre table de corrélation permettant de mettre en correspondance les joueurs entre eux - pour bonne pratique de normalisation, cohérence et facilité de maintenance .

Cette solution est également plus flexible dans le sens où elle vous place probablement dans une meilleure position si vous devez, pour une raison quelconque, étendre le modèle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X