Relations - Réseau d'amis

Résolu
JooS Messages postés 2468 Date d'inscription   Statut Membre Dernière intervention   -  
JooS Messages postés 2468 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Voila, je voulais créer un genre de petit réseau social, et je voulais avoir votre avis en ce qui concerne un détails du MCD ...

Or, pour dire que tel utilisateur est ami avec tel utilisateur ...
1 - On crée une table qui contiendra l'id des deux utilisateurs.
Ou ..
2 - On ajoute un champs dans la table des utilisateurs, et pour chaque utilisateur on y mets l'id de ses amis séparé par des virgules.

La première solution est plus juste a mon avis, vu qu'elle est en 3eme forme normale, mais peut dépasser les 1 millions (voir plus) de tuples.

Donc quoi choisir, y a t'il d'autres solutions possibles, quelle est la meilleur méthode en ce qui concerne la performance lors des recherches, car on aura tout le temps besoin de savoir qui est ami avec qui.

Merci.

1 réponse

blux Messages postés 27121 Date d'inscription   Statut Modérateur Dernière intervention   3 359
 
Salut,

ta deuxième solution impose un balayage exhaustif de toute la table combiné à une analyse de la chaine qui contient les id lorsque l'on veut savoir qui est ami avec qui, c'est très lourd.

La première solution permet de ne lire que les lignes que l'on cherche (grâce aux index que tu ne manqueras pas de mettre). C'est d'ailleurs pour ça que c'est une forme normale.

Le nombre de tuple importe peu dans une base...
0
JooS Messages postés 2468 Date d'inscription   Statut Membre Dernière intervention   228
 
Comment ça un balayage ?!

On aura un accès direct a la liste d'amis, par exemple, lorsque l'utilisateur se connecte, on mets directement ses infos ainsi que le contenu du champs "friends" dans une variable de SESSION ...

Et a chaque fois qu'on aura besoin de vérifier si un utilisateur est ami avec un autre, il suffit d'accéder a la SESSION directement, ...
A chaque fois qu'il y'aura une mise a jour (ajout ou suppression d'amis), on mettra a jour les variable globales.

Exemple : 2,5484,624,7541,954
Signifiera que les utilisateurs dont l'id est 2, 5484, 624, 7541, 954 sont amis avec l'utilisateur en cours ...

C'est tirer par les cheveux, mais je pense que c'est plus performant que de parcourir toute la table, surtout si la table est surchargé, parce que 10 millions de tuples, ça affecte quand même le temps d'exécution ...
0
blux Messages postés 27121 Date d'inscription   Statut Modérateur Dernière intervention   3 359
 
Comment ça un balayage ?!
mea culpa, j'ai mal lu la question de départ.

Il n'en demeure pas moins que tu vas vite voir les limites de traitement des chaines comportant des milliers de caractères : lenteur de traitement et surtout lenteur de mise à jour...
Car lorsque tu vas augmenter la taille de la chaine d'amis, ton SGBD va devoir trouver un nouvel emplacement pour la stocker et supprimer l'ancienne, avec toute la gestion d'espace à faire.
Le plus simple est quand même de laisser les mises à jour (création/suppression) de tuples par le SGBD, il est optimisé pour...
0
JooS Messages postés 2468 Date d'inscription   Statut Membre Dernière intervention   228
 
Ok alors, va pour la premiere solution !

Merci :) !
0