SQL 不同VS解决方案中项目之间的外键

SQL foreign key between projects in different VS solutions

我想将我们的数据仓库解决方案的开发拆分为可管理的 Visual Studio 项目,这些项目可以独立编辑并有机地发展。我开发了一个项目,在一个解决方案中包含所有一致的维度,如日期。我可以从需要包含外键的不同解决方案中引用我的日期维度吗?我已尝试引用包含一致尺寸的 dacpac,但这并不像预期的那样工作。

简而言之,您不能在另一个数据库中创建引用 table 的外键,两个 table 应该位于同一个数据库中。 FK 是数据库对象,不是服务器对象。

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

FOREIGN KEY constraints can reference only tables within the same database on the same server. Cross-database referential integrity must be implemented through triggers. For more information, see CREATE TRIGGER (Transact-SQL).

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


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

You have several good arguments. Though I was looking for a way where we could model several business processes in parallel this might not be an option. It seems that the only option might be to have one big project and then handle how to manage more than one developer working in the solution at the same time - thanks

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

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

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

这里有两点需要注意:

  • 引用必须是“同一数据库”类型
  • 引用需要在事实 -> 维度的方向
  • 当您部署“Fact”项目时,您需要确保将选项指定为“Include Composite Objects”。这是 Visual Studio.
  • 中的默认值
  • 不允许循环引用。如果您有这些解决方法(非常简单,google 更多)是创建一个“父”项目,引用“圆圈”的两个“边”。

也就是说,也可以为引用的 dacpac 创建外键,而不是数据库项目。同样,参考需要指向 Fact -> Dimension 的方向。您还需要考虑您的构建过程,因为实际上您正在对“Dimensions”dacpac 进行 binary 依赖。您还可以将 dacpac 添加到引用项目(我倾向于为它们创建一个文件夹),以便它最终位于源代码管理中的同一位置。

如果有帮助,我创建了一个解决方案来演示这两种技术并在此处分享:https://github.com/gavincampbell-dev-example-repos/FKsToReferencedDacpacs