如何使用 MySQL 防止評論評級系統中的多重投票?

Mary-Kate Olsen
發布: 2024-10-29 22:00:03
原創
1086 人瀏覽過

How to Prevent Multiple Votes in a Comment Rating System Using MySQL?

在MySQL 中儲存投票系統陣列

為了防止評論評分系統中的多次投票,可以在MySQL 中儲存使用者ID 陣列。以下是如何使用交集表實現此目的:

數據庫架構

<code class="sql">CREATE TABLE comments (
    comment_id int, 
    body varchar(100), 
    PRIMARY KEY (comment_id)
);

CREATE TABLE users (
    user_id int, 
    username varchar(20), 
    PRIMARY KEY (user_id)
);

CREATE TABLE comments_votes (
    comment_id int, 
    user_id int, 
    vote_type int, 
    PRIMARY KEY (comment_id, user_id)
);</code>
登入後複製

數據插入

<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>
登入後複製

comments_votes 表格儲存評論ID、使用者ID 和投票類型。複合主鍵可防止對相同評論進行重複投票。

外鍵約束

確保引用完整性並防止孤立行:

<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>
登入後複製

這可以確保comments_votes 行始終引用現有評論和用戶。

交集表的好處

使用交集表可以避免以下複雜情況:

  • 難以透過引用序列化數組強制執行完整性。
  • 如果陣列的任何部分損壞,則可能會導致資料損壞。
  • 與註釋和註釋的單獨表相比,索引效率降低投票。

以上是如何使用 MySQL 防止評論評級系統中的多重投票?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板