SQL foreign key between projects in different VS solutions

时间:2016-12-09 12:57:33

标签: sql visual-studio-2015 sql-server-data-tools

I want to split the development of our data warehouse solution in to manageable Visual Studio projects that can be edited independently and grow organically. I have developed a project that contains all the conformed dimensions like Date in one solution. Can I reference my Date dimension from a different solution where I need to include a foreign key? I have tried to reference the dacpac containing the conformed dimension but this does not work as expected.

2 个答案:

答案 0 :(得分:0)

过去,我在单个解决方案中使用单独的项目来管理这些情况。显然,主要目标是避免开发人员之间的合并冲突,这种安排唯一应该发生的地方是解决方案文件,这应该是非常罕见的。

这里有几件事需要注意:

  • 引用必须是“Same database”类型
  • 参考需要指向事实 - >尺寸
  • 部署“事实”项目时,需要确保指定“包含复合对象”选项。这是Visual Studio中的默认设置。
  • 不允许循环引用。如果你有这些解决方法(非常简短,谷歌更多)是创建一个“父”项目,引用“圆圈”的两个“边”。

也就是说,也可以为引用的dacpac而不是数据库项目创建外键。再次参考需要在事实方向 - >尺寸。您还需要考虑一下构建过程,因为实际上您正在对“Dimensions”dacpac采用二进制依赖关系。您还可以将dacpac添加到引用项目(我倾向于为这些项目创建一个文件夹),因此它最终会在源代码管理中的相同位置。)

如果它有帮助,我创建了一个解决方案,演示了这两种技术并在此处共享:https://github.com/arapaima-uk/FKsToReferencedDacpacs

答案 1 :(得分:-1)

简而言之,您无法创建引用另一个数据库中的表的FK,这两个表应位于同一个数据库中。 FK是一个数据库对象,而不是服务器对象。

但是,您可以使用触发器来管理FK,这当然不是最佳解决方案。

  

FOREIGN KEY约束只能引用同一服务器上同一数据库中的表。必须通过触发器实现跨数据库引用完整性。有关更多信息,请参阅CREATE TRIGGER(Transact-SQL)。

https://msdn.microsoft.com/en-us/library/ms189049.aspx

根据您的评论(见下文),以下是一些想法:

  

你有几个好的论点。虽然我正在寻找一种可以并行建模多个业务流程的方法,但这可能不是一种选择。似乎唯一的选择可能是拥有一个大项目,然后处理如何管理同时在解决方案中工作的多个开发人员 - 谢谢

  • 一个数据库=一个项目
  • 加强团队成员之间的沟通
  • 更新您的VCS策略以最大限度地减少问题
  • 向团队成员介绍可能存在的问题及其解决方法
    • 包含部署选项
  • 提供足够的资源(包括开发工作站)并使用本地实例进行开发
  • 构建一个SIT(集成)环境,您可以在其中测试更改以及它们在部署期间的行为方式。
  • 构建共享DEV环境,用于合并团队成员的工作
  • 将文件提交/推送到CVS中,这些文件被视为已完成。定期提交/推送
  • 路由任务以最小化冲突(如果团队成员与对象A有关,尝试将与对象A相关的所有任务路由到该开发人员或推迟第二次更改,直到完成第一次更改)
  • 如果使用dacpac进行部署,请在dacpac文件旁边包含配置文件(在SIT环境中测试)。 (SIT应该在您测试部署时反映生产环境)

再次:加强团队内外的沟通。这是关键。