在 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);
好处
这种方法有几个优点:
外键约束(可选)
此外,可以添加外键约束以强制表之间的引用完整性:
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