首页 >数据库 >mysql教程 >如何在MySQL中不存储数组的情况下防止多重投票?

如何在MySQL中不存储数组的情况下防止多重投票?

Barbara Streisand
Barbara Streisand原创
2024-10-30 11:32:26926浏览

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