在 neo4j 中对多个属性创建约束

Creating constraint on multiple properties in neo4j

我是 Neo4j 的新手,我需要一些帮助。

我试图根据两种含义同时对节点的多个属性进行约束:

  1. 我需要将许多属性指定为约束,而无需使用命令在所有属性上一遍又一遍地键入
  2. 我需要将许多属性定义为 ONE-UNITY 约束,如在 SQL 中,当 3 个属性是主键且不可分离时。

如何实现?

你实际上问了2个问题。

  1. APOC 过程apoc.schema.assert 有助于方便地确保数据库具有所需的一组索引和约束。 (但请注意,此过程将删除调用中未指定的任何现有索引和约束。)

    例如,如文档中所示,此调用:

    CALL apoc.schema.assert(
      {Track:['title','length']},
      {Artist:['name'],Track:['id'],Genre:['name']});
    

    将 return 这样的结果(另外,如果删除了索引或约束,则 action 值为 "DROPPED" 的行将是 return 编辑):

      ╒════════════╤═══════╤══════╤═══════╕
      │label       │key    │unique│action │
      ╞════════════╪═══════╪══════╪═══════╡
      │Track       │title  │false │CREATED│
      ├────────────┼───────┼──────┼───────┤
      │Track       │length │false │CREATED│
      ├────────────┼───────┼──────┼───────┤
      │Artist      │name   │true  │CREATED│
      ├────────────┼───────┼──────┼───────┤
      │Genre       │name   │true  │CREATED│
      ├────────────┼───────┼──────┼───────┤
      │Track       │id     │true  │CREATED│
      └────────────┴───────┴──────┴───────┘
    
  2. 由于(还)没有任何方法可以在节点标签的多个属性上创建索引或约束,因此一种流行的解决方法是使用额外的 属性,其值为要使用的值的数组。您必须确保所有值都是同一类型,并在必要时转换一些值。不幸的是,这需要冗余地存储一些数据,并使您的代码有点复杂。