每个用户喜欢的帖子单独 table - 实用与否?
A seperate table for the posts which each user has liked - practical or not?
在我制作的社交网站中,我需要一些方法来存储用户拥有哪些 post 个 'liked',以确保他们只能 'like' 每个 [=46] =] 一次。我有几个想法。
- 每个用户单独的 table,用于存储他们喜欢的所有不同 post 的 ID 作为所述 table 中的行。
space 分隔的 post ID 字符串作为 table users
.
[=37 中的一个字段=]
每个post一个单独的table,存储所有喜欢的不同用户的ID说post 作为 table.
中的行
注意,users
是一个 table 包含站点的所有用户,以及他们的 ID、用户名等。
-
最初我喜欢为每个用户单独 table 的想法,但我意识到这可能比它的价值更麻烦。
所以我认为 users
中每一行的 space 分隔字符串可能是个好主意,因为我不必开始处理更多 tables (这可能会使事情复杂化,)但我有一种感觉,使用 space 分隔的字符串比使用额外的 table 会显着降低性能,尤其是在用户数量较多的情况下。
基本上我的问题是:在上述确保用户只能喜欢post一次的方法中,哪种方法最实用?
None 这些想法听起来特别好。
通常,必须即时创建 tables,无论是对用户还是 posts,都是一个坏主意。它不仅会使您的 SQL 一代变得复杂,而且还会使数据字典因大量对象而变得混乱,并使维护数据库比应有的复杂得多。
逗号分隔的字符串也不是一个好主意。它中断 1NF 会使您的查询复杂化(或更糟 - 让您编写正确的代码!)以维护它。
理智的方法是使用单个 table 来关联用户和 post。每行将包含一个用户 ID 和他喜欢的 post 的 ID,并且在两者上创建复合主键将确保用户不能喜欢 post 两次:
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)
);
在我制作的社交网站中,我需要一些方法来存储用户拥有哪些 post 个 'liked',以确保他们只能 'like' 每个 [=46] =] 一次。我有几个想法。
- 每个用户单独的 table,用于存储他们喜欢的所有不同 post 的 ID 作为所述 table 中的行。
space 分隔的 post ID 字符串作为 table
[=37 中的一个字段=]users
.每个post一个单独的table,存储所有喜欢的不同用户的ID说post 作为 table.
中的行
注意,users
是一个 table 包含站点的所有用户,以及他们的 ID、用户名等。
-
最初我喜欢为每个用户单独 table 的想法,但我意识到这可能比它的价值更麻烦。
所以我认为 users
中每一行的 space 分隔字符串可能是个好主意,因为我不必开始处理更多 tables (这可能会使事情复杂化,)但我有一种感觉,使用 space 分隔的字符串比使用额外的 table 会显着降低性能,尤其是在用户数量较多的情况下。
基本上我的问题是:在上述确保用户只能喜欢post一次的方法中,哪种方法最实用?
None 这些想法听起来特别好。
通常,必须即时创建 tables,无论是对用户还是 posts,都是一个坏主意。它不仅会使您的 SQL 一代变得复杂,而且还会使数据字典因大量对象而变得混乱,并使维护数据库比应有的复杂得多。
逗号分隔的字符串也不是一个好主意。它中断 1NF 会使您的查询复杂化(或更糟 - 让您编写正确的代码!)以维护它。
理智的方法是使用单个 table 来关联用户和 post。每行将包含一个用户 ID 和他喜欢的 post 的 ID,并且在两者上创建复合主键将确保用户不能喜欢 post 两次:
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)
);