MySQL喜欢引擎:喜欢帖子设计的用户名的简短列表

时间:2017-09-28 19:40:40

标签: mysql

在具有Like系统(例如Facebook)的网站上,当您查看帖子时,它会说You, John, Jane, Smith, and 4 others liked this post(Facebook的方法甚至会将名称限制为您的朋友)。我期待设计一个输出该信息的数据库(在我的情况下,不需要朋友列出)。

第一个表是post表:

post_id
user_id
post_text_raw
post_text_sanitized
like_count

第二个表是likes表:

post_id
user_id
例如

user表是:

user_id
user_name
salt
password_hash

当喜欢帖子时,它会迭代like_count单元格并在likes表格中插入一行。

我想到了两个解决方案,添加了一些列来将user_id缓存到帖子表中,例如:

like_user_id
like_user_id2
like_user_id3

只需使用JOIN匹配相应的用户名。

另一种解决方案是对LEFT JOIN表使用子查询和likes,并对users表使用另一个连接;但是,这种情况下的效率可能会受到关注。

我一直在决定设计这个的最佳方法是什么,我花了最近几个小时寻找解决方案而且我已经空了。

1 个答案:

答案 0 :(得分:0)

  

我想到了两个解决方案,   1添加列到缓存   user_id进入post表,例如:like_user_id like_user_id2 like_user_id3

没有。没有。一千次没有。不要做这种非规范化,否则你抱歉。

  

另一种解决方案是使用子查询和LEFT JOIN来实现   喜欢table,另一个加入users表;

是的,这就是这样的应用程序的方法。

  但是,这种情况下的效率可能会受到关注。

不要担心。 SQL是为这种事情而制作的。当您的应用程序扩展时,您可能需要调整索引。但是当你决定第六个人应该能够“喜欢”某些东西时,这比更容易。

只有当你得到数百万行时才应该考虑任何类型的非规范化。到那时,你将比现在更好地理解你的问题空间。