2010-05-09 6 views
0

J'ai une base de données SQL Server avec deux table: Utilisateurs et réalisations. Mes utilisateurs peuvent avoir plusieurs réalisations, donc une relation plusieurs-à-plusieurs.Recommandation de conception plusieurs-à-plusieurs SQL Server

À l'école, nous avons appris à créer une table associative pour ce genre de relation. Cela signifie créer une table avec un UserID et un AchivementID. Mais si j'ai 500 utilisateurs et 50 réalisations qui pourraient conduire à 25 000 lignes. En guise d'alternative, je pourrais ajouter un champ binaire à ma table Utilisateurs. Par exemple, si ce champ contenait 10010, cela signifierait que cet utilisateur a débloqué les première et quatrième réalisations.

Est-ce le contraire? Et lequel devrais-je utiliser.

+0

Ces réalisations doivent-elles être complétées ou débloquées dans l'ordre consécutif? – NitroxDM

+3

utiliser des tables associatives, si chaque utilisateur a 50 réalisations, alors ce sera 25000 lignes. Est-ce que chaque utilisateur aura 50? Je ne le pense pas. Et d'autres que voulez-vous réaliser, réduire l'espace disque ou des requêtes efficaces? – berkay

+2

Utilisez la troisième table, il y a 25000 relations possibles et je doute que chaque utilisateur gagne chaque achivement et même si c'est le cas, c'est une solution beaucoup plus flexible. –

Répondre

2

Votre alternative n'est pas du tout une très bonne approche. Non seulement n'est-il pas interrogeable (combien de personnes ont débloqué la réussite # 10?), Mais cela ne veut rien dire. De plus, qu'allez-vous faire si vous ajoutez 5 réalisations supplémentaires? Mettre à jour tous les utilisateurs précédents pour ajouter "00000" à la fin de leur colonne "réalisations"?

Il n'y a rien de mal avec la table associative tant que vous l'indexez correctement. En utilisant cette approche, les données sont infiniment interrogeables et - peut-être plus important encore - ont du sens!

Questions connexes