【问题标题】:trigger to force foreign key触发强制外键
【发布时间】:2013-10-24 07:20:40
【问题描述】:

我有一个表名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 表中的外键。假设局部映射透明。

【问题讨论】:

  • 你为什么不想要一个真正的外键约束。
  • 因为我希望用户都提及存储在远程位置的数据片段的名称和位置。我正在做分发数据库,​​并且有数据片段并存储在不同的位置

标签: sql database plsql plsqldeveloper


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    • 2013-11-22
    相关资源
    最近更新 更多