Database 数据库设计:Likes表
我有两张桌子(目前):Database 数据库设计:Likes表,database,database-design,normalization,data-warehouse,Database,Database Design,Normalization,Data Warehouse,我有两张桌子(目前): 主题 Post(Post是一个主题的注释) 我想将该选项添加到类似于那些对象。 因此,我考虑创建一个like表,并使用enum指示喜欢哪个对象(当然包括对象的id) 顺便问一下,如果我选择此选项,它应该是一个枚举还是另一个表来表示所有对象: id对象\u名称 1个主题 2个职位 另一个选项是为每个对象创建表 最佳做法是什么 我认为为每个对象创建一个单独的表更好 如果你只用一张桌子,我看不出你能得到什么。不能在一个表中正确使用外键 我的意思是,您不能将列object\u i
主题
Post
(Post是一个主题的注释)因此,我考虑创建一个like表,并使用enum指示喜欢哪个对象(当然包括对象的id) 顺便问一下,如果我选择此选项,它应该是一个枚举还是另一个表来表示所有对象: id对象\u名称
1个主题
2个职位 另一个选项是为每个对象创建表
最佳做法是什么 我认为为每个对象创建一个单独的表更好 如果你只用一张桌子,我看不出你能得到什么。不能在一个表中正确使用外键 我的意思是,您不能将列
object\u id
添加到表中,因为您不知道它将指向哪个表。在本例中,您有两个添加两列,topic\u id
和post\u id
。根据您跟踪“likes”的方式,这两个表中的一个总是NULL
,我建议添加另一个名为likes
的表,效果如下:
likes (like_id, like_type)
从这一点开始,您只需计算每个like_type
(主题/帖子)的“like”数量,因为每当有人喜欢某个主题或帖子时,都会插入一条记录。不过,若您计划按用户跟踪“喜欢”,则需要为用户添加另一列
如果要跟踪单个帖子或主题,可以为每个对象设置一个表,并为主题或帖子ID
创建一个外键约束
topic_likes (tl_id, topic_id)
post_likes (pl_id, post_id)
上面的设计将为每个类似的项目创建一个条目。如果您只关心每个对象的喜欢总数,您可以设置如下内容:
likes (like_id, like_type, likes)
只需为喜欢的对象创建另一个表: tbl_posts_likes(likeID,userID,posted,like=1,distinch=-1) 然后您可以编写如下子查询:
SELECT SUM(like) as likeCount, SUM(unlike)
FROM tbl_posts_likes
GROUP BY postID
WHERE postID= posts.postID
是的,但是你不能跟踪相似的对象(你不能使用外键)。离开OP的一般要求,去喜欢“对象”。嗯,是的。如果他不关心具体的主题或帖子,那么你的解决方案是非常好的。但是我可以用一个枚举来表示所有的对象,或者使用一个
objects\u表
cause@socksocket不要使用enum
进行规范化。@njk那么使用objects\u table可以吗?@socksocket我不明白你的问题。