2013-12-14 86 views
0

在我的應用程序中,我需要將用戶分配到組中,並且每個用戶都有一個經理(經理也是一位用戶,也可以有一個經理)。用戶圖形數據庫

該應用程序將需要查詢以瞭解某個管理員的最大深度(換句話說,從管理員開始到所有人管理的最長路徑的長度)。另外,它需要能夠找到處於同一組中的用戶(一個組也可以是另一個組的成員)。

到目前爲止,整個應用程序已經用MySQL數據庫中的JPA建模。但是,它被設計成SOA,所以更改處理用戶的服務(用戶服務)的底層數據存儲並不是那麼昂貴。

有沒有辦法做到這一點,不需要圖形數據庫?如果圖形數據庫是必要的,我應該在圖中存儲所有用戶信息,還是僅僅存儲適當的關係?

+0

你是什麼意思的「圖形數據庫」?您當然可以將組映射爲類別表,並將關係映射爲多對多表。我沒有看到需要一個單獨的數據庫。 –

回答

2

如果你的基本模式是

(group:Group)<-[:IN_GROUP]-(user:User) 
(man:User)-[:MANAGES]->(sub:User) 

,你可以這樣做:

MATCH (manager:User {name:"Colin"})-[:MANAGES*]->(u:User) 
RETURN u 

你的第二個查詢

MATCH (manager:User {name:"Colin"})-[:MANAGES*]->(u:User) 
     (u)-[:IN_GROUP]->(g)<-[:IN_GROUP]-(u2) 
RETURN u.name as user, g.name as group, collect(u2.name) as colleagues 

您可以將所有的用戶信息在圖形,但你不不必。做你的最簡單的,最適合你的使用案例。

沒有圖形數據庫,你需要編寫痛苦的重連接SQL查詢,爲可變長度關係。

+0

感謝您的迴應 - 您認爲從基本用戶中找到所有邊緣節點(具有可變長度定向路徑)的性能如何?還用於計算最長路徑的長度? –