mysql - 不删除数据库表

标签 mysql database-design

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

所以,A 写了文章 1 并保存了它。 B 编辑文章 1。

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

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

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

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

最佳答案

您可以让同一篇文章出现在同一个表中,但具有不同的 ID 值。您可以根据最高 ID 或通过设置 bool 值(例如“isActive”)来确定事件文章。

这类似于 SO 和维基百科处理修订历史的方式。

PK | ID  |        Title         |        Text       |   Edited   | Edited By
-----------------------------------------------------------------------------
1  | 128 | History of Computin  | The History of... | 2009/07/10 | Jon Sampson
2  | 128 | History of Computing | The History of... | 2009/07/11 | John Smith

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

关于mysql - 不删除数据库表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1138235/

相关文章:

php - 每天、每周、每月重置mysql表列

c# - 在 MySQL 和 C# 中获取 "both"日期和时间的正确 DateTime 格式是什么

MySQL 规范化或非规范化

mysql - 如何管理数据库表中的实体重复

sql-server - 字符串数据字段大小的最佳实践是什么?

MySQL:写入从节点

php - 如何检索mysql数据并将其显示在html中

mysql - 如何将一个巨大的 WordPress 多站点数据库分解为单独的 MySQL 数据库?

MySQL 递归关系阻止我进行插入

sql - 存储博客评论/点赞 - 跟踪用户?