我有两张桌子(现在):
Topic
Post
(帖子是对某个主题的评论)
我想将选项添加到喜欢这些对象。
所以我考虑创建一个 Likes 表并使用枚举来指示喜欢哪个对象(当然包括对象的 id)。
顺便说一句,如果我选择这个选项,它应该是一个枚举还是另一个表代表所有对象:
id object_name
1 主题
2 帖子
另一种选择是为每个对象创建喜欢表。
最佳做法是什么?
我有两张桌子(现在):
Topic
Post
(帖子是对某个主题的评论) 我想将选项添加到喜欢这些对象。
所以我考虑创建一个 Likes 表并使用枚举来指示喜欢哪个对象(当然包括对象的 id)。
顺便说一句,如果我选择这个选项,它应该是一个枚举还是另一个表代表所有对象:
id object_name
1 主题
2 帖子
另一种选择是为每个对象创建喜欢表。
最佳做法是什么?
我认为为每个对象创建一个单独的表会更好。
如果你只使用一张桌子,我看不出你会得到什么。您也不能在一张表中正确使用外键。
我的意思是您不能在表中添加列object_id
,因为您不知道它将指向的表。在这种情况下,您有两个添加两列,topic_id
并且post_id
. 总是两者之一将是NULL
。
只需为喜欢创建另一个表:
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
根据您跟踪“喜欢”的方式,我建议添加另一个名为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)