Mysql
 sql >> Base de données >  >> RDS >> Mysql

Plusieurs à plusieurs sur la même table

Si la relation que vous décrivez est symétrique, comme dans "Bob est un ami de Joe" signifie "Joe est aussi un ami de Bob", alors vous pouvez vous assurer dans votre code que le plus petit des 2 ID utilisateur va sur le première colonne, et le plus grand va sur la deuxième colonne. Cette contrainte garantit à peu près que les enregistrements de votre table de recherche seront uniques. Cela signifie également que lorsque vous effectuez une recherche, vous devez généralement effectuer une recherche dans les deux colonnes.

Par exemple, si vous essayez d'obtenir tous les amis de Bob, vous devrez rechercher les enregistrements contenant l'ID de Bob dans l'une ou l'autre des colonnes. Cela entraîne un peu plus de code et peut-être un impact sur les performances.

Si la relation peut être asymétrique, comme dans "Bob est un ami de Joe" ne signifie pas nécessairement "Joe est aussi un ami de Bob", alors vous avez besoin de 2 entrées pour chaque paire d'utilisateurs :Bob - Joe et Joe - Bob. Cela signifie que votre table de recherche contiendra deux fois plus d'entrées et aussi que votre site est très convivial pour les harceleurs :D Bien sûr, vous pouvez toujours choisir d'appliquer ce système même si votre relation est symétrique.

En utilisant cette méthode, si vous voulez obtenir tous les amis de Bob, il vous suffit de sélectionner les enregistrements avec l'ID de Bob dans la première colonne. Il est possible que cela signifie des recherches plus rapides et moins de code à écrire, mais encore une fois, cela signifie que vous prenez plus de place dans votre base de données.