在 neo4j 中对多个属性创建约束
Creating constraint on multiple properties in neo4j
我是 Neo4j 的新手,我需要一些帮助。
我试图根据两种含义同时对节点的多个属性进行约束:
- 我需要将许多属性指定为约束,而无需使用命令在所有属性上一遍又一遍地键入
- 我需要将许多属性定义为 ONE-UNITY 约束,如在 SQL 中,当 3 个属性是主键且不可分离时。
如何实现?
你实际上问了2个问题。
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│
└────────────┴───────┴──────┴───────┘
由于(还)没有任何方法可以在节点标签的多个属性上创建索引或约束,因此一种流行的解决方法是使用额外的 属性,其值为要使用的值的数组。您必须确保所有值都是同一类型,并在必要时转换一些值。不幸的是,这需要冗余地存储一些数据,并使您的代码有点复杂。
我是 Neo4j 的新手,我需要一些帮助。
我试图根据两种含义同时对节点的多个属性进行约束:
- 我需要将许多属性指定为约束,而无需使用命令在所有属性上一遍又一遍地键入
- 我需要将许多属性定义为 ONE-UNITY 约束,如在 SQL 中,当 3 个属性是主键且不可分离时。
如何实现?
你实际上问了2个问题。
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│ └────────────┴───────┴──────┴───────┘
由于(还)没有任何方法可以在节点标签的多个属性上创建索引或约束,因此一种流行的解决方法是使用额外的 属性,其值为要使用的值的数组。您必须确保所有值都是同一类型,并在必要时转换一些值。不幸的是,这需要冗余地存储一些数据,并使您的代码有点复杂。