使用核心/模型数据库,在不同的安装上进行微小的更改,无需重复代码即可进行定制
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 的列 State
到 Address
和客户的 BirthDate
到 Person
是的。
现在,我不想将这些列添加到核心数据库,因为 State
列仅供我们的美国客户使用,BirthDate
仅供我们的欧洲客户使用,BirthDate
是强制性的( NOT NULL
),因此需要为所有其他客户提供一个虚拟值。
我在 GitHub 上查看是否有多个分支 - Core
和 US-Customer
- 但这意味着整个 Core
解决方案将被复制到 US-Customer
分支但是当 Core
分支是更改它不会更新US-Customer
分支,即必须基本上维护两个存储库。
是否有可能在SQL Data Tools
或GitHub
中进行这种定制?定制的解决方案(例如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
。
ProjectUS
和 ProjectEU
都有自己的发布配置文件。您将在那里放置不同对象的完整定义,而不仅仅是 ALTER 语句。
【讨论】:
然后我将在ProjectUS
和ProjectEU
中获得来自ProjectCore
的共享代码,这似乎没有带来任何好处和额外性添加另一个存储库来维护。对吗?
只有在发布时才会包含所有代码,实际上不会有任何文件。 ProjectCore
不会用于在任何地方发布。如果您正在谈论源代码控制存储库,则不需要额外的存储库以上是关于使用核心/模型数据库,在不同的安装上进行微小的更改,无需重复代码即可进行定制的主要内容,如果未能解决你的问题,请参考以下文章
核心数据与 Ensembles 同步:在本地模型更改之前,不会拉下远程更改
R语言使用survival包的coxph函数在竞争风险分析的加权数据集上进行回归模型构建使用coxph函数对加权数据集进行竞争风险模型拟合