在我的应用程序中,我需要将用户分配到组,并且每个用户都有一个经理(经理,也是用户,也可能有经理)。
应用程序将需要查询才能知道某个管理员的最大深度(换句话说,从管理员开始到该人管理的所有人的最长路径的长度)。此外,它需要能够找到属于同一组的用户(一个组也可以是另一个组的成员)。
到目前为止,整个应用程序已在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查询,尤其是对于可变长度关系。