[英]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.