【问题标题】:Storing Posts&Comments in seperate tables or together将帖子评论存储在单独的表中或一起
【发布时间】:2019-01-08 15:49:14
【问题描述】:

我想知道什么是最好的,将我的 cmets 存储在我的 post table 中还是他们拥有自己的 table?

我的帖子表只有一个 id、userid、图片 url 和帖子的描述。我将帖子表与我的用户表连接起来以检索作者的姓名。

我应该在我的帖子表中为 cmets 添加一个新列并存储所有 cmets 的 json,还是应该创建一个新的 cmets 表并将每个评论记录为单独的行?我不打算添加字段来响应人们,只是存储 cmets。我假设只是添加另一列会很好。

如果我将 cmets 存储在 posts 表中,那么我就不必进行单独的 api 调用来收集它们。

谢谢,很想听听你的想法。

【问题讨论】:

  • 存储在单独的表中...阅读规范化

标签: mysql sql database


【解决方案1】:

如果您使用关系数据库,那么正确的方法是使用 normalizationnormal forms。这意味着您应该创建两个单独的表:posts 和 post cmets

【讨论】:

  • 那么最好是让每个评论成为单独的行还是拥有所有 cmets 的 json?如果用户需要,单独的行会更容易维护和修改。
  • @ImJT 每个评论都应该存储在单独的行中
【解决方案2】:

您可以在 id 旁边添加一个 id_parent 列,该列具有完全相同的属性,但 AUTO_INCREMENT 和 DEFAULT 为 0。

给定的列可以指向以前帖子中已经存在的id。如果这是一个新帖子,它可以保持默认值。

如果您不使用 FOREIGN KEYS 约束新列,这将起作用。如果您需要更快地搜索所有回复的帖子,您可以设置一个索引。

这还可以让您灵活地引用帖子而不是帖子,而无需创建新表格和到处搜索。它可能缺乏规范化,但可以节省您在复杂性方面的时间和精力。

【讨论】:

  • 这是个好主意,但我认为在这种情况下帖子和 cmets 是独立的实体(即一个帖子可以有多个 cmets,但帖子没有父帖子)
  • 感谢 Adyson,这完全取决于您。这背后的想法是通过连接来降低复杂性。例如,如果您对帖子和 cmets 使用相同的表单,则不必为同一件事实现 2 个表单。这就是我,我喜欢可重用性。
  • " 例如,您对帖子和 cmets 使用相同的表单" ...这会让用户感到非常困惑,不是吗?通常有人创建帖子(博主),而其他人则通过不同的 UI 编写 cmets(互联网巨魔 :-p)。它们是不同的实体。他们可能对可以包含哪些内容、他们具有哪些属性等有完全不同的领域和要求。评论通常是一个比帖子简单得多的实体。我不认为这是一个非常实用的建议。我完全支持可重用性,但不以清晰度或准确性为代价。
  • 问题是你可以做任何你喜欢的关于如何表示表格和输入的事情。我更喜欢保持相同的界面来调整它,每个案例只使用很少的 if/else。例如,评论中肯定没有标题,或者可能有?我的意思是,有时能够识别此评论的内容是件好事。你也对帖子和评论赞不绝口吗?你能设置一些链接吗?从您的示例中,将帖子与评论分开的唯一额外字段是 imageURL。您需要它来发布帖子还是可以将其添加到说明中?
  • “来自您的示例”...我认为您将我误认为是提出问题的人。我只是笼统地谈论博客文章。例如,在 Wordpress 中,帖子比附加的评论复杂很多倍。 OP 目前有一个简单的例子,但如果他们经常使用他们的系统,我敢打赌它会很快变得更加复杂。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-07
  • 2013-04-01
  • 2023-04-10
  • 2017-05-20
相关资源
最近更新 更多