Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 数据库设计:Likes表_Database_Database Design_Normalization_Data Warehouse - Fatal编程技术网

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我不明白你的问题。