数据库设计:喜欢桌子

时间:2012-09-02 15:54:08

标签: database database-design normalization data-warehouse

我有两张桌子(现在):

  1. Topic
  2. Post(帖子是对主题的评论)
  3. 我想将选项添加到这些对象 所以我想创建一个Likes表并使用enum来表示喜欢哪个对象(当然包括对象的id)。

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

      

    id object_name
      1主题
      2帖子

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

    采取什么样的最佳做法?

3 个答案:

答案 0 :(得分:2)

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

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

我的意思是你不能在你的表中添加一列object_id,因为你不知道它将指向的表。在这种情况下,您有两个添加两列,topic_idpost_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)