Table d'amis MySQL
J'ai une DB MySQL à qui j'ai d'enregistrer les données de chaque utilisateur.
Je voudrais ajouter une liste d'amis pour chaque utilisateur. Dois-je créer une table d'amis pour chaque utilisateur dans la base de données ou est-il un meilleur moyen?
source d'informationauteur asmo
Vous devez vous connecter pour publier un commentaire.
En supposant que tous vos amis sont aussi dans la table user, vous aurez besoin d'un des amis de la table qui définit un simple un-à-plusieurs relations liant la table des utilisateurs à lui-même. Donc
Où les deux UserIDLink1 et UserIDLink2 sont les clés étrangères de la table des Utilisateurs.
Ainsi, si par exemple j'ai trois utilisateurs
et Joe et Jane sont des amis, puis les Amis de la table contenant une seule ligne
Ci-dessus suppose implicitement que si A est un ami de B alors B est un ami de l'Un - si ce n'est pas le cas, vous auriez probablement souhaitez renommer UserIDLink1 et UserIDLink2 à l'id utilisateur et le FriendID ou similaire - dans ce cas, vous auriez du double de la enregistre aussi.
Aussi pour le bi-directionnelle de la configuration (a est Un ami de B si B est un ami de), vous devez définir des index sur les Amis de la table (UserIDLink1,UserIDLink2) et (UserIDLink2,UserIDLink1) pour assurer l'accès est toujours efficace si nous étions à la recherche, soit pour les amis de joe ou les amis de jane (si vous n'avez pas configuré de la deuxième indice, puis la première requête serait un moyen efficace d'index de recherche, mais le second aurait besoin d'un full table scan).
Si vos liens n'ont pas été bidirectionnel, ce ne serait pas nécessaire de savoir qui sont les amis, mais vous auriez encore probablement plus besoin que vous aurez probablement aussi besoin de savoir qui B est un ami de.
En supposant que votre
USER
table possède une clé primaire appeléid
ou quelque chose de similaire, utilisez le tableau suivant:Cette configuration prend en charge que Pierre est un ami de Marie, mais Marie ne pense pas qu'Peter comme ça. Mais il existe des données pour en déduire que Peter est une connaissance de Marie...
La clé primaire étant les deux colonnes s'arrête aussi les doublons.
Vous êtes à la recherche pour le M-N ou plusieurs-à-plusieurs table de jointure.
Table Des Utilisateurs:
Table Des Amitiés
Les deux USER_ID et FRIEND_ID sont des clés étrangères qui référence table des Utilisateurs (les Utilisateurs.user_id).
Si l'utilisateur 123 est un ami de l'utilisateur 921. Ajouter une ligne (123, 921) Amitiés table.
Créer une table qui contient tous les amis
Chaque ligne de la table contient l'ID de l'utilisateur et l'id de son ami
Créer une table unique pour tous les amis et de donner à chaque un ami UsersID qui est égale à leurs utilisateurs respectifs clé