Maison  >  Article  >  base de données  >  Comment empêcher les votes multiples sans stocker les tableaux dans MySQL ?

Comment empêcher les votes multiples sans stocker les tableaux dans MySQL ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-30 11:32:26832parcourir

How to Prevent Multiple Voting without Storing Arrays in MySQL?

Stockage de tableaux dans MySQL : une approche alternative pour empêcher le vote multiple

MySQL ne prend pas en charge nativement le stockage de tableaux dans les champs. Cependant, une conception de base de données relationnelle peut être utilisée pour obtenir un résultat similaire.

Conception de base de données

Considérez le schéma de base de données suivant :

<code class="sql">CREATE TABLE comments (
    comment_id INT PRIMARY KEY,
    body VARCHAR(100)
);

CREATE TABLE users (
    user_id INT PRIMARY KEY,
    username VARCHAR(20)
);

CREATE TABLE comments_votes (
    comment_id INT,
    user_id INT,
    vote_type INT,
    PRIMARY KEY (comment_id, user_id)
);</code>

La table comments_votes utilise une clé primaire composite pour garantir que chaque utilisateur ne peut voter qu'une seule fois sur un commentaire donné.

Exemples de données

<code class="sql">-- Insert sample data
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');

-- Record user 1's votes
INSERT INTO comments_votes VALUES (1, 1, 1);
INSERT INTO comments_votes VALUES (2, 1, 1);</code>

Avantages

Cette approche présente plusieurs avantages :

  • Empêche le vote multiple : La contrainte de clé primaire sur la table comments_votes applique l'intégrité référentielle et garantit la cohérence des données.
  • Type de vote flexible :La colonne vote_type permet différents types de votes, tels que les likes ou les dislikes.
  • Facile à interroger :Le modèle relationnel permet d'interroger efficacement les informations sur les électeurs et le décompte des votes.

Contraintes de clé étrangère (facultatif)

De plus, des contraintes de clé étrangère peuvent être ajoutées pour renforcer l'intégrité référentielle entre les tables :

<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>

En utilisant cette conception de base de données relationnelle, vous pouvez efficacement empêcher les votes multiples et maintenir l'intégrité des données sans avoir besoin de stocker des tableaux dans MySQL.

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