Triggers 您的Graph DBMS是否有办法拒绝创建循环的DML?

Triggers 您的Graph DBMS是否有办法拒绝创建循环的DML?,triggers,neo4j,graph-databases,Triggers,Neo4j,Graph Databases,我是Neo4j的快乐用户,但始终需要小心,不要创建循环。数据结构是您看到的一棵树。它是一棵树,对于程序的规范很重要 有了一个程序员就很容易了。但是随着这个项目的发展,你有几十个人在做这个项目呢。由于并非所有的开发人员都从第一天起就与您在一起,并且没有我为该程序编写的规范,他们可能会采取捷径来实现明确的项目目标,因为我没有指定这些目标,但使我的数据库处于一种使某些形式的分析过于复杂的状态 是否有类似于数据库触发器或外键引用完整性的东西可以阻止您在Neo4j或任何假想的图形数据库中做一些不正常的事情

我是Neo4j的快乐用户,但始终需要小心,不要创建循环。数据结构是您看到的一棵树。它是一棵树,对于程序的规范很重要

有了一个程序员就很容易了。但是随着这个项目的发展,你有几十个人在做这个项目呢。由于并非所有的开发人员都从第一天起就与您在一起,并且没有我为该程序编写的规范,他们可能会采取捷径来实现明确的项目目标,因为我没有指定这些目标,但使我的数据库处于一种使某些形式的分析过于复杂的状态


是否有类似于数据库触发器或外键引用完整性的东西可以阻止您在Neo4j或任何假想的图形数据库中做一些不正常的事情?

我不知道有任何图形数据库允许您显式阻止循环。这种类型的验证逻辑特定于您的域,因此,您必须在应用程序中强制执行。以下是一些想法:

  • 构造一些类与图形交互,这些类抽象出图形接口,并使应用程序与图形的所有通信都通过该接口。围绕这些测试编写单元测试,以强制“仅创建树”。通过这种方式,您的其他开发人员将不需要直接与图形交互,而只能使用您的类“创建树”
  • 如果您使用的是Neo4j,那么您可以实现一个图形包装器(包装器使用附加功能装饰图形实例),它可以尝试在添加边时检测循环,我想,尽管这样的检查可能非常昂贵。我想,类似的工作可能取决于您的模式、图形大小、应用程序等
  • 您询问了触发器,所以我只想补充一下,Blueprints通过一个名为的包装器提供了“类似触发器”的功能,该包装器将在图形发生变化时生成通知。如果正在创建周期,您可以订阅这些通知以执行检查(同样,使用上面提到的相同警告)

我所有的建议基本上都是惯例,而不是配置。在一天结束时,开发人员可能会选择绕过上述任何选项,只需开始向图形中写入内容。我想这与任何其他流氓开发人员忽略RDBMs模式,只在他们喜欢的时候创建新表/列没有太大区别,因此这些方法不能替代代码审查、文档等。

谢谢Stephen。这是一个全面的列表,让我们深入了解人们在实践中如何处理这个问题。