【发布时间】:2010-09-07 13:05:41
【问题描述】:
我们在项目中要求将实体的所有修订(更改历史)存储在数据库中。目前我们为此设计了 2 个提案:
例如对于“员工”实体
设计 1:
-- Holds Employee Entity
"Employees (EmployeeId, FirstName, LastName, DepartmentId, .., ..)"
-- Holds the Employee Revisions in Xml. The RevisionXML will contain
-- all data of that particular EmployeeId
"EmployeeHistories (EmployeeId, DateModified, RevisionXML)"
设计 2:
-- Holds Employee Entity
"Employees (EmployeeId, FirstName, LastName, DepartmentId, .., ..)"
-- In this approach we have basically duplicated all the fields on Employees
-- in the EmployeeHistories and storing the revision data.
"EmployeeHistories (EmployeeId, RevisionId, DateModified, FirstName,
LastName, DepartmentId, .., ..)"
还有其他方法可以做这件事吗?
“设计 1”的问题在于,每次需要访问数据时,我们都必须解析 XML。这会减慢进程并增加一些限制,例如我们无法在修订数据字段上添加连接。
“设计 2”的问题在于,我们必须在所有实体上复制每个字段(我们有大约 70-80 个实体需要维护修订)。
【问题讨论】:
-
仅供参考:以防万一它可能会有所帮助。Sql server 2008 及更高版本具有显示表更改历史的技术。访问simple-talk.com/sql/learn-sql-server/… 了解更多信息,我相信数据库像 Oracle 也会有这样的东西。
-
请注意,某些列可以自己存储 XML 或 JSON。如果现在不是这样,将来可能会发生。最好确保您不需要将此类数据逐个嵌套。
-
这在直觉上被称为“缓慢变化的尺寸”,en.wikipedia.org/wiki/Slowly_changing_dimension 有一些有用的信息,仅供参考。
标签: sql database database-design versioning