2

我有两张桌子(现在):

  1. Topic
  2. Post(帖子是对某个主题的评论)

我想将选项添加到喜欢这些对象。
所以我考虑创建一个 Likes 表并使用枚举来指示喜欢哪个对象(当然包括对象的 id)。

顺便说一句,如果我选择这个选项,它应该是一个枚举还是另一个表代表所有对象:

id object_name
1 主题
2 帖子

另一种选择是为每个对象创建喜欢表。

最佳做法是什么?

4

3 回答 3

2

我认为为每个对象创建一个单独的表会更好。

如果你只使用一张桌子,我看不出你会得到什么。您也不能在一张表中正确使用外键。

我的意思是您不能在表中添加列object_id,因为您不知道它将指向的表。在这种情况下,您有两个添加两列,topic_id并且post_id. 总是两者之一将是NULL

于 2012-09-02T16:01:14.393 回答
1

只需为喜欢创建另一个表:

tbl_posts_likes(likeID、userID、postID、like = 1、like = -1)

那么您可以编写一个子查询,例如:

SELECT SUM(like) as likeCount, SUM(unlike)
FROM tbl_posts_likes
GROUP BY postID
WHERE postID= posts.postID
于 2013-12-25T17:32:31.827 回答
0

根据跟踪“喜欢”的方式,我建议添加另一个名为likes以下效果的表:

likes (like_id, like_type)

从这一点开始,您只需COUNT()计算每个(主题/帖子)的“喜欢”数量,like_type因为每次有人喜欢某个主题或帖子时,都会插入一条记录。但是,如果您计划按用户跟踪“喜欢”,则需要为用户添加另一列。

如果您想跟踪单个帖子或主题,您将为每个对象设置一个表并为主题或帖子创建一个外键约束ID

topic_likes (tl_id, topic_id)
post_likes (pl_id, post_id)

上面的设计将为每个喜欢创建一个条目。如果您只关心每个对象的喜欢总数,您可以设置如下内容:

likes (like_id, like_type, likes)
于 2012-09-02T16:04:00.190 回答