<分区>
(与数据库模式的版本控制无关)
与数据库交互的应用程序通常具有由许多表中的数据组成的域对象。假设应用程序要支持这些域对象的版本控制,在 CVS 的意义上。
对于一些任意域对象,您将如何设计数据库模式来处理此要求?有什么经验可以分享吗?
<分区>
(与数据库模式的版本控制无关)
与数据库交互的应用程序通常具有由许多表中的数据组成的域对象。假设应用程序要支持这些域对象的版本控制,在 CVS 的意义上。
对于一些任意域对象,您将如何设计数据库模式来处理此要求?有什么经验可以分享吗?
最佳答案
仔细考虑修订要求。一旦你的代码库在操作系统中内置了无处不在的历史跟踪,它将变得非常复杂。 Insurance underwriting systems对此特别不利,模式通常运行超过 1000 个表。查询也往往非常复杂,这可能会导致性能问题。
如果历史状态真的只需要用于报告,请考虑实现一个“当前状态”交易系统,并在后面悬挂一个数据仓库结构以跟踪历史记录。 Slowly Changing Dimensions与尝试将临时历史跟踪机制直接嵌入操作系统相比,这是一种跟踪历史状态的更简单的结构。
此外,Changed Data Capture对于对记录进行更改的“当前状态”系统更简单 - 记录的主键不会更改,因此您不必匹配将同一实体的不同版本保存在一起的记录。有效的 CDC 机制将使增量仓库加载过程相当轻量级并且可以非常频繁地运行。如果您不需要最新的历史状态跟踪(几乎,但不完全是,矛盾),这可能是一个有效的解决方案,它的代码库比直接内置到应用程序中的完整历史跟踪机制简单得多。
关于database - 版本控制数据库持久对象,你会怎么做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/125877/