」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在MySQL中不儲存數組的情況下防止多重投票?

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

發佈於2024-11-22
瀏覽:938

How to Prevent Multiple Voting without Storing Arrays in MySQL?

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

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

資料庫設計

考慮以下資料庫架構:

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

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

範例資料

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

好處

這種方法有幾個優點:

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

外鍵約束(可選)

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

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;

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

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3