Heim >Datenbank >MySQL-Tutorial >Wie kann man Mehrfachabstimmungen verhindern, ohne Arrays in MySQL zu speichern?

Wie kann man Mehrfachabstimmungen verhindern, ohne Arrays in MySQL zu speichern?

Barbara Streisand
Barbara StreisandOriginal
2024-10-30 11:32:26914Durchsuche

How to Prevent Multiple Voting without Storing Arrays in MySQL?

Speichern von Arrays in MySQL: Ein alternativer Ansatz zur Verhinderung mehrfacher Abstimmungen

MySQL unterstützt nativ die Speicherung von Arrays in Feldern nicht. Allerdings kann ein relationales Datenbankdesign verwendet werden, um ein ähnliches Ergebnis zu erzielen.

Datenbankdesign

Beachten Sie das folgende Datenbankschema:

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

Die Tabelle „comments_votes“ verwendet einen zusammengesetzten Primärschlüssel, um sicherzustellen, dass jeder Benutzer nur einmal über einen bestimmten Kommentar abstimmen kann.

Beispieldaten

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

Vorteile

Dieser Ansatz hat mehrere Vorteile:

  • Verhindert Mehrfachabstimmungen: Die Primärschlüsseleinschränkung für die Tabelle comments_votes erzwingt die referenzielle Integrität und stellt die Datenkonsistenz sicher.
  • Flexibler Abstimmungstyp: Die Spalte vote_type ermöglicht verschiedene Arten von Abstimmungen, z. B. „Gefällt mir“ oder „Abneigungen“.
  • Einfach abzufragen: Das relationale Modell ermöglicht eine effiziente Abfrage von Wählerinformationen und Stimmenzahlen.

Fremdschlüsseleinschränkungen (optional)

Zusätzlich können Fremdschlüsseleinschränkungen hinzugefügt werden, um die referenzielle Integrität zwischen zu erzwingen die Tabellen:

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

Durch die Verwendung dieses relationalen Datenbankdesigns können Sie Mehrfachabstimmungen effektiv verhindern und die Datenintegrität aufrechterhalten, ohne dass Arrays in MySQL gespeichert werden müssen.

Das obige ist der detaillierte Inhalt vonWie kann man Mehrfachabstimmungen verhindern, ohne Arrays in MySQL zu speichern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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