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