Neo4J节点与关系实体

时间:2014-02-11 05:52:25

标签: graph neo4j spring-data

我正在研究Spring Data的书中发现的NEO4J的例子。

 Nodes         - Product, Person, Order

 Relationships - (Order) Items (Product), (person) Reviewed (product)

我正在设计我的第一个Neo4J数据库,并且可能会将Review 更好地用作节点而不是关系。

这样评论现在可以有COVERS关系

 Review COVERED Order , Review COVERED Product 

从某种意义上说,这篇评论将跨越多个覆盖关系。

是否有关于创建节点实体与节点关系的想法? Neo4J似乎非常灵活......如果我改变主意,似乎我可以稍后修改它,是吗?

在一个关系中,跨多个节点重复基本相同的评论文本似乎很奇怪......而是节省计算空间并创建一个评论节点

 Review Node Entity
   - String comments
   - int stars

1 个答案:

答案 0 :(得分:1)

设计时最重要的是在白板上记下一个粗略的模型,这将模拟人们想要达到的目标。

在这种情况下,如果将REVIEW节点分开,实际上会创建额外的节点和关系,而不是减少计算空间。

(PERSON)-[:GIVEN]->(REVIEW)-[:COVERED]->(PRODUCT)

所以考虑问一个问题(用例)让我对产品A进行评论?

图表首先需要检查通过relationshiptype REVIEW连接到PRODUCT A的所有COVERED个节点,然后再次追溯到PERSON节点以获取谁给了评论。

但是如果你做(PERSON)-[:REVIEWED]->(PRODUCT)

您只需要查询从REVIEWED节点PRODUCT A传入的所有关系类型PERSON。您可以将commentsstars存储为关系属性。

所以我认为通过REVIEWED直接与REVIEWED上的attribs保持联系将是更整洁的设计而且不那么复杂