【问题标题】:How to build a relationship between a 'user' and 'his comment'?如何在“用户”和“他的评论”之间建立关系?
【发布时间】:2019-07-04 18:12:24
【问题描述】:

我目前正在编写一个博客来获得 php 的经验(我已经制作了一个 MVC 框架),所以我还是新手。

我有两张表对这个问题很重要:

user(id, username, password, registrated)

comments(id, content, post_id, comment_author, date, editedAt, editedBy)

comments-table 中,comment_author 尚未链接到用户的 id,因为我不确定如何实际执行此操作。

一个用户可以写任意多的cmets,但是一个评论只能有一个作者。

comment_author 目前包含username,但我知道我需要id(如果用户被删除并且其他人会使用此用户名注册,则评论将是他的)。

我现在应该如何构建表格?

1.) comments_author_id in comments-table,id in user 作为外键:

在这种情况下,我会在comments-表中拥有评论作者的id,但user 不会知道他编写的cmets。如果我想在其个人资料上显示用户最近的 cmets,我可以通过 inner-join 查询获得它们吗?

2.) 新建表格user_comments(id, user_id, comment_id)

在这种情况下,usercomments 不会知道它的作者/cmets。

我还有“editedBy”,其中最后一个编辑用户的用户名是。我可以以某种方式将其与users-table 中的用户名链接,还是应该将其与id 链接?

我对这个问题真的很迷茫,因为我对数据库知之甚少;因此,我感谢我能得到的每一个帮助和建议。

如果我需要提供任何进一步的信息或更改某些内容以便更好地理解,请告诉我。

【问题讨论】:

  • 如果评论只有一个作者选项 1 就足够了。
  • 同意,我会去添加用户和评论之间的关系,将用户 ID 添加到评论中,一个简单的连接就足以获得用户的 cmets。

标签: php sql database phpmyadmin structure


【解决方案1】:

您选择第一个选项是有道理的。

正如你所说,评论只有一位作者,所以只需对用户表使用外键。

在第二个选项中,您正在为不需要新表的数据创建一个空洞新表,因此您正在存储不需要的数据。您还必须在两个不同的表中写入,这是添加评论的两种不同操作,它没有提供您可以使用的额外功能。

【讨论】:

  • 谢谢,那我该如何处理'editedBy'呢?我认为它也应该与 id/用户名相关联,我也可以将它与user-id 联系起来吗?
  • @ofmiceandmoon 是的,如果您不需要任何额外数据,例如旧编辑或 ...
【解决方案2】:

最好的方法是创建一个新表user_comments(id, user_id, comment_id)。如果您想跟踪每个更改/编辑评论或发布,那么如果您为此创建另一个表并且如果用户只能编辑,那么我认为最好不要生成 editedBy 字段。结构完全取决于你想要什么样的跟踪。

【讨论】:

  • 首先谢谢。如果我想对帖子做同样的事情,我也必须制作一张桌子user-posts(id, user_id, post_id),对吧?
  • 帖子只有一位作者。您可以将user_id 与您的posts table 一起使用,无需创建另一个,因为A 帖子只有一个作者,并且可能被许多其他人编辑,这就是为什么如果您跟踪编辑的人会更好,然后您可以创建一个表为editPosts 。您可以使用user_id 与您的帖子表不推荐创建另一个
猜你喜欢
  • 2013-02-20
  • 2021-04-01
  • 2020-08-15
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 2017-11-19
  • 1970-01-01
相关资源
最近更新 更多