彩票走势图

使用SQL Compare命令行从源代码管理中进行自定义部署(上)

翻译|使用教程|编辑:莫成敏|2020-01-15 15:21:21.883|阅读 182 次

概述:Giorgi Abashidze解释了他的团队如何将两阶段部署过程与SQL Compare命令行以及一些SQL同义词一起使用,以自动为其每个客户进行自定义部署,而只需要在源代码管理中为每个版本维护一个分支。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

SQL Compare是一款比较和同步SQL Server数据库结构的工具。现有超过150,000的数据库管理员、开发人员和测试人员在使用它。当测试本地数据库,暂存或激活远程服务器的数据库时,SQL Compare将分配数据库的过程自动化。


在以前的文章中,从使用SQL比较命令行的源代码控制到数据库,我解释了我的团队如何使用SQL Compare命令行为我们的客户自动化数据库部署,而无需访问实际的登台数据库或生产数据库,这是不可能的这是一个银行数据库。我演示了如何仅通过访问我们的开发数据库(包含在TFS源代码管理下),如何使用SQL Compare命令行来部署所有客户通用的数据库元数据和代码。

但是,除了此共享代码外,还必须为我们的每个客户提供每个软件版本的唯一变体,以便向他们提供可满足其不同业务和合规性要求的自定义例程。我们每个客户都需要其中一些例程,当然,此专有功能应始终仅部署到该客户的生产数据库中:至关重要的是,任何客户都不能看到专门为另一位客户编写的逻辑。

我们如何实现这一目标?传统观点似乎是,在每个发行版中,我们将数据库版本的每个特定于客户的变体视为一个单独的分支。但是,这可能会增加构建的复杂性。有了一些创造力,我们可以避免这种情况,而是为每个新版本创建一个分支,我们可以使用该分支来维护和部署我们每个客户的所有共享逻辑,以及专用于无限数量客户的逻辑。

在本文中,我将解释如何使用SQL Compare命令行、同义词和一些独创性来完成所有这些工作。

我们如何将客户特定的例程存储在单个数据库中

因此,为了更接近于开发数据库的构造方式,我们假设我们的Trunk结合了我们所有的逻辑。假设我们有三个客户Cust1Cust2Cust3

我们还提供了一些代码,即一个称为loan.calculate_effective_rate的SQL存储过程,该程序根据某种算法来计算一段时间内贷款的实际支付利率,称为“有效利率”。 所有客户的代码都是相同的,但是有一天客户Cust1要求我们更改其版本的算法,这意味着我们现在需要维护和部署“有效费率”程序的两个不同版本。

首先,我们需要按照Cust1的要求,为Effective_rate过程实现替代算法(从这里开始,我将使用其缩写形式)。 我们只有一个开发数据库,称为Trunk,并且由于任何例程中每个例程的名称都必须唯一,这意味着我们必须有一种命名策略来区分这些变体。

我们做的方法是:

  • 将effective_rate过程重命名为effective_rate_default,为客户创建计算的默认实现。
  • 创建一个名为effective_rate_cust1的新过程。就参数和参数类型而言,它应具有与旧签名相同的签名。这必须仅部署到Cust1组织。

这意味着所有客户的应用程序代码现在都必须调用该effective_rate_default过程,但必须调用的Cust1除外effective_rate_cust1。但是,我们不希望对任何客户的调用代码进行任何更改。毕竟,该过程的目的没有改变,但是我们现在有多个相同的操作实现(计算贷款的有效利率)的方法。相反,我们使用同义词来表示具有多个实现的任何操作。换句话说,调用者代码从不直接调用确切的实现,而是调用操作(SQL同义词)。

因此,在这种情况下,我们将创建一个SQL同义词并将其部署给每个客户,该SQL同义词的名称为effective_rate,表示effective_rate_default过程。 当然,仅对于Cust1,此同义词必须不引用默认过程,而是引用Cust1变体。 但是,正如我已经提到的,我们在源代码管理中仅维护一个数据库,而在Trunk(以及任何发行分支)中,每个同义词始终仅引用相关操作的默认实现。 那么我们如何实现这一目标呢?

答案是一个两阶段的部署过程。第一阶段向每个客户部署effective_rate_default过程以及引用该过程的effective_rate同义词。第二阶段仅将effective_rate_cust1过程部署到Cust1,然后删除Cust1数据库中的effective_rate同义词,并创建一个引用effective_rate_cust1的新同义词。

通过遵循这种方法,基于对每个客户的SQL同义词和两阶段部署过程,我们可以在一个开发数据库中包含所需的专用例程,因此仍然可以为我们的客户提供代码,考虑到不同的业务和合规性要求。

让我们看看如何使用SQL Compare命令行实现此两阶段部署过程。

本教程内容较多,分为上下两篇文章,想要查看教程后续内容,请继续关注我们网站!或者下载SQL Compare试用版尝试一下~

相关内容推荐:

SQL Compare教程:使用SQL Compare命令行从源代码管理到数据库

SQL Compare使用教程:如何在SQL Compare中使用自定义过滤器


想要购买SQL Compare正版授权,或了解更多产品信息请点击


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP