mysql数据库保留历史更改(如wiki)

cfh9epnr  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(373)

我有一个网站,我让用户改变了几页,但现在我想以某种方式保持跟踪这些变化,并显示给其他用户(有点像维基)
以下是我目前得到的:

id, title, description, country, language, last_update (and ~20+ more fields)

我在考虑用id和上一个history\u id创建一个主表,然后history表得到上面的所有内容,这样每个新条目都会得到一个新history\u id和所有新条目。
我觉得我可以做得更好。因为使用上面的方法,我将得到大量类似的行(只是改变一个字段或一个字母什么的)。
有什么建议吗?谢谢!

u7up0aaq

u7up0aaq1#

我认为你的想法是对的。您需要两张table,它们看起来应该类似于:

create table page (
  id bigint primary key not null,
  title varchar(100) not null,
  -- More columns here.
  -- The last version of the content column can added here as redundancy,
  --   for performance reasons.
  last_version_id bigint, -- allows null
);

create table page_version (
  id bigint primary key not null,
  content mediumtext not null,
  page_id bigint not null,
  constraint fk_pv_page foreign key (page_id)
    references page (id)
);

alter table page add 
  constraint fk_page_version foreign key (last_version_id)
    references page_version (id);

内容列的最后一个版本可以添加到 page 表(将是多余的),以提高读取/显示页面时的性能。
阅读页面通常比更新页面要常见得多,这样冗余可以让你的网站更快。
请注意这一栏 last_version_id 允许空值,所以您可以在mysql中插入/更新一行(这不实现约束检查延迟性)。

相关问题