【问题标题】:No delete database table没有删除数据库表
【发布时间】:2014-08-11 22:25:13
【问题描述】:

我需要创建一个不会删除任何文章的文章系统。更重要的是,他们希望所有文章编辑在保存原始文章后创建新文章而不是覆盖旧文章。

所以,A 人写了第 1 条并保存了它。 B 人编辑第 1 条。

组织这个数据库的最佳方式是什么?我的想法是:

  • 文章,
  • 文章,
  • 身份证,
  • old_id(编辑前的文章ID,以便用户可以“撤消”),
  • deleted(布尔值,如果删除它不会显示在系统中,除非用户查看“垃圾箱”),
  • 标题,
  • 文章,
  • 已创建(冗余?),
  • 已更新(上次更新日期),
  • user_id(上次更新文章的用户 ID)。

因此,当用户编辑一篇文章时,它会创建一条新文章记录,但会将旧文章 ID 保存为参考。

这是最好的方法还是有更有效的方法?

【问题讨论】:

    标签: mysql database-design


    【解决方案1】:

    您可以让同一篇文章出现在同一个表格中,但使用不同的 ID 值。您可以根据最高 ID 或通过设置布尔值(例如“isActive”)来确定活跃文章。

    这类似于 SO 和 Wikipedia 处理修订历史的方式。

    PK |身份证 |标题 |正文 |已编辑 |编辑者 -------------------------------------------------- -------------------------- 1 | 128 | Computin 的历史 |的历史... | 2009/07/10 |乔恩·桑普森 2 | 128 |计算历史 |的历史... | 2009/07/11 |约翰·史密斯

    在这种情况下,我可以看到第 128 条已被编辑。最新版本是 #2,作者 John Smith。

    【讨论】:

    • 是否值得将文章存储在新表中,还是应该将它们留在当前表中?我认为系统不会承受很大压力,但我仍然希望它高效。
    • 把它放在同一张桌子上。如果需要,可以轻松回滚。
    • 我会走布尔 isActive 路线。这样,即使它被拒绝并且没有被选为“活动”文章,您也可以保留以后的修订。我认为它可以比选择特定文章 ID 的最大值更有效地索引和访问。您还可以从将当前表设为视图开始,过滤掉您的 bool isActive 标志,如果性能成为问题,您可以通过管理真正的“current_table”来解决问题。
    【解决方案2】:

    维基百科的做法是它有一个表,称为“cur”的 IIRC,仅包含每篇文章的当前版本,另一个表包含所有以前的版本。

    优点是,如果表较小,对“cur”的查找可能会更快,并且不必检查键和一些指示它是否是最新的标志。

    【讨论】:

      【解决方案3】:
      TABLE Revisions:
       ID
       FK_Articles (Articles.ID)
       Status (active, deleted, etc)
       Content
       Metadata (timestamp, user data, etc)
      
      TABLE Articles:
       ID
       FK_Revisions (Revisions.ID - current revision of the article)
      

      【讨论】:

        【解决方案4】:

        是的,我会去的。状态栏,有“A”(活动)、“D”(已删除)、“P”(等待编辑批准)等。

        您可能希望添加一项功能,用于确定文章何时上线,因为许多系统可能需要等到特定时间才能显示文章,但文章是预先上传的。

        您可能希望保留静态文章标识符,以便即使文章更新,带有该标识符的 URL 也能继续工作。可能值得将静态文章标识符与当前活动的文章 ID(外键)链接起来。

        如果您将拥有大量文章,那么拥有一个将文章的旧修订版从文章表移动到存档文章表的系统可能是值得的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-10-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-27
          • 2023-03-30
          • 1970-01-01
          相关资源
          最近更新 更多