在arangodb中使用1:n连接确保数据完整性(自动删除孤立顶点)

x8diyxa7  于 2022-12-09  发布在  Go
关注(0)|答案(1)|浏览(144)

假设我有一个users文档组和另一个存储用户会话的sessionTokens文档组。每个用户可以有多个令牌,但一个令牌只能属于一个用户。通过边进行关联。
现在,如果我使用图形函数,我可以删除令牌,用户和令牌之间的边会自动删除,这很好。但如果我想确保如果删除了用户,我要他们所有的会话令牌(顶点)也将自动删除(否则它们将成为孤立的令牌)?我必须在应用程序代码中处理这个问题吗?或者有没有一种声明性的方法来确保这种类型的完整性?

j5fpnvbx

j5fpnvbx1#

根据docs

删除具有关联边的顶点目前不通过AQL处理,而图形管理接口和图形模块的REST API提供了顶点删除功能。

也就是说,有一些方法可以欺骗系统,比如,你可以一次修改多个集合,因此,你可以收集与你要删除的顶点相关的所有节点和边的_key值,然后依次删除它们。

FOR u IN users
    FOR v,e IN 1 INBOUND u users_sessionTokens
        COLLECT del_users = u._key, del_edges = e._key, del_sessionTokens = v._key
        LET vx = (
            FOR d IN del_sessionTokens
                REMOVE d IN sessionTokens
        )
        LET ex = (
            FOR d IN del_edges
                REMOVE d IN users_sessionTokens
        )
        LET ux = (
            FOR d IN del_users
                REMOVE d IN users
        )

它不一定是最好的实现,但在事务中可能会很好地工作。

相关问题