2014-01-07 66 views
9

在阅读了几篇文章后,我意识到开发团队中的数据库版本控制其实非常重要。数据库版本/数据更改控制不是模式?

到现在为止,我一直在使用一个简单的dump whole database每次有更新,如果只有一个表被更改有时我们可以逃脱只是倾销单个表,然后重新导入。不是最好的,但它工作得很好,因为添加剂的变化,我们还没有任何打嗝。

现在,我将一个.mwb (Mysql Workbench diagram)文件保存在我正在处理的项目的git存储库中。 然后,我还使用dbvschema management以及git,每个分支都是基于项目命名的,并且工作得很好。这使我可以通过恢复或回滚的能力版本更改原理图。

但是,表中包含的数据呢?这怎么能保持?也许我更喜欢坚持旧方法。我了解具有相同数据库结构但数据不同的项目,但具有特定数据库数据的站点需要进行版本化和管理。

另外,已经部署的网站需要更改数据库的基础,这又如何可以无缝连接。有些人建议使用更新/更改脚本,并使用默认值等工作正常。但是如果我在一个网站平台上进行了改变,那么需要更改每个网站数据库并保持数据不变?

+0

这可能对你很有趣:http://stackoverflow.com/questions/6409204/database-migrations-in-a-complex-branching-system –

+0

hi @Stevie G有没有任何答案可以帮助你解决你的问题?如果没有,请添加什么不成功的问题。当答案对您有帮助时,您是否可以通过点击旁边的空心绿色复选标记来接受它? –

回答

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:交易数据;

  • T:交易数据;数据站点注册,更改和删除应用程序的使用期间。例如,总帐分录。交易数据从0开始连续增长。当公司的收入增加一倍时,交易数据也会增加一倍。
  • S:种子数据;数据不由用户在现场维护,而由发展方提供和维护。本质上这是代码转换成数据。例如,'F'代表'女性'。播种数据中的错误可能导致系统错误。
  • O:其余(理想情况下不需要,因为它们是技术性的,但有些系统需要临时表A或临时表B)。

类别'S'(种子数据)表的内容被置于版本控制之下。我们通常在我们的案例工具中将这些注册为元数据,然后将其命名为“数据集”,但您也可以使用Microsoft Excel甚至代码。

例如,在Excel中,您将拥有种子数据行的列表。在列A中,您可以输入一个Excel函数,如=B..&"|"&C..& "|" & ...,它将所有内容连接起来,并使其适合通过加载器工具进行加载。

例如,在代码中,你可能有这样一个电话:

verifySeed('TABLE_A', 'CODE', 'VALUE') 

的Excel是一个有点难以版本控制,允许多个用户在同一时间更改的内容下带来。代码的方法非常简单。

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

0

您需要在与您的代码版本同步的数据模型上保留一个事务日志。对于添加信息的每个更新(即新字段),只需输入诸如“ALTER TABLE x ADD COLUMN y ...”之类的语句,并在更新脚本中提供DEFAULT VALUE(可能有一个函数)。对于downdate脚本使用'ALTER TABLE x REMOVE COLUMN y ...'。在截断表中的信息之前,您需要导出数据。您可以将转储后的表格数据转换为SQL以进行反向交易,以便您可以使用这些信息添加缺失的信息。

您可以在数据模型中使用'journal'表来跟踪这些事务,使用表示应用脚本的简单序号。无论何时安装软件,它都可以比较这些数字,以创建一系列要将数据库从状态N移动到状态X,向后或向前移动的事务清单,而不会丢失任何数据!