我有两张桌子(现在):
Topic
Post
(帖子是对主题的评论)我想将选项添加到赞这些对象 所以我想创建一个Likes表并使用enum来表示喜欢哪个对象(当然包括对象的id)。
顺便说一下,如果我选择这个选项,它应该是枚举还是另一个表代表所有对象:
id object_name
1主题
2帖子
另一种选择是为每个对象创建likes表。
采取什么样的最佳做法?
答案 0 :(得分:2)
我认为为每个对象创建一个单独的表更好。
如果你只使用一张桌子,我看不到你得到了什么。您也不能在一个表中正确使用外键。
我的意思是你不能在你的表中添加一列object_id
,因为你不知道它将指向的表。在这种情况下,您有两个添加两列,topic_id
和post_id
。总是两个中的一个是NULL
。
答案 1 :(得分:1)
只需为喜欢的人创建另一个表:
tbl_posts_likes(likeID,userID,postID,like = 1,与= -1不同)
然后你可以编写一个子查询,如:
SELECT SUM(like) as likeCount, SUM(unlike)
FROM tbl_posts_likes
GROUP BY postID
WHERE postID= posts.postID
答案 2 :(得分: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)