【问题标题】:Do having multiple labels for a node in Neo4j make any sense?在 Neo4j 中为一个节点设置多个标签有意义吗?
【发布时间】:2014-01-28 09:57:13
【问题描述】:
继 Neo4j 的谷歌小组的this post 之后,我不得不说我在使用这种多标签事物时没有看到任何好处,相反,恕我直言,它只是增加了唯一性约束的复杂性。它还可能诱使用户将继承引入数据模型,这会导致沮丧,因为这根本不可能......
【问题讨论】:
标签:
nosql
neo4j
graph-databases
【解决方案1】:
标签不仅仅是代表一种类型的概念,它们是在不同上下文中可行的角色。
因此,在一个角色中,一个节点的某些属性和关系可能很重要,而在另一个角色(标签)中,一个不同的集合(可能与第一个相交)。
我们远离继承,因为它打开了一个新的蠕虫罐头,我们更喜欢组合。因此,您宁愿将节点整体组合为其部分的总和。您还可以通过将“超级”类型作为标签附加到层次结构中的子元素来模拟继承。
节点标签也可用于分隔较大图中的子图,例如用这些标签标记在human 通路和phylo 通路中活跃的蛋白质。因此,您可以快速选择您感兴趣的图表部分。
这些单独的子图也可以来自不同的域,例如geo、social、catalogue、supplier,它们组合在一个图中。
而且,多个标签也很有意义,可以将用于表示“in-graph-indexes”与“domain”-labels 的图形的“技术”命名空间分开。
关于唯一性 - 节点上现有标签和属性的所有唯一性约束同时实施。如果在插入或更新时无法解决它们,则操作将失败。