【问题标题】:Is it possible to create unique constraint accross multiple properties over multiple nodes in neo4j?是否可以在 neo4j 中的多个节点上跨多个属性创建唯一约束?
【发布时间】:2020-04-08 05:31:14
【问题描述】:

假设我在 Neo4j 中有两个标签 A、B。是否可以创建类似以下的内容?

创建 A.property1 和 B.property2 唯一的约束。

【问题讨论】:

    标签: neo4j constraints graph-databases


    【解决方案1】:

    不,约束仅在一个标签上。

    如果您决定创建一些新标签,例如 :A_B,那么您可以断言它的 property1、property2 属性充当node key constraint,尽管这只是一个企业功能。

    【讨论】:

      【解决方案2】:

      虽然无法创建跨多个节点的唯一性约束,但这里有一个 Cypher 查询,它显示了一种方法,您可以在创建节点之一之前执行跨 2 个节点的唯一性测试(如果适用):

      OPTIONAL MATCH (a:A), (b:B)
      WHERE a.property1 = $p1 AND b.property1 = $p2
      FOREACH(x IN CASE WHEN a IS NULL THEN [1] END |
        MERGE (a:A {property1: $p1}))
      

      查询假定p1p2 作为parameters 传入。如果 a.property1 = $p1b.property1 = $p2 为假,则 aWHERE 子句之后将为空。因此,如果多节点唯一性测试失败,FOREACH 子句将仅创建(如有必要,通过MERGE 子句)其中一个节点。 MERGE 用于避免创建该节点(如果该节点已存在)。

      【讨论】:

        猜你喜欢
        • 2013-01-27
        • 2017-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多