0

我有一个表名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在进行任何更改之前检查表中的外键。假设局部映射透明。

4

1 回答 1

0

解决这种需求的公认做法是编写存储过程代码来强制引用完整性。不管它写得多么好,如果你继续这样的解决方案,你已经失败了。

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

公认的做法是使用数据库平台的健壮、经过良好测试、高性能的复制功能,然后通过唯一键和外键以常规方式建立参照完整性,让数据库执行其数千次执行的操作比编写存储过程代码来强制引用完整性更好。

每个认真的数据库开发人员在某个时间点都涉足滚动复制,除了在最简单的情况下,他们总是失败得很惨。

于 2013-11-27T18:19:18.837 回答