[英]Ensuring data integrity with 1:n connections in arangodb (delete orphan vertex automatically)
假设我有一个users
文档组和另一个存储用户会话的文档组sessionTokens
。 每个用户可以拥有多个令牌,但一个令牌只能属于一个用户。 关联是通过边完成的。
现在,如果我使用图形函数,我可以删除一个标记,并且用户和标记之间的边会自动删除,这很棒。 但是,如果我想确保如果用户被删除,我希望他们的所有会话令牌(顶点)也被自动删除(否则它们将成为孤儿令牌)怎么办? 我必须在应用程序代码中处理这个吗? 或者是否有一种声明方式来确保这种完整性?
根据文档,
也就是说,有些方法可以欺骗系统。 例如,您可以一次修改多个集合。 因此,您可以收集与要删除的顶点相关的所有节点和边的_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
)
它不一定是最好的实现,但可以很好地封装在事务中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.