图形数据库模式设计 - 这适用于neo4j吗?

时间:2015-04-01 07:50:08

标签: database neo4j database-schema graph-databases schema-design

场景:一个简单的地址簿,用户可以在其中创建自己的联系人,并通过将它们分组添加来组织它们。联系人可能有多个地址。

我创建了以下图表: ![架构设计] [1]

我想查询放在x组中并居住在y国的所有联系人。

这种架构设计是否足以满足这些目的(我想使用neo4j数据库)?

2 个答案:

答案 0 :(得分:3)

看起来country的概念应该是图表中的头等公民,因为您的查询取决于它。图模型设计通常会受到查询模式的影响。

因此,我建议为每个国家/地区标记Country节点,并将Address节点与:LOCATED_IN关系连接到该国家/地区。 (从而从国家/地区节点中删除国家/地区属性)。

通过该更改,您的查询就像以下一样简单:

MATCH (:Group{name:'family'})<-[:placed_in_group]-(contact)-[:lives-at]->()-[:LOCATED_IN]->(:Country{name:'US'})
RETURN contact

答案 1 :(得分:2)

正如stefan Armbruster所指出的,一种选择是从国家地址获得另一个节点。如果您不想更改数据结构,只需在字段中添加一个索引&#34; country&#34;地址然后你可以有一个查询

MATCH (:Group{name:'family'})<-[:placed_in_group]-(contact)-[:lives-at]->(:Address{country:'US'})