Neo4j/Cypher : 不允许建立关系

Neo4j/Cypher : do not allow a relationship

我正在创建一个 PERT 工具,并根据我的情况调整此 tutorial

我想做的是禁止创建关系,禁止创建属性:

  1. START 节点(它是一个 :EndPoint,而不是 :Activity)应该无前有后

  2. FINISH 节点(这是一个 :EndPoint,而不是 :Activity)应该无后人,只有前人

  3. 不允许循环

    • 直接在 START 之前的每个 :Activity 不能有其他活动作为前导
    • 活动的每个 :Activity (in+) 直接前置活动不能将这些活动作为前置活动。

我还没有找到阻止这些关系创建的方法。约束好像不是我想做的,UNIQUENESS根本不是我要找的。

我试图以另一种方式解决问题:

  1. 仅授权 属性 START:EndPoint
  2. 的继任者
  3. 仅授权前任 属性 用于 FINISH:EndPoint

但是对于第三点,我不知道,"reverse-thinking"可能是一个解决方案,但我没有找到如何应用它。

如果你有任何想法,即使没有工作,但能提供一个新的愿景,我将不胜感激。

与这里的习俗相反,我要发表意见。原因是你实际上不是在谈论数据库级别的限制(又名 schema),而是你的问题级别的限制(又名 业务规则).

有很多方法可以实现业务逻辑,主要的(也可能是最好的)方法是……在您的应用程序逻辑中

Neo4j 特定的一个是使用用户定义的程序。与使用 存储过程和触发器 没什么不同,您可能会使用它们来解决 RDBMS(例如 Oracle)中的类似问题。

希望这对您有所帮助。

此致, 汤姆

您正确地得出结论,在此处使用约束不是正确的方法。虽然它们是 proposed to the openCypher language,但这是一个持续的过程,当前的实施不支持结构限制。

我同意 Tom Geudens 的回答:您应该防止创建违反​​您在应用程序逻辑中的约束的关系。