2015-03-31 101 views
4

如何將一個圖形模型處理這樣一個條件關係:條件關係數據庫

(Alice -[Dates]-> Bob) 
Where [Dates] exists IF and ONLY IF 
(Bob -[Owns]-> Ferrari) is true 

而且只是查詢,我想知道是否有關係數據庫引擎基礎上的條件,或者是否該被應用需要在應用程序中進行管理。

回答

4

我不能說爲arangodb,但對於neo4j這一點必須由應用程序解決。您可以斷言有關圖的模式位不能解決哪種類型的關係可以從節點類型中存在。像你所說的那樣的偶然關係比這甚至更進一步。

這樣做的驗證可能比首次出現時更復雜。假設鮑勃擁有法拉利。所以愛麗絲約會鮑勃(這麼淺!)。一切正常 - 無論是由應用程序還是數據庫強制執行。好吧,鮑勃賣掉他的法拉利。數據庫應該做什麼?

  1. 鮑勃應該禁止出售他的法拉利? (即刪除該關係失敗)
  2. Alice應該被迫與Bob分手嗎? (即刪除那段日期的關係......殘酷!)
  3. 應該拋出一些令人討厭的錯誤嗎?

這些是特定於域的注意事項。你希望在你的應用程序層做到這一點,以便你可以考慮這些驗證條件,並做正確的事情。即使圖形數據庫確實支持它,也不清楚你是否想要使用圖形數據庫的默認執行策略(不管那是什麼)。

+0

很好的答案。這是一個「業務規則」引擎是否有用,或者作爲數據庫和應用程序之間的一個層,或者運行期關係有效性檢查? – NonSecwitter 2015-03-31 18:45:18

+1

也許是一個業務規則引擎,或者可能掛鉤到事務中。即當一個事務提交時,如果結果是一個處於錯誤狀態的數據庫,那麼事務處理器將根據這些規則進行後續清理。 – FrobberOfBits 2015-03-31 19:03:52

5

FrobberOfBits的答案非常好,也適用於ArangoDB數據庫。 然而,ArangoDB提供了一個名爲「Foxx」的微服務框架,允許您爲可以執行自定義代碼的數據庫定義其他API端點。

對福克斯的一個應用就確實是你的問題: *定義端點除去做兩件事情的關係: 1)刪除關係 2)檢查所有的邏輯約束或副作用並應用它們

這給你在數據庫中直接執行的優點(只有一個查詢觸發器),並且你的應用程序代碼沒有這些約束。

+0

如果我可以選擇兩個答案,我會:) – NonSecwitter 2015-04-01 11:28:05