我主要从事业务应用程序开发和配置管理。您的问题代表了这种环境中的挑战;例如,当您升级 Microsoft Word 时,您不需要立即将所有文档从 doc 更改为 docx。并且文档甚至具有更简单的结构一个完整的关系数据库。
商业应用程序并非如此;用户跳过版本,对数据模型进行未经授权的更改,系统需要继续运行并提供正确的数字......
我们为自己的应用程序(最大的一个像 600 个表)使用了一个包括分支/合并的自行开发的 CASE 工具,但该方法也可以手动完成。
版本控制数据模型
数据模型可以结构化的方式写下来。例如,作为表格内容(CSV 加载到带有元数据的表格中)或作为检测正在使用的版本并在缺失时添加列和表格的代码,包括非平凡的迁移。
这甚至允许多个用户同时更改数据模型。
当您使用自动检测时(例如,我们使用名为“verify_column”而不是“add_column”的调用),这甚至可以实现独立于客户开始升级的版本号的平滑迁移。这样的过程分析要更改的表并发出正确的 DDL,例如alter table t1 add col1 number not null
当列丢失或alter table t1 modify col1 not null
列已经存在但可以为空时。
对于 Oracle 和 SQL Server,我可以为您提供一些示例过程。在 MySQL 中,我将使用客户端语言对此进行编码,最好是独立于操作系统,以允许安装在 Windows 和 Linux 上运行。当你有这方面的经验时,也许会使用 Apache Ant。
版本控制数据
我们将表格分为四类:
- R:参考数据;应用站点在实际使用系统之前必须提供的数据。例如,总帐科目代码。参考数据在上线后很少更改,并且不会持续增长。内容反映了使用该应用程序的站点的商业模式。
- T:交易数据;网站在使用应用程序期间注册、更改和删除的数据。例如,总帐分录。交易数据从 0 开始持续增长。当公司收入翻倍时,交易数据也会翻倍。
- S:种子数据;数据不是由用户在网站上维护,而是由开发方提供和维护。本质上,这是将代码转换为数据。例如,“F”代表“女性”。种子数据中的错误可能导致系统错误。
- O:其余的(理想情况下不需要,因为它们是技术性的,但有些系统需要临时表 A 或临时表 B)。
“S”类表(种子数据)的内容置于版本控制之下。我们通常在案例工具中将这些注册为元数据,然后命名为“数据集”,但您也可以使用 Microsoft Excel 甚至代码。
例如,在 Excel 中,您将有一个种子数据行列表。在 A 列中,您可以输入一个 Excel 函数,该函数=B..&"|"&C..& "|" & ...
将所有内容连接起来并使其适合加载器工具加载。
例如,在代码中,您可能会有如下调用:
verifySeed('TABLE_A', 'CODE', 'VALUE')
Excel 有点难以控制版本控制,允许多个用户同时更改内容。使用代码的方法非常简单。
请记住还要添加功能以删除过时的种子数据。例如,通过明确列出过时的种子数据或自动删除表中存在但上次安装未触及的所有种子数据。