我有一个基本的 CRUD 网络应用程序,人们可以在其中创建/编辑文章。我现在想添加保留所有编辑的修订历史的功能。目前,我有一个看起来像这样的文章表:
Article(id, title, content, author_id, category_id, format)
我考虑了 2 个选项来更改我当前的模式以添加对修订历史的支持。基本思想是将任何文章的每一次编辑都存储为修订表中的记录。所以文章和修订是一对多的关系。
第一个选项(规范化):一个表用于文章元数据,一个用于修订。没有存储重复数据。
Article(id, title, category_id)
Revision(id, content, author_id, format)
第二个选项(非规范化):两个表与选项 1 类似,但有一些重复的列。
Article(id, title, content, author_id, category_id, format)
Revision(id, article_id, content, author_id, format)
我正在考虑使用第二个选项,因为它会使我的编码更容易(不太复杂,代码行更少)。我知道这不是“学术的”和“纯粹的”,但我个人的感觉是,必须进行额外的连接会损害代码维护。此外,性能应该会更好,因为不需要进行那么多的连接。
这是完成这项任务的好方法吗?我可能忽略了任何不可预见的或长期的后果?