你的Graph DBMS有没有办法拒绝创建周期的DML?

时间:2013-11-30 00:11:04

标签: triggers neo4j graph-databases

我是Neo4j的快乐用户,但始终需要注意永远不会创建周期。数据结构是您看到的树。它是一棵树对于程序的规范很重要

有一个程序员很容易。但是随着程序的发展,你有几十个人正在努力。由于并非所有的开发人员都从第1天起就和你在一起,并且没有我为该程序编写的规范 - 他们可能会采用快捷方式来实现明确的项目目标,因为我没有指定它们,而是让我的数据库处于这样的状态:使某些形式的分析过于复杂。

是否存在类似于数据库触发器或外键引用完整性的东西,阻止您在Neo4j或任何假设的图形数据库中做一些顽皮的事情?

1 个答案:

答案 0 :(得分:1)

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

  • 构造一些类来与图形进行交互,从而抽象出图形界面并与应用程序中的图形进行所有通信。围绕这些测试编写单元测试以强制执行“仅创建树”。通过这种方式,您的其他开发人员不需要直接与图表交互,只能与您的类“创建树”。
  • 如果你在Neo4j周围使用Blueprints,你可以实现一个Graph Wrapper(包装器装饰有附加功能的Graph实例),可以尝试在添加边缘的情况下检测周期,尽管这样的检查可能非常昂贵。我想这样的事情可能会起作用的机会取决于你的架构,图形大小,应用程序等。
  • 你问过触发器,所以我只想补充一点,蓝图通过一个名为EventGraph的包装器提供“触发式”功能,当图变异时会生成通知。如果正在创建周期,您可以订阅这些通知以执行检查(同样,上面提到了相同的警告)。

我的所有建议都基本上都是惯例而不是配置。在一天结束时,开发人员可以选择绕过上述任何选项,然后开始向图表写入内容。我认为这与任何其他流氓开发人员忽略RDBMs模式并且只是在他们感觉到时创建新表/列没有什么不同,所以这些方法不能替代代码审查,文档等。