【问题标题】:Sqlite circular dependency triggerSqlite 循环依赖触发器
【发布时间】:2013-05-26 08:47:07
【问题描述】:

问题是关于 Sqlite DBMS。

我有两张桌子:

  1. 描述对象
  2. 描述表 1 { id, id_parent } 中对象的依赖关系

如何为表 2 编写 INSERT 和 UPDATE 触发器来检查循环依赖关系?

对象依赖示例:

A -> B -> C --- 好的

A -> B -> C -> A --- 引发条件

我了解如何检查直接依赖关系 A -> B,但不知道如何检查任何级别。

【问题讨论】:

    标签: sql sqlite triggers


    【解决方案1】:

    众所周知,你正在上坡。

    一个相当简单的解决方案(在您的情况下可能可行也可能不可行)是对第二个表进行约束:id > id_parent。这将导致无法创建循环图:

    CREATE TABLE deps ( id NOT NULL, id_parent NOT NULL, CHECK ( id > id_parent ) )
    

    【讨论】:

    • 非常好的主意,它在没有大量计算的情况下强制约束,但在我的情况下它有一个副作用。最初填充表格后,任何对象都可以设置为另一个对象的父对象。 id 是 PK,所以没有一个孩子可以有多个父母。如果我创建一个 BEFORE 触发器,如果​​id < id_parent 交换受 INSERT / UPDATE 语句影响的那些对象的 id,您的解决方案可能会起作用。仅当所有事务都是独占的时,交换 PK 才能正常工作,否则数据可能在写入时不一致或在读取时变脏。我真的不想交换 PK :(
    猜你喜欢
    • 2012-03-23
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    • 1970-01-01
    • 2021-03-08
    • 2016-06-09
    • 2010-09-12
    相关资源
    最近更新 更多