Maison > Article > base de données > Comment empêcher les votes multiples sans stocker les tableaux dans 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 :
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!