Maison  >  Article  >  base de données  >  Comment stocker efficacement les tableaux utilisateur dans MySQL : une meilleure alternative au stockage direct ?

Comment stocker efficacement les tableaux utilisateur dans MySQL : une meilleure alternative au stockage direct ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-04 19:26:02467parcourir

How to Efficiently Store User Arrays in MySQL: A Better Alternative to Direct Storage?

Comment stocker efficacement les tableaux utilisateur dans MySQL : une meilleure alternative

Introduction

À Pour empêcher plusieurs votes d'utilisateurs dans un système de notation des commentaires, il est essentiel de stocker l'ensemble des identifiants d'utilisateurs qui ont déjà voté. Cependant, stocker des tableaux directement dans des champs MySQL peut être problématique et entraîner des problèmes de cohérence des données. Cet article explore une alternative plus efficace qui garantit l'intégrité référentielle et évite les lignes orphelines.

Création de tables relationnelles normalisées

Au lieu de stocker des tableaux dans un seul champ, créez ce qui suit tables relationnelles normalisées : table

  • comments : stocke les ID et le contenu des commentaires.
  • table des utilisateurs : stocke les ID et les noms d'utilisateur.
  • table comments_votes : stocke les identifiants de commentaires, les identifiants d'utilisateur et les types de vote.

Application de l'intégrité référentielle

Pour assurez la cohérence des données, ajoutez des contraintes de clé étrangère à la table comments_votes :

<code class="sql">CREATE TABLE comments_votes (
  comment_id INT,
  user_id INT,
  vote_type INT,
  PRIMARY KEY (comment_id, user_id),
  FOREIGN KEY (comment_id) REFERENCES comments (comment_id),
  FOREIGN KEY (user_id) REFERENCES users (user_id)
) ENGINE=INNODB;</code>

Insertion d'exemples de données

Remplissez les tables avec des exemples 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>

Prévenir les votes en double

Essayer d'insérer un vote en double entraînera une erreur en raison de l'index unique :

<code class="sql">INSERT INTO comments_votes VALUES (1, 1, 1);
ERROR 1062 (23000): Duplicate entry '1-1' for key 'PRIMARY'</code>

Avantages de cette approche

L'approche alternative offre plusieurs avantages :

  • Intégrité référentielle : Les contraintes de clé étrangère garantissent que tous les commentaires votés et les utilisateurs existent dans leurs tables respectives.
  • Empêche les lignes orphelines : La structure normalisée élimine la possibilité de lignes orphelines, qui peuvent survenir lorsque les tableaux sont stockés dans un seul champ.
  • Performances plus rapides : les tables relationnelles offrent généralement de meilleures performances pour les opérations d'interrogation et de manipulation de données.

Conclusion

Plutôt que de stocker un tableau données dans un seul champ MySQL, l'utilisation de tables relationnelles normalisées avec des clés étrangères offre un moyen plus fiable et plus efficace de gérer les tableaux. Cette approche garantit l'intégrité référentielle, évite les incohérences des données et améliore les performances, ce qui en fait une solution idéale pour les scénarios dans lesquels les tableaux doivent être stockés et gérés dans une base de données.

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