我在SQL Server中有两个数据库,两个数据库都有一个公用表,一个重要的大表保存着其他表的外键。问题是该表位于DatabaseA中,我需要从DatabaseB引用该表的外键。
我知道SQL不支持跨数据库引用完整性,那么实现此目的的最佳方法是什么?我正在考虑将两个数据库合并成一个数据库-除了复杂性增加外,这无关紧要。
有什么建议?
最佳答案
如果可以的话,我会避免这样做-您可以将两个表都保存在一个数据库中并使用FK吗?
父表和子表位于不同的数据库中。
尽管在这种情况下不能使用外键,但是有一些解决方法–您可以使用检查约束中包装的触发器或UDF。无论哪种方式,您的数据完整性都不是完全防水的:如果带有父表的数据库崩溃了,并且您从备份中还原了它,则很容易导致孤立。
触发器会强制执行父子关系。
有很多情况下触发器不触发,例如:
·删除表。
·表被截断。
·嵌套和/或递归触发器的设置可防止触发触发器。
同样,触发器可能只是不正确的。无论哪种方式,您最终都可能在数据库中出现孤儿。