【问题标题】:How would you set up a database to handle comments for a blogging site?您将如何设置数据库来处理博客站点的评论?
【发布时间】:2021-08-31 12:06:37
【问题描述】:

我是一名学习数据库设计的学生,目前正在学习一对一、一对多、多对多的关系。我非常了解这个概念,但我觉得我缺乏在实际生产场景中如何实现它的经验/信息。

我的问题是这个

如果我有一个博客网站,其中包含博客文章作为实体和每篇博客文章的 cmets,您将如何处理数据库中的 cmets?`

您是否会使用一对多关系并将所有 cmets 存储在一个表中。然后将这些 cmets 链接到每个博客文章和创建它的用户?

如果每个评论都有一个子评论怎么办?您会为子 cmets 创建一个单独的表并将其链接到单个评论吗?这会在数据库本身内造成过多的开销和混乱吗?

我了解所有概念,但不了解处理看似基本内容的最佳实践。

提前致谢!

【问题讨论】:

  • 其他人是做什么的?
  • 我一直在环顾四周,所有信息似乎都令人费解或不完整。你有我能读到的某种链接吗?也愿意这样做! @草莓

标签: database-design relational-database


【解决方案1】:

最简单的解决方案是坚持一对多的关系。使用一张表,每行存储一条评论,其中包含对帖子和评论作者的引用以及时间戳,以便您可以按时间顺序对 cme​​ts 进行排序。

您似乎不确定是否需要“线程注释”层次结构。这个比较复杂,所以if you don't need it, don't bother

如果您确实需要显示评论线程,那么您应该了解在 MySQL 8.0 中运行递归查询:https://dev.mysql.com/doc/refman/8.0/en/with.html#common-table-expressions-recursive

您仍然只需要一张桌子。不要为子 cmets 创建第二个表。只需像在一对多示例中一样存储 cmets,但每个评论在回复时可能会链接到其“父”评论。

许多网站使用的另一种解决方案是跳过实现自己的评论系统,而只嵌入像Disqus 这样的评论服务。这可能比您的更可靠和安全。但是,如果您将此作为学习练习,那也是值得的。

【讨论】:

  • 比尔,谢谢你的回答!这清楚了很多。我做这一切都是为了学习。所以我很感激帮助。我实际上并没有为生产构建任何东西,只是测试一些东西以了解我在课堂上在实践层面上学到的东西。我很容易坐下来上课,然后说:“你是一对多的关系,我可以通过多项选择来回答这个问题”!另一个在实践中思考和实践
  • 毫无疑问,编写代码并获得使其工作的经验对于成为一名软件开发人员来说是有价值和必要的。不要害怕犯错,只要你能从中吸取教训。
猜你喜欢
  • 2013-11-21
  • 1970-01-01
  • 2011-03-30
  • 2017-10-04
  • 2021-04-16
  • 1970-01-01
  • 2012-10-04
  • 1970-01-01
  • 2020-05-07
相关资源
最近更新 更多