Database 具有引用完整性的NoSQL/RDBMS混合(删除级联)?
是否有一个数据库可以为您提供引用完整性的好处,并能够使用SQL类型的语言进行查询,但也可以根据实体的数据属性以及它们之间的关系松散地定义实体 例如,采用RBAC类型的模型,您拥有权限、用户、用户组和角色。复杂/灵活的模型可以有以下规则:Database 具有引用完整性的NoSQL/RDBMS混合(删除级联)?,database,nosql,rdbms,referential-integrity,object-oriented-database,Database,Nosql,Rdbms,Referential Integrity,Object Oriented Database,是否有一个数据库可以为您提供引用完整性的好处,并能够使用SQL类型的语言进行查询,但也可以根据实体的数据属性以及它们之间的关系松散地定义实体 例如,采用RBAC类型的模型,您拥有权限、用户、用户组和角色。复杂/灵活的模型可以有以下规则: 角色可以有一个或多个权限,并且权限可以属于一个或多个角色 用户可以拥有一个或多个权限,并且权限可以属于一个或多个用户 用户组可以具有一个或多个权限,并且权限可以属于一个或多个用户组 用户可以有一个或多个角色,并且一个角色可以属于一个或多个用户 用户组可以有一个
- 角色可以有一个或多个权限,并且权限可以属于一个或多个角色
- 用户可以拥有一个或多个权限,并且权限可以属于一个或多个用户
- 用户组可以具有一个或多个权限,并且权限可以属于一个或多个用户组
- 用户可以有一个或多个角色,并且一个角色可以属于一个或多个用户
- 用户组可以有一个或多个角色,并且一个角色可以属于一个或多个用户组
- 角色可以有一个或多个角色,并且一个角色可以属于一个或多个角色
在RDBMS中,通过创建一个表来存储实体和另一个表来存储关系等,可以在一定程度上实现上述功能,但这会使执行简单查询所需的SQL变得过于复杂,并且可能会影响性能。大多数NoSQL数据库都是按很好的规模构建的。这是以一致性为代价的,引用完整性是一致性的一部分。因此,大多数NoSQL不支持任何类型的关系约束 有一种类型的NoSQL数据库确实支持关系。事实上,它是专门为关系而设计的:关系。图形数据库存储节点和这些节点之间的显式关系(边)。节点和边都可以包含键/值对形式的数据,而不必绑定到预定义的模式 图形数据库针对关系查询和漂亮的图形操作进行了优化,例如查找两个节点之间的最短路径,或查找距离当前节点给定距离内的所有节点。在角色/权限场景中,您不需要这样做,但如果需要,使用RDBMS将很难实现
另一种选择是通过使用RDBMS存储关系和文档数据库存储实际数据,使整个数据层成为混合数据层。这会使您的应用程序稍微复杂一些,但我认为这不是一个很好的解决方案。您将使用两种不同的技术,都处理它们设计用来处理的问题。有一种语言,由图形数据库支持。关于您的示例,请查看和。还有一个基于web的工具,包括Neo4j的REST API和Gremlin控制台,请参见。鉴于您在问题中指定的要求,图形数据库可能是您正在寻找的类型,但还有其他选择。正如@Niels van der Rest所说,“无先验模式”和“参照完整性”这两个约束很难调和。您可能会找到一个基于主题图的数据库,可以这样做,但我不熟悉具体的实现,所以我不能确定 如果你决定你真的离不开引用完整性,我担心你可能会被RDBMS卡住。你可以使用一些技巧来避免你预期的一些问题,我将介绍一些技巧,这可能会给你一些想法。尽管如此,对于这种需要动态、后先验模式和元模式元素的数据模型,RDBMS总是很尴尬
如果你愿意放弃引用完整性,那么你仍然有三种方法要考虑。
您可能需要检查它是一个基于文档的数据库,因此具有灵活的模式。这非常棒,值得花时间看看它是否能满足您的需求。一些NoSQL解决方案支持