使用核心/模型数据库,在不同的安装上进行微小的更改,无需重复代码即可进行定制

Posted

技术标签:

【中文标题】使用核心/模型数据库,在不同的安装上进行微小的更改,无需重复代码即可进行定制【英文标题】:Using core/model database with small changes on different installations for customization without duplicating code 【发布时间】:2021-07-01 01:41:18 【问题描述】:

作为一个示例,核心数据库如下所示:

Person  - Id, FirstName, LastName
Address - Id, Street, ZipCode

此模型用于大多数安装,但对于几个安装,我想添加自定义列,假设客户 X 的列 StateAddress 和客户的 BirthDatePerson是的。

现在,我不想将这些列添加到核心数据库,因为 State 列仅供我们的美国客户使用,BirthDate 仅供我们的欧洲客户使用,BirthDate 是强制性的( NOT NULL),因此需要为所有其他客户提供一个虚拟值。

我在 GitHub 上查看是否有多个分支 - CoreUS-Customer - 但这意味着整个 Core 解决方案将被复制到 US-Customer 分支但是当 Core 分支是更改它不会更新US-Customer 分支,即必须基本上维护两个存储库。

是否有可能在SQL Data ToolsGitHub 中进行这种定制?定制的解决方案(例如US-Customer)只会进行绝对必要的更改,而SQL Data Tools 不会在Visual Studio 中抛出错误关于缺少表格或任何其他错误?

例子:

Core分支

Person  - Id, FirstName, LastName
Address - Id, Street, ZipCode

US-Customer分支

ALTER TABLE Address ADD State CHAR(2) NOT NULL

EU-Customer分支

ALTER TABLE Person ADD BirthDate DATE NOT NULL

【问题讨论】:

我只是想确认一下,您是否使用sql-server-data-tools - Visual Studio 的 SSDT 扩展,并且您已经在那里创建了 SQL 数据库项目? @DmitrijKultasev 在 Visual Studio 中,我从作为 SSDT 一部分的模板“SQL Server 数据库项目”创建了一个新项目:docs.microsoft.com/en-us/sql/ssdt/… 【参考方案1】:

没有非常简单的方法可以实现。如果您希望完全以 SSDT 方式执行此操作,则需要创建几个项目:

ProjectCore --> 将拥有所有共享对象。它不应该引用以下项目; ProjectUS --> 将拥有美国的所有对象并将ProjectCore 引用为The same database; ProjectEU --> 将拥有 EU 的所有对象,并将 ProjectCore 引用为 The same database

ProjectUSProjectEU 都有自己的发布配置文件。您将在那里放置不同对象的完整定义,而不仅仅是 ALTER 语句。

【讨论】:

然后我将在ProjectUSProjectEU 中获得来自ProjectCore 的共享代码,这似乎没有带来任何好处和额外性添加另一个存储库来维护。对吗? 只有在发布时才会包含所有代码,实际上不会有任何文件。 ProjectCore 不会用于在任何地方发布。如果您正在谈论源代码控制存储库,则不需要额外的存储库

以上是关于使用核心/模型数据库,在不同的安装上进行微小的更改,无需重复代码即可进行定制的主要内容,如果未能解决你的问题,请参考以下文章

核心数据与 Ensembles 同步:在本地模型更改之前,不会拉下远程更改

如何在 DataContext 更改上进行转换?

git合并分支后还能在旧分支推送吗

R语言使用survival包的coxph函数在竞争风险分析的加权数据集上进行回归模型构建使用coxph函数对加权数据集进行竞争风险模型拟合

在多个分类器上进行网格搜索

避免在具有不同关系的 Rails STI 上进行 n+1 查询