Maison >base de données >tutoriel mysql >Comment empêcher les votes multiples dans un système de notation des commentaires utilisant MySQL ?

Comment empêcher les votes multiples dans un système de notation des commentaires utilisant MySQL ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-29 22:00:031142parcourir

How to Prevent Multiple Votes in a Comment Rating System Using MySQL?

Stockage de tableaux dans MySQL pour le système de vote

Pour éviter plusieurs votes dans un système d'évaluation des commentaires, des tableaux d'ID utilisateur peuvent être stockés dans MySQL . Voici comment y parvenir à l'aide d'une table d'intersection :

Schéma de base de données

<code class="sql">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)
);</code>

Insertion de données

<code class="sql">INSERT INTO comments VALUES (1, 'first comment');
INSERT INTO users VALUES (1, 'user_a');
INSERT INTO comments_votes VALUES (1, 1, 1);</code>

La table comments_votes stocke l'ID de commentaire, l'ID utilisateur et le type de vote. La clé primaire composite empêche les votes en double sur le même commentaire.

Contraintes de clé étrangère

Pour garantir l'intégrité référentielle et éviter les lignes orphelines :

<code class="sql">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;</code>

Cela garantit qu'une ligne comments_votes fera toujours référence à un commentaire et à un utilisateur existants.

Avantages de la table d'intersection

L'utilisation d'une table d'intersection évite les complications suivantes :

  • Difficulté à appliquer l'intégrité référentielle avec des tableaux sérialisés.
  • Possibilité de corruption des données si une partie du tableau est corrompue.
  • Efficacité d'indexation réduite par rapport aux tables séparées pour les commentaires et votes.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn