我有一个表名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
表中的外键。假设本地映射透明。
答案 0 :(得分:0)
解决此类需求的公认惯例是不来编写存储过程代码以强制引用完整性。无论写得多好,如果你继续这样的解决方案,你已经失败了。
你已经失败了,因为这样的解决方案要么总是最终失败并导致数据完整性问题,要么它写得如此有效以至于总是成功但是它需要一个分布式事务来锁定所涉及的表如此强大而低效会有并发会话性能的噩梦。
公认的做法是使用数据库平台的强大,经过良好测试,高性能的复制功能,然后通过唯一键和外键按常规方式建立引用完整性,让数据库执行许多功能比编写存储过程代码以强制引用完整性好几千倍。
每个严肃的数据库开发人员在某个时间点都涉及自己的复制,除非在最简单的情况下,他们总是悲惨地失败。