asp.net - 如何实现跨数据库外键约束?

标签 asp.net sql oracle nhibernate

假设我有两个模式:人力资源 订单 .

[HR].Employees         [Orders].Entries
--------------         ----------------
Id_Employee    ---->   Employee
Fullname               Id_Entry
Birthday               Description
                       Amount

如您所见,我想要的是能够建立跨数据库外键,但是当我使用数据库链接尝试此操作时,我得到:
-- From [Orders]
ALTER TABLE Entries
    ADD CONSTRAINT FK_Entries_Employees FOREIGN KEY (Employee)
    REFERENCES Employees@HR;
COMMIT;

ORA-02021: DDL operations are not allowed on a remote database

有没有解决的办法?这是一个遗留数据库,因此我无法更改现有架构。

对于 NHibernate 人群:然后我会使用这个关系来映射 NHibernate 的域对象。

最佳答案

一种选择是在 [Orders] 上创建员工的物化 View ,然后将其用作外键的父级。

当然,这有一些缺点。特别是,

-- 如果不禁用外键,您将无法完全刷新物化 View ,因此必须快速刷新。

-- 在实体化 View 刷新之前,输入到 EMPLOYEES 的 key 对 ENTRIES 不可用。如果这很重要,您可能希望将其设置为在提交时刷新。

其他替代方法是通过触发器或通过后期清理过程自己处理关键实现。或者让 DBA 相信这些模式可以驻留在同一个数据库实例上。

关于asp.net - 如何实现跨数据库外键约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3658759/

相关文章:

asp.net - 在 IIS/ASP.Net 的 .NET 1.1 应用程序中创建 .NET 3.0 子应用程序

asp.net - VS2010 和 CSS : What is the best strategy to individually position form controls

php - 显示我关注的主题的帖子

sql - 为什么从表中有一个SELECT 1?

sql - 计算 SQL 或 Pandas 中 GROUP BY 后的类别数

c# - .net 4.0 中的 System.Web.UI.DataVisualization.Charting 丢失错误?

mysql - 在存储过程中拆分字符串

sql - Sybase DB SQL Anywhere - 推送数据库更改通知

c++ - sqlite 中一次来自两个查询的结果?

java - 如何在oracle java中获取驱动器容量