2013-02-18 5 views
0

Je fais un programme de quiz. Dans un questionnaire, j'ai beaucoup de participants, mais d'un autre côté, les participants peuvent entrer de nombreux quiz (au fil du temps). J'ai donc surmonté cette relation plusieurs-à-plusieurs avec une table de liaison. Jusqu'à présent, je peux comprendre ... maintenant pour la difficulté pour moi: un participant peut être soit un groupe, soit un seul joueur. Donc, un quiz a un participant (avec une table de liaison) et ce participant est soit un groupe qui a plusieurs personnes, soit ce joueur est un joueur et une seule personne.Requête liant plusieurs-à-plusieurs relation sur plusieurs tables

table Quiz : PrimaryKey = quiz_id, (name, date,...) 
table QuizParticipant : PrimaryKey = quiz_participant_id, quiz_id 
table ParticipantGroup : PrimaryKey = quiz_participant_id, group_id 
table participantPlayer : PrimaryKey = quiz_participant_id, person_id 

Le problème pour moi est: comment puis-je interroger tous les participants d'un jeu-questionnaire par quiz_id, et les trier par type de préférence (groupe ou joueur)?

Conseils sur la façon de Google ce genre de choses sont utiles aussi bien :)

Répondre

0

C'est une décision de conception intéressante. La façon dont vous procédez peut façonner votre application entière.

Mon conseil est d'enregistrer le type de participant dans chaque cas de participation. Ce serait soit "GROUP" ou "PLAYER" et définirait si le ParticipantID fait référence à un GroupID ou un PlayerID. Cela se traduira par la conception de la base de données la plus propre et la logique de l'application à la fin.

Alors vos tables ressemblent:

Quiz (QuizID, QuizName) QuizParticipation (ParticipationID, ParticipantType, ParticipantID) Groupe (GroupID, GroupName) groupmembers (GroupID, PlayerID) Joueur (PlayerID, Nom)

Vous devrez peut-être créer une contrainte personnalisée pour vous assurer que les doublons ne peuvent pas être créés dans les champs combinés ParticipantID et ParticipationType de la table QuizParticipation ou gérer la génération des clés primaires avec soin.

0

Ma suggestion est de toujours lier vos jeux-questionnaires à des groupes (plusieurs à plusieurs) et de traiter les joueurs individuels en tant que groupe de 1. Ainsi, vos groupes lié à des joueurs (également beaucoup à beaucoup)

0

Si une personne peut appartenir à de nombreux groupes et qu'un groupe peut avoir beaucoup de monde, c'est une relation de plusieurs à plusieurs. Puisque vous savez comment créer ces tables de liaison, créez-en une pour cette relation.

Questions connexes