"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment empêcher les votes multiples sans stocker les tableaux dans MySQL ?

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

Publié le 2024-11-22
Parcourir:151

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 :

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

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

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

Avantages

Cette approche présente plusieurs avantages :

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

Contraintes clés étrangères (Facultatif)

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

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;

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.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3