我正在研究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
答案 0 :(得分:1)
设计时最重要的是在白板上记下一个粗略的模型,这将模拟人们想要达到的目标。
在这种情况下,如果将REVIEW
节点分开,实际上会创建额外的节点和关系,而不是减少计算空间。
(PERSON)-[:GIVEN]->(REVIEW)-[:COVERED]->(PRODUCT)
所以考虑问一个问题(用例)让我对产品A进行评论?
图表首先需要检查通过relationshiptype REVIEW
连接到PRODUCT A
的所有COVERED
个节点,然后再次追溯到PERSON
节点以获取谁给了评论。
但是如果你做(PERSON)-[:REVIEWED]->(PRODUCT)
您只需要查询从REVIEWED
节点PRODUCT A
传入的所有关系类型PERSON
。您可以将comments
和stars
存储为关系属性。
所以我认为通过REVIEWED
直接与REVIEWED
上的attribs保持联系将是更整洁的设计而且不那么复杂