簡體   English   中英

使用 arangodb 中的 1:n 連接確保數據完整性(自動刪除孤立頂點)

[英]Ensuring data integrity with 1:n connections in arangodb (delete orphan vertex automatically)

假設我有一個users文檔組和另一個存儲用戶會話的文檔組sessionTokens 每個用戶可以擁有多個令牌,但一個令牌只能屬於一個用戶。 關聯是通過邊完成的。

現在,如果我使用圖形函數,我可以刪除一個標記,並且用戶和標記之間的邊會自動刪除,這很棒。 但是,如果我想確保如果用戶被刪除,我希望他們的所有會話令牌(頂點)也被自動刪除(否則它們將成為孤兒令牌)怎么辦? 我必須在應用程序代碼中處理這個嗎? 或者是否有一種聲明方式來確保這種完整性?

根據文檔

刪除具有關聯邊的頂點當前不通過 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
        )

它不一定是最好的實現,但可以很好地封裝在事務中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM