database - 版本控制数据库持久对象,你会怎么做?

标签 database database-design versioning auditing

<分区>

(与数据库模式的版本控制无关)

与数据库交互的应用程序通常具有由许多表中的数据组成的域对象。假设应用程序要支持这些域对象的版本控制,在 CVS 的意义上。

对于一些任意域对象,您将如何设计数据库模式来处理此要求?有什么经验可以分享吗?

最佳答案

仔细考虑修订要求。一旦你的代码库在操作系统中内置了无处不在的历史跟踪,它将变得非常复杂。 Insurance underwriting systems对此特别不利,模式通常运行超过 1000 个表。查询也往往非常复杂,这可能会导致性能问题。

如果历史状态真的只需要用于报告,请考虑实现一个“当前状态”交易系统,并在后面悬挂一个数据仓库结构以跟踪历史记录。 Slowly Changing Dimensions与尝试将临时历史跟踪机制直接嵌入操作系统相比,这是一种跟踪历史状态的更简单的结构。

此外,Changed Data Capture对于对记录进行更改的“当前状态”系统更简单 - 记录的主键不会更改,因此您不必匹配将同一实体的不同版本保存在一起的记录。有效的 CDC 机制将使增量仓库加载过程相当轻量级并且可以非常频繁地运行。如果您不需要最新的历史状态跟踪(几乎,但不完全是,矛盾),这可能是一个有效的解决方案,它的代码库比直接内置到应用程序中的完整历史跟踪机制简单得多。

关于database - 版本控制数据库持久对象,你会怎么做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/125877/

相关文章:

Mysql 一张中间表多个相似表

C#:如何设置程序集的版本号

ruby - ruby gem 扩展版本号的最佳实践是什么?

带有主题和子主题的年级 MySQL 表设计

database - 在 Hibernate 中记录测试数据

c++ - 在 C++ 应用程序中存储、跟踪和更新 SQLite 数据库版本

database - 如何为依赖动态数据的函数编写单元测试?

MySQL Insert - 如何防止同一个表中的两个外部 ID 相同?

database - 如何在 oracle11g 中定义引用该类型集合的类型?

java - 如何选择Firebase实时数据库中的键名称?