Je suis en train d'apprendre la normalisation, alors s'il vous plaît pardonnez-moi si c'est une question stupide. J'ai une table TBL_Users
avec la clé primaire étant ID
. Pour savoir qui est amis avec qui ma dernière pensée était de faire une table avec deux clés étrangères, dont les deux sont l'identité de l'autre personne. Cependant, plus je pense à cela, je ne peux pas m'empêcher de penser qu'il doit y avoir un meilleur moyen. Ce modèle signifie soit que je dois dupliquer toutes les informations, soit appeler deux fois TBL_Friends.lier deux clés primaires différentes d'une table dans une deuxième table
IE si la table est
+----+--------+ | ID | Friend | +----+--------+ | 1 | 2 | | 2 | 1 | +----+--------+
J'ai des informations dupliquées et doivent faire deux appels pour ajouter/supprimer des amis.
D'autre part, si je fais juste
+----+-----+ | ID | ID2 | +----+-----+ | 1 | 2 | | 3 | 1 | | 4 | 1 | +----+-----+
La situation semble être encore pire parce que je dois interroger la base de données deux fois chaque fois que je veux faire quelque chose, que ce soit recueillir des informations ou ajouter/supprimer copains.
Sûrement il y a une solution plus simple que je suis en train de négliger?
La dernière solution que vous mettez là semble bien. Pourquoi pensez-vous "avoir à interroger la base de données deux fois"? Vous deuxième table "amis" serait juste deux colonnes, dont les deux sont des clés étrangères. Si vous avez un enregistrement de [1,2], cela signifie que 1 est ami avec 2 et vice-versa. – catchdave
Dites 1 est ami avec 2, 3 et 4. La table peut ressembler à: (voir la version éditée du dernier tableau ci-dessus). Pour savoir qui sont les amis de 1, n'aurais-je pas à faire deux requêtes, une sur l'ID et l'ID2? – aslum
Utilisez simplement une requête avec une clause "OR". "SELECT (CAS LORSQUE id1 = 1 PUIS id2 ELSE id1 END) Comme ami_id WHERE id1 = 1 OU id2 = 1". Cela correspond au cas simple que vous avez fourni. Si la logique de votre entreprise est plus complexe, il peut être judicieux de dénormaliser cette table (c'est-à-dire: similaire à votre idée dupliquée) ou une autre conception. Si c'est le cas, alors peut-être esquisser plus de la conception autour des utilisateurs et des amis et je peux écrire une bonne réponse. – catchdave