【问题标题】:SQL Server Foreign Keys across database boundaries - techniques for enforcement跨数据库边界的 SQL Server 外键 - 实施技术
【发布时间】:2011-03-02 11:10:37
【问题描述】:

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

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

  • 安全数据库有一个用户表,其中包含验证所需的所有内容。 -

  • 应用程序数据库有一个person 表,其中包含扩展的用户详细信息。安全数据库用户表和应用程序数据库人员表之间存在 1-1 映射。

我想强制在用户和人员表之间建立映射。我假设外键无法跨数据库映射,因此我想知道如何执行关系的完整性。

【问题讨论】:

  • 问题是,使用 SQL Server 恢复的单位是数据库——那么如果两个数据库的数据不一致(例如从不同的时间点)恢复,或者如果一个数据库恢复,你该怎么办?离线了吗?

标签: sql-server sql-server-2005 security


【解决方案1】:

确实不支持跨库外键

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

如果您真的想在数据库端强制执行参照完整性,您将不得不依赖触发器。 (我不推荐)

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

      CREATE SYNONYM myTable FOR otherdatabase.dbo.myTable;

这将使“手动”检查更容易,因为您不能在同义词上创建外键。

【讨论】:

  • 你是否暗示外键约束可以通过使用同义词作为中介来引用另一个数据库中的表?
【解决方案2】:

工作量很大,但您可能会考虑将这两个数据库合并到一个数据库中。如果您想要数据库内对象之间的逻辑差异,您可以使用schema

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 2018-11-08
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多