Maison > base de données > tutoriel mysql > le corps du texte

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

Barbara Streisand
Libérer: 2024-10-30 11:32:26
original
831 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!