我有一个基本的CRUD网络应用程序,人们可以创建文章/编辑它们。我现在想添加修改所有修改历史记录的功能。目前,我有一个文章表,看起来像这样:规范化或反规范化将修订历史存储在RDBMS中?
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)
我正在考虑去第二个选项,因为它会使我的编码更容易(不太复杂,代码行少)。我知道这不是“学术”和“纯粹”,但我个人的感觉是,必须进行额外的连接会伤害代码维护。此外,性能应该更好,因为没有必要完成许多联接。
这是一个合理的方式去完成这项任务?可能是我忽略的任何不可预见的或长期的后果?
JNK是正确的(虽然没有SQL中的连接优化 - RDBMS是。虽然细节)。对于我们的发票申请,我们有类似的问题,但那里的“历史”表是发票表的精确副本,还有一些附加字段(历史PK,时间戳等)。容易'插入历史选择空,现在(),...,我*发票我'* – Konerak 2012-04-11 19:14:30