在我的ArangoDB中,我正在尝试实现某种继承。 我有一个父文档,它定义了所有子文档。因此,除了继承ID之外,其他所有值都是相同的。
因此,在这种情况下,父文档的值如下:
ID: 1
InhID: 0
Name: Doc_1
其子级如下:
ID: 1
InhID: 1
Name: Doc_1
ID: 1
InhID: 2
Name: Doc_1
当我将名称从Doc_1
更改为父项中的任何其他项时,其所有子项也将被更改,新添加的属性也是如此。
当前方法是为每个属性手动编写一个AQL-Update查询,将所有值一一更新,将其设置为ID相同且InhID大于零的parent值。
但是,有一种方法可以更有效地做到这一点吗?在传统数据库中是否有类似触发功能的东西?
答案 0 :(得分:0)
假设我们将数据存储在test1集合中,其中包含以下字段:ParentID,InhID,Name,Potatoe
假设我了解您要执行的操作,则可以:
一次更新父母和孩子,例如:
for t in test1
Filter t.ParentID == 1
update t WITH { Potatoe: "baked" , Name: "Doc_2"} IN test1
首先更新父项,然后更新子项(在我假设的其他时候):
Step1
for t in test1
Filter t.ParentID == 1 AND t.InhID == 0
update t WITH { Potatoe: "baked" , Name: "Doc_2"} IN test1
第2步
let Parent = (for p in test1
Filter p.ParentID == 1 AND p.InhID == 0
return p)
for p1 in Parent
for Children in test1
Filter Children.ParentID == p1.ParentID AND Children.InhID > p1.InhID
update Children WITH {Potatoe: p1.Potatoe, Name: p1.Name} IN test1
就触发器而言,Arango中没有这样的东西。我个人认为这是很好的,因为触发器往往会引起更多的麻烦,而不是值得的。相反,我将使用所需的逻辑来构建中间层,并使所有外部程序都通过中间层,而不是直接访问集合。您可以在数据库本身的Arango Foxx层中构建它。 Here是Foxx的文档
最后,您是否考虑过将db的结构从包含数据和隐式继承关系(基于InhID)的单个表更改为使用边关系的集合和显式继承关系?根据您正在执行的操作,它可能(也可能没有)有用。