首頁  >  文章  >  資料庫  >  如何在MySQL中不儲存數組的情況下防止多重投票?

如何在MySQL中不儲存數組的情況下防止多重投票?

Barbara Streisand
Barbara Streisand原創
2024-10-30 11:32:26832瀏覽

How to Prevent Multiple Voting without Storing Arrays in MySQL?

在 MySQL 中儲存陣列:防止多重投票的另一種方法

MySQL 本身不支援在欄位中儲存陣列。但是,可以採用關聯式資料庫設計來實現類似的結果。

資料庫設計

考慮以下資料庫模式:

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

comments_votes 表使用複合主鍵來確保每個使用者只能對給定評論投票一次。

示例數據

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

好處

這種方法有幾個優點:

  • 防止多重投票: comments_votes 表上的主鍵約束強制引用完整性並確保資料一致性。
  • 彈性的投票類型: vote_type 欄位允許不同類型的投票,例如喜歡或不喜歡。
  • 易於查詢: 關係模型可以有效率地查詢選民資訊和投票計數。

外鍵約束(可選)

此外,可以添加外鍵約束以強制之間的引用完整性表:

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

利用這種關聯式資料庫設計,您可以有效防止多重投票並保持資料完整性,而無需在MySQL 中儲存陣列。

以上是如何在MySQL中不儲存數組的情況下防止多重投票?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn