数据库版本/数据更改控制不是架构?

sur*_*190 9 mysql sql database git database-versioning

在阅读了几篇文章之后,我意识到开发团队中的数据库版本控制实际上非常重要.

到目前为止,dump whole database每次有更新时我都会使用一个简单的,如果只有一个表被更改,有时我们可以通过转储单个表然后重新导入来逃脱.不是最好的,但是效果很好,对于添加剂的改变,我们还没有任何打嗝.

现在,我将.mwb (Mysql Workbench diagram)文件保存在我正在处理的项目的git存储库中.然后我也用DBVschema management,用git一起,每个分支基础上,项目被命名,它的工作相当不错.这允许我通过还原或回滚功能对原理图进行版本更改.

但是,表中包含的数据如何.怎么能保持这个?也许我最好坚持使用旧方法.我理解具有相同数据库结构但数据不同的项目,但是具有特定数据库数据的站点需要进行版本控制和管理.

另外,已部署的需要更改数据库的站点的基础如何,这是如何无缝的.有些人建议使用更新/更改脚本,并且可以使用默认值等.但是如果我在网站平台上进行了更改,需要更改每个网站数据库,并保持数据完好无损呢?

Gui*_*ers 1

我主要从事业务应用程序开发和配置管理工作。你的问题代表了这种环境下的挑战;例如,当您升级 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')
Run Code Online (Sandbox Code Playgroud)

Excel 有点难以接受版本控制,允许多个用户同时更改内容。使用代码的方法非常简单。

请记住还添加功能以删除过时的种子数据。例如,通过显式列出废弃的种子数据或自动删除表中存在但上次安装未触及的所有种子数据。