代表库存中的项目

时间:2014-01-02 23:24:19

标签: neo4j

我是Neo4j的新手,我需要更有经验的Neo4j开发人员提供一些建议。

在哪种情况下,库存系统将单个项目表示为通过其属性的路径而不是具有相同属性的节点是否有意义?

为了让自己清楚: 假设我们有一个眼镜镜片。此项目具有类似SPHERE power it的CYLINDER power和AXIS等属性。 有一组有限的SPHERE功率,但也有CYLINDER功率和AXIS。这些组合成为一个项目(镜头)。 代表这样的镜头是否有意义:

MATCH (lens:Lens)-[:-2.00]-(sph:Sphere:{power:'-2.00'})-[:-0.50]-(cyl:Cylinder{power:'-0.50'})-[:90]-(ax:Axis{degree:'90'})
RETURN lens.brand_name, lens.price

请注意,以上项目(镜头)可以从不同的制造商处获得,并且具有不同的品牌名称和清单价格,因此“镜头”将代表可以与上述查询匹配的所有个别品牌,并且具有品牌名称作为属性和价格,至少。

2 个答案:

答案 0 :(得分:1)

在您的特殊领域中,每个参数的有限范围和离散值,将镜头的属性建模为值节点绝对有意义。结果索引图似乎不会太大,而且非常平衡(没有超节点)。

答案 1 :(得分:1)

假设您有一段数据(“SPHERE”)。它何时应该是镜头节点的属性,何时应该是它自己的节点,通过关系?

  • 您需要将多个镜头关联到同一个球体吗?这说明它应该是它自己的节点,因此多个镜头可以链接到同一个球体。
  • 您是否需要声明有关球体值的额外属性? (就像是谁测量它,或者什么时候测量?)这说明你应该把它作为一个单独的节点。
  • 您是否需要存储关系的属性?如果关系比简单的“HAS A”更复杂,您可能需要两个节点之间的关系,因此您可以在关系上存储属性。

任何一种情况都会说你应该将这段数据存储为一个单独的节点,然后通过关系将它关联起来。

另一方面,如果它是一个简单的原始数据类型(浮点数),与父级的简单“HAS-A”关系(即镜头HAS-A球体测量)并且您不需要额外的元数据,那么它应该是一个节点属性。

我不是验光师,但我认为后一种情况就是你的情况,我只是想给你一个更一般的答案。 “Sphere”应该是一个节点属性,但上面的例子是如何更普遍地考虑未来数据项的问题。