Heim > Datenbank > MySQL-Tutorial > Wie speichert man Benutzerarrays effizient in MySQL: Eine bessere Alternative zur Direktspeicherung?

Wie speichert man Benutzerarrays effizient in MySQL: Eine bessere Alternative zur Direktspeicherung?

Mary-Kate Olsen
Freigeben: 2024-11-04 19:26:02
Original
494 Leute haben es durchsucht

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

So speichern Sie Benutzerarrays effizient in MySQL: Eine bessere Alternative

Einführung

Zu Um mehrere Benutzerstimmen in einem Kommentarbewertungssystem zu verhindern, ist es wichtig, die Liste der Benutzer-IDs zu speichern, die bereits abgestimmt haben. Das direkte Speichern von Arrays in MySQL-Feldern kann jedoch problematisch sein und zu Problemen mit der Datenkonsistenz führen. In diesem Artikel wird eine effizientere Alternative untersucht, die die referenzielle Integrität gewährleistet und verwaiste Zeilen verhindert.

Normalisierte relationale Tabellen erstellen

Anstatt Arrays in einem einzelnen Feld zu speichern, erstellen Sie Folgendes normalisierte relationale Tabellen:

  • Kommentare Tabelle: Geschäfte Kommentar-IDs und Inhalt.
  • Benutzer-Tabelle: Speichert Benutzer-IDs und Benutzernamen.
  • Kommentarstimmen-Tabelle: Speichert Kommentar-IDs, Benutzer-IDs und Stimmen Typen.

Referential erzwingen Integrität

Um die Datenkonsistenz sicherzustellen, fügen Sie Fremdschlüsseleinschränkungen zur Tabelle comments_votes hinzu:

<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>
Nach dem Login kopieren

Beispieldaten einfügen

Füllen Sie die Tabellen mit Beispielen Daten:

<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>
Nach dem Login kopieren

Verhindern doppelter Stimmen

Der Versuch, eine doppelte Stimme einzufügen, führt aufgrund des eindeutigen Index zu einem Fehler:

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

Vorteile dieses Ansatzes

Der alternative Ansatz bietet mehrere Vorteile:

  • Referenzielle Integrität: Die Fremdschlüsseleinschränkungen stellen sicher, dass alle abgestimmten Kommentare und Benutzer in ihren jeweiligen Tabellen vorhanden sind.
  • Verhindert verwaiste Zeilen: Die normalisierte Struktur eliminiert die Möglichkeit verwaister Zeilen, die auftreten können, wenn Arrays in einem einzigen gespeichert werden Feld.
  • Schnellere Leistung: Relationale Tabellen bieten normalerweise eine bessere Leistung für Abfrage- und Datenbearbeitungsvorgänge.

Fazit

Anstatt Array-Daten in einem einzelnen MySQL-Feld zu speichern, bietet die Verwendung normalisierter relationaler Tabellen mit Fremdschlüsseln eine zuverlässigere und effizientere Möglichkeit, Arrays zu verarbeiten. Dieser Ansatz stellt die referenzielle Integrität sicher, verhindert Dateninkonsistenzen und verbessert die Leistung, was ihn zu einer idealen Lösung für Szenarien macht, in denen Arrays in einer Datenbank gespeichert und verwaltet werden müssen.

Das obige ist der detaillierte Inhalt vonWie speichert man Benutzerarrays effizient in MySQL: Eine bessere Alternative zur Direktspeicherung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage