2010-06-25 4 views
1

Je me demandais quoi d'autre devrais-je ajouter à ma table d'amis comment puis-je empêcher un utilisateur d'ajouter le même ami deux fois aussi bien que lorsque l'utilisateur est en ligne? Ainsi que des suggestions sur la façon dont je peux améliorer la table de mes amis?Aide de structure de table amis MySQL?

Voici ma table MySQL.

CREATE TABLE friends (
id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
user_id INT UNSIGNED NOT NULL, 
friend_id INT UNSIGNED NOT NULL, 
PRIMARY KEY (id) 
); 

Répondre

3

Vous n'avez pas besoin id sur un tableau croisé dynamique et pourrait définir votre clé primaire comme celui-ci PRIMARY KEY(user_id, friend_id), cela empêcherait d'avoir des doublons.

+0

Que se passe-t-il si un utilisateur veut simplement ajouter l'ami mais pas l'autre? – alpha

+0

@alpha: La relation est seulement que 'id' considère' user_id' un ami. En sens inverse, le plus que vous pouvez supposer est que 'user_id' est une connaissance de' id' - pas un ami, sauf s'il existe une correspondance avec les valeurs inversées. –

+0

Vous devez donc ajouter un autre champ, 'friendship_accepted', qui pourrait être un booléen. Mis à 0 lors de la création, et à 1 quand l'ami a accepté –

0

IMO pas besoin d'attribut id.
Vous pouvez ajouter un horodatage, qui peut parfois être utile.
Créez une clé pour user_id et friend_id, et ils seront uniques, ce qui vous empêche de créer deux fois ce tuple.

+0

Certains ORM ont des problèmes avec les tables qui ont des touches composées –

+0

Cela dépend beaucoup de l'ORM utilisé - ici nous concevons simplement une relation. – wlk

0

Eh bien, si l'affaire concerne la conception de la table, vous pouvez faire la combinaison de l'id_utilisateur et de l'ami_id comme une clé unique, ou peut-être faire ces trois (3) champs comme clés primaires. mais fonctionne.

L'autre chose serait pour vous de contrôler cela en utilisant PHP ou le langage de connexion que vous avez déjà choisi. Faites-moi savoir si cela aide.