跨数据库的SQL Server外键——强制执行技巧

13

我有两个独立的 SQL Server 2005 数据库(在同一服务器上):

  • 安全数据库
  • 主应用程序数据库

  • 安全数据库有一个包含所有身份验证所需信息的用户表

  • 应用程序数据库有一个包含扩展用户详细信息的人员表。安全数据库用户表与应用程序数据库人员表之间存在1对1的映射关系。

我想要强制执行用户和人员表之间的映射关系。我认为外键不能跨数据库进行映射,因此我想知道该怎么做才能保证关系的完整性。


1
问题在于,SQL Server 的恢复单位是数据库 - 那么如果两个数据库被还原为不一致的数据(例如来自不同时间点),或者其中一个数据库处于离线状态,该怎么办? - Damien_The_Unbeliever
可能是重复的问题:在两个数据库之间添加外键关系 - Andriy K
2个回答

22

跨数据库外键确实不受支持。

    Msg 1763, Level 16, State 0, Line 2
    Cross-database foreign key references are not supported.

如果您真的想在数据库端强制执行引用完整性,您将不得不依赖于触发器。(我不建议这样做)

为了使您的代码更易于维护,您可以为要检查引用完整性的表创建同义词。

      CREATE SYNONYM myTable FOR otherdatabase.dbo.myTable;

这样做是为了使“手动”检查更容易,因为你无法在同义词上创建外键。


你是否暗示说,一个外键约束可以通过使用同义词作为中介来引用另一个数据库中的表? - Kenny Evitt

5

这是一项繁重的工作,但您可以考虑将这两个数据库合并为一个。如果您想在数据库中的对象之间进行逻辑区分,可以使用模式


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接