【发布时间】:2013-05-26 08:47:07
【问题描述】:
问题是关于 Sqlite DBMS。
我有两张桌子:
- 描述对象
- 描述表 1 { id, id_parent } 中对象的依赖关系
如何为表 2 编写 INSERT 和 UPDATE 触发器来检查循环依赖关系?
对象依赖示例:
A -> B -> C --- 好的
A -> B -> C -> A --- 引发条件
我了解如何检查直接依赖关系 A -> B,但不知道如何检查任何级别。
【问题讨论】:
问题是关于 Sqlite DBMS。
我有两张桌子:
如何为表 2 编写 INSERT 和 UPDATE 触发器来检查循环依赖关系?
对象依赖示例:
A -> B -> C --- 好的
A -> B -> C -> A --- 引发条件
我了解如何检查直接依赖关系 A -> B,但不知道如何检查任何级别。
【问题讨论】:
众所周知,你正在上坡。
一个相当简单的解决方案(在您的情况下可能可行也可能不可行)是对第二个表进行约束:id > id_parent。这将导致无法创建循环图:
CREATE TABLE deps ( id NOT NULL, id_parent NOT NULL, CHECK ( id > id_parent ) )
【讨论】:
id < id_parent 交换受 INSERT / UPDATE 语句影响的那些对象的 id,您的解决方案可能会起作用。仅当所有事务都是独占的时,交换 PK 才能正常工作,否则数据可能在写入时不一致或在读取时变脏。我真的不想交换 PK :(