我有一个网站,我让用户更改几页,但现在我想以某种方式跟踪这些更改并将其显示给其他用户。 (我觉得像维基一样)
以下是我目前的情况:
id, title, description, country, language, last_update (and ~20+ more fields)
我正在考虑制作一个包含ID和最后一个history_ID的主表,然后历史表得到以上所有内容,这样每个新条目都会获得一个新的history_ID和所有新条目。
我觉得我可以做得更好。因为使用上面的方法,我最终会得到大量相似的行(只需改变一个字段或字母或其他内容)。
有什么建议吗?谢谢!
答案 0 :(得分:0)
我认为你有正确的想法。您需要两个表,它们看起来应该类似于:
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中实际插入/更新行(不会实现约束检查延迟)。