【问题标题】:DB Schema for an application应用程序的数据库模式
【发布时间】:2018-01-28 11:14:18
【问题描述】:

我有一个应用程序,我需要在博客段落上发布 cmets,而不是在博客上发表评论。段落由两个换行符分隔。

我将使用post.split('\n\n') 拆分收到的帖子,将帖子和段落保存在单独的表格中(BlogParagraphs)。现在,每当收到新评论时,我都会将其保存在 Comments 表中,并带有 para_id。

以下是我计划构建的数据库架构。

表格博客

-id
-title
-date

表格段落

-id
-para
-sequence_no
-blog_id(FK)

表格评论

-id
-comment
-para_id(FK)
-date

上面的设计有一些缺陷。考虑更新帖子时的示例,即,在两个段落之间插入一个新段落,或者一个段落被完全删除。这将导致序列(序数)失真。我将如何处理这样的用例?

【问题讨论】:

  • 您将相应地更新序列 ID

标签: mysql database database-design database-schema


【解决方案1】:

为每个段落计算一个唯一的哈希值,并使用 PostID+ParagraphHash 的组合作为主键。

将时间戳与每个段落一起存储。每次用户编辑帖子时,更新现有段落的时间戳。很容易发现被删除的段落。

【讨论】:

  • 此外,您可以逻辑删除而不是物理删除段落。在重新排序或删除/插入的情况下,段落的排序将成为一个更大的问题。在这些情况下,我建议创建一个元文档构造,该构造维护段落实体本身的外部排序。换句话说,将排序移出段落。
猜你喜欢
  • 2013-07-23
  • 2011-12-26
  • 1970-01-01
  • 2019-02-11
  • 2011-11-26
  • 1970-01-01
  • 1970-01-01
  • 2011-06-06
  • 1970-01-01
相关资源
最近更新 更多