【问题标题】:Vertex property (ID) which is a set of unique values顶点属性 (ID),它是一组唯一值
【发布时间】:2015-09-28 15:47:19
【问题描述】:
我需要通过一个属性的一组值中的每个值来唯一标识并快速到达顶点(即,该属性可能对一个顶点有多个值),每个值在所有顶点上都应该是唯一的(即任何 vertex1.id 属性值(即一组顶点 id)与任何其他 vertex2.id 的交集为空,其中 vertex1 != vertex2)?
这是一个非常强大的功能,影响深远,我找不到哪个图形数据库引擎具有提供此功能的内置工具。
如果没有这样的内置功能,那么是否有解决方法来实现这种效果?
【问题讨论】:
标签:
neo4j
graph-databases
【解决方案1】:
neo4j 允许您在满足您想要的大部分内容的节点标签/属性对上定义 Uniqueness Constraint,但它定义了“唯一性”以应用于整个属性值,而不是应用于该值内的单个项目。后一个要求似乎不是一个广泛需要的功能,因为几乎所有模型最多只需要一个唯一标识符。
话虽如此,下面是一个示例,说明您可以使用 neo4j 执行哪些操作,以获得您想要的结果。
-
为特殊节点标签:Uid创建唯一性约束。
CREATE CONSTRAINT ON (uid:Uid)
ASSERT uid.id IS UNIQUE;
-
对于需要标识符的每个节点,创建与其每个唯一 ID 的关系。
CREATE
(n)-[:HAS_ID]->(:Uid {id: 123}),
(n)-[:HAS_ID]->(:Uid {id: 234})
...
-
当您需要通过任何 Uid 查找节点时:
MATCH (uid:Uid {id: 123})<-[:HAS_ID]-(n)
RETURN n;