Vous cherchez à créer une table dans MySQL pour stocker un tableau d'ID utilisateur qui ont voté sur les commentaires. Ce faisant, vous souhaitez empêcher plusieurs votes du même utilisateur sur le même commentaire.
Envisagez d'utiliser une table distincte, comments_votes, pour établir une relation plusieurs-à-plusieurs entre les tableaux des commentaires et des utilisateurs. Le schéma suivant fournit une base :
CREATE TABLE comments ( comment_id int, body varchar(100), PRIMARY KEY (comment_id) ); CREATE TABLE users ( user_id int, username varchar(20), PRIMARY KEY (user_id) ); CREATE TABLE comments_votes ( comment_id int, user_id int, vote_type int, PRIMARY KEY (comment_id, user_id) );
La clé primaire composite (comment_id, user_id) dans comments_votes empêche les utilisateurs de voter plusieurs fois sur les mêmes commentaires.
Insérez quelques données pour démontrer :
INSERT INTO comments VALUES (1, 'first comment'); INSERT INTO comments VALUES (2, 'second comment'); INSERT INTO comments VALUES (3, 'third comment'); INSERT INTO users VALUES (1, 'user_a'); INSERT INTO users VALUES (2, 'user_b'); INSERT INTO users VALUES (3, 'user_c');
Ajouter des votes pour l'utilisateur 1 :
INSERT INTO comments_votes VALUES (1, 1, 1); INSERT INTO comments_votes VALUES (2, 1, 1);
Tenter de voter à nouveau sur un commentaire précédemment voté entraînera une erreur en raison de l'unique contrainte de clé primaire :
INSERT INTO comments_votes VALUES (1, 1, 1); ERROR 1062 (23000): Duplicate entry '1-1' for key 'PRIMARY'
Si vous utilisez le moteur de stockage InnoDB, envisagez d'ajouter des contraintes de clé étrangère pour garantir l'intégrité référentielle :
... CREATE TABLE comments ( ... ) ENGINE=INNODB; CREATE TABLE users ( ... ) ENGINE=INNODB; CREATE TABLE comments_votes ( ... FOREIGN KEY (comment_id) REFERENCES comments (comment_id), FOREIGN KEY (user_id) REFERENCES users (user_id) ) ENGINE=INNODB;
Ces clés étrangères garantissent que comments_votes fait référence uniquement à des ID de commentaire et à des ID d'utilisateur valides.
Cette solution offre plusieurs avantages par rapport au stockage de tableaux dans un seul champ de base de données :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!