在我正在制作的社交网站中,我需要某种方法来存储用户“喜欢”的帖子,以确保他们只能“喜欢”每个帖子一次。我有几个想法。
- 每个用户都有一个单独的表,用于存储他们喜欢的所有不同帖子的 ID 作为该表中的行。
以空格分隔的帖子 ID 字符串,作为表
users
中的字段。每个帖子都有一个单独的表,将喜欢该帖子的所有不同用户的 ID 作为表中的行存储。
注意,users
是一个包含网站所有用户及其 ID、用户名等的表。
-
最初,我喜欢为每个用户提供单独的表的想法,但我意识到这可能会带来更多麻烦,而不是其值(value)。
所以我认为为 users
中的每一行使用空格分隔的字符串可能是一个好主意,因为我不必开始处理更多的表(这可能会使事情变得复杂),但是我有一种感觉,使用空格分隔的字符串比使用附加表会显着降低性能,尤其是在用户数量较多的情况下。
本质上我的问题是这样的:在上述确保用户只能喜欢帖子一次的方法中,哪一种是最实用的?
最佳答案
这些听起来都不是特别好的主意。
通常,必须动态创建表(无论是用户还是帖子)是一个坏主意。它不仅会使 SQL 生成变得复杂,还会使数据字典因大量对象而变得困惑,并使数据库维护变得比应有的复杂得多。
以逗号分隔的字符串也不是一个好主意。它打破了1NF将使您的查询复杂化(或更糟 - 让您编写正确的代码!)来维护它。
明智的方法是使用单个表来关联用户和帖子。每行将保存一个用户 ID 和他喜欢的帖子的 ID,并在这两者上创建一个复合主键将确保用户不能两次喜欢一个帖子:
CREATE TABLE user_post_likes (
user_id INT, -- Or whatever you're using in the users tables
post_id INT, -- Or whatever you're using in the posts tables
PRIMARY KEY (user_id, post_id),
FOREIGN KEY (user_id) REFERENCES user(id),
FOREIGN KEY (post_id) REFERENCES post(id)
);
关于mysql - 每个用户喜欢的帖子的单独表格 - 实用与否?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44607587/