防止基于节点属性创建新关系

时间:2019-06-01 13:08:38

标签: database-design neo4j cypher

我正在尝试使用Neo4j创建一个可在城市和街道之间建立关系的图形。可以有多个具有相同名称的街道,它们属于不同的城市,但是唯一的限制是一个城市不能有2个具有相同名称的街道。想象一下我有下一个场景:

在这里,我使用Cypher创建两个街道节点,并使用相同的街道名称:

(st1: Street { streetName: 'streetName1'}),
(st2: Street { streetName: 'streetName1'}),

在这里我创建一个城市节点:

(city1: City { cityName: 'cityName1'}),

我知道st1属于city1,所以我创建了它们之间的关系:

(st1)-[:BELONGS_TO]->(city1)

我的问题是:考虑到图中已经存在该关系,有什么方法可以防止在city1和其他任何streetName属性为'streetName1'的Street节点之间创建新的关系。 ,如下所示

(st2)-[:BELONGS_TO]->(city1)

1 个答案:

答案 0 :(得分:0)

这里是一个示例,该示例说明了如何创建一条街道并将其链接到一个城市(如果且仅当该城市还没有同名街道时):

public class RecAccessLevel
{
    public string ControllerID { get; set; }
    public int RoleId { get; set; }
    public IEnumerable<Action> Actions { get; set; }
}

public class Action
{
    public int ActionId { get; set; }
}