Neo4j/Cypher : 不允许建立关系
Neo4j/Cypher : do not allow a relationship
我正在创建一个 PERT 工具,并根据我的情况调整此 tutorial。
我想做的是禁止创建关系,禁止创建属性:
START 节点(它是一个 :EndPoint,而不是 :Activity)应该无前有后
FINISH 节点(这是一个 :EndPoint,而不是 :Activity)应该无后人,只有前人
不允许循环
- 直接在 START 之前的每个 :Activity 不能有其他活动作为前导
- 活动的每个 :Activity (in+) 直接前置活动不能将这些活动作为前置活动。
我还没有找到阻止这些关系创建的方法。约束好像不是我想做的,UNIQUENESS根本不是我要找的。
我试图以另一种方式解决问题:
- 仅授权 属性 START:EndPoint
的继任者
- 仅授权前任 属性 用于 FINISH:EndPoint
但是对于第三点,我不知道,"reverse-thinking"可能是一个解决方案,但我没有找到如何应用它。
如果你有任何想法,即使没有工作,但能提供一个新的愿景,我将不胜感激。
与这里的习俗相反,我要发表意见。原因是你实际上不是在谈论数据库级别的限制(又名 schema),而是你的问题级别的限制(又名 业务规则).
有很多方法可以实现业务逻辑,主要的(也可能是最好的)方法是……在您的应用程序逻辑中。
Neo4j 特定的一个是使用用户定义的程序。与使用 存储过程和触发器 没什么不同,您可能会使用它们来解决 RDBMS(例如 Oracle)中的类似问题。
希望这对您有所帮助。
此致,
汤姆
您正确地得出结论,在此处使用约束不是正确的方法。虽然它们是 proposed to the openCypher language,但这是一个持续的过程,当前的实施不支持结构限制。
我同意 Tom Geudens 的回答:您应该防止创建违反您在应用程序逻辑中的约束的关系。
我正在创建一个 PERT 工具,并根据我的情况调整此 tutorial。
我想做的是禁止创建关系,禁止创建属性:
START 节点(它是一个 :EndPoint,而不是 :Activity)应该无前有后
FINISH 节点(这是一个 :EndPoint,而不是 :Activity)应该无后人,只有前人
不允许循环
- 直接在 START 之前的每个 :Activity 不能有其他活动作为前导
- 活动的每个 :Activity (in+) 直接前置活动不能将这些活动作为前置活动。
我还没有找到阻止这些关系创建的方法。约束好像不是我想做的,UNIQUENESS根本不是我要找的。
我试图以另一种方式解决问题:
- 仅授权 属性 START:EndPoint 的继任者
- 仅授权前任 属性 用于 FINISH:EndPoint
但是对于第三点,我不知道,"reverse-thinking"可能是一个解决方案,但我没有找到如何应用它。
如果你有任何想法,即使没有工作,但能提供一个新的愿景,我将不胜感激。
与这里的习俗相反,我要发表意见。原因是你实际上不是在谈论数据库级别的限制(又名 schema),而是你的问题级别的限制(又名 业务规则).
有很多方法可以实现业务逻辑,主要的(也可能是最好的)方法是……在您的应用程序逻辑中。
Neo4j 特定的一个是使用用户定义的程序。与使用 存储过程和触发器 没什么不同,您可能会使用它们来解决 RDBMS(例如 Oracle)中的类似问题。
希望这对您有所帮助。
此致, 汤姆
您正确地得出结论,在此处使用约束不是正确的方法。虽然它们是 proposed to the openCypher language,但这是一个持续的过程,当前的实施不支持结构限制。
我同意 Tom Geudens 的回答:您应该防止创建违反您在应用程序逻辑中的约束的关系。