触发强制外键

时间:2013-10-24 07:20:41

标签: sql database plsql plsqldeveloper

我有一个表名Service(product, loca, from_agent, to_agent)

product参考Product(pno)

from_agent引用Customer(cno) U Driver(drno) U Airline(Ano)

to_agent引用Customer(cno) U Driver(drno) U Airline(ano)

cno = Customer Number这是另一个表名“Customer”,其中包含as name, address等其他详细信息

drno = Driver Number这是另一个表名“Driver”,其中包含其他详细信息,例如name, address

ano = Airline Number这是另一个表名“Airline”,其中包含其他详细信息,例如depport, depttime,arrtime等。

希望编写一个强制触发器,在进行任何更改之前检查product表中的外键。假设本地映射透明。

1 个答案:

答案 0 :(得分:0)

解决此类需求的公认惯例是来编写存储过程代码以强制引用完整性。无论写得多好,如果你继续这样的解决方案,你已经失败了。

你已经失败了,因为这样的解决方案要么总是最终失败并导致数据完整性问题,要么它写得如此有效以至于总是成功但是它需要一个分布式事务来锁定所涉及的表如此强大而低效会有并发会话性能的噩梦。

公认的做法是使用数据库平台的强大,经过良好测试,高性能的复制功能,然后通过唯一键和外键按常规方式建立引用完整性,让数据库执行许多功能比编写存储过程代码以强制引用完整性好几千倍。

每个严肃的数据库开发人员在某个时间点都涉及自己的复制,除非在最简单的情况下,他们总是悲惨地失败。