任何基于图形/图形感知的数据库(Neo4j、ArangoDB、OrientDB 或其他)是否具有与关系数据库提供的机制相同的维护引用完整性的机制?
我正在探索各种基于文档的数据库,以找到合适的引擎用于向某个项目添加辅助数据存储。
我发现了基于图的/多模型数据库,它们似乎是一个好主意,但我惊讶地发现它们似乎没有提供与现代关系数据库相同级别的关系/链接/边缘保护。
特别是,我正在讨论将实体/顶点的删除与链接/边的删除相链接。在关系数据库中,我可以有一个外键约束,它将一个表中的记录与另一个表中的记录链接起来,并且可以
如果表 A 中的记录被表 B 中的记录引用,则防止删除该记录(“删除时不执行任何操作”),或者
如果删除表 A 中的引用记录,则删除表 B 中的引用记录。
我希望在图形感知数据库中找到类似的机制。例如,如果“评论”顶点链接到“帖子”顶点(形成多对一关系),则需要解决以下问题/挑战:
当该帖子的评论存在边缘时,防止删除该帖子。这样,评论就永远不会有指向帖子的悬空链接/边缘。解决方案是:根据链接/边缘属性,
阻止删除帖子,直到删除该帖子的评论的所有边缘,或者
删除帖子时删除链接到该帖子的所有评论。
防止删除评论到帖子的边缘而不删除评论本身,以防止评论根本没有到帖子的链接/边缘。
仅当创建边缘以同时将此评论链接到帖子时才允许创建评论。
基于图形的数据库中确实缺乏这样的机制,还是我只是找不到它们?
我知道OrientDB有“链接”数据类型,可能解决了第二个问题和第三个问题(如果链接类型属性被声明为强制且非空,那么在不指定链接目的地的情况下不可能创建记录,稍后不可能通过取消设置属性来中断链接)。
然而,据我记得,可以删除链接类型属性指向的记录,从而产生悬空链接(因此第一个问题没有解决)。
我还知道,在某些数据库中,我可以使用嵌套文档作为多个链接文档的替代方案。然而,这种方法不能很好地扩展(对于链接记录数量可以无限增长的情况)。此外,它也非常有限(当需要多个链接时,例如,指向帖子和用户的链接,它不能用作替代方案;还有其他重要的限制)。