gpt4 book ai didi

database - 具有参照完整性的 NoSQL/RDBMS 混合体(删除级联)?

转载 作者:太空狗 更新时间:2023-10-30 01:40:45 27 4
gpt4 key购买 nike

是否有一个数据库可以让您享受参照完整性和使用 SQL 类型语言进行查询的好处,还可以让实体根据其数据属性以及它们之间的关系进行松散定义?

例如采用 RBAC 类型模型,您可以在其中拥有权限、用户、用户组和角色。复杂/灵活的模型可能具有以下规则:

  • 角色可以拥有一个或多个权限,一个权限可以属于一个或多个角色
  • 用户可以拥有一个或多个权限,一个权限可以属于一个或多个用户
  • 用户组可以有一个或多个权限,一个权限可以属于一个或多个用户组
  • 用户可以拥有一个或多个角色,一个角色可以属于一个或多个用户
  • 用户组可以有一个或多个角色,一个角色可以属于一个或多个用户组
  • 角色可以拥有一个或多个角色,一个角色可以属于一个或多个角色

要在 RDBMS 中对上述内容进行建模,将涉及创建大量交集表。理想情况下,我想在数据库中定义的只是实体本身(用户、角色等)加上一些强制属性。其他一切都将是动态的(即不需要 DDL),例如我可以创建一个具有未预定义的新属性的用户。我还可以在未预定义的实体之间创建关系,尽管数据库会像普通 RDBMS 一样处理参照完整性。

通过创建一个表来存储实体和另一个表来存储关系等,可以在 RDBMS 中在某种程度上实现上述目标,但这会使执行简单查询所需的 SQL 过于复杂,并且还可能影响性能。

最佳答案

大多数 NoSQL 数据库都可以很好地扩展。这是以一致性为代价的,参照完整性是其中的一部分。所以大多数 NoSQL 不支持任何类型的关系约束。

有一种 NoSQL 数据库支持关系。事实上,它专为关系设计:graph database .图数据库存储节点和这些节点之间的显式关系(边)。节点和边都可以包含键/值对形式的数据,而无需绑定(bind)到预定义的模式。

图形数据库针对关系查询和漂亮的图形操作进行了优化,例如查找两个节点之间的最短路径,或查找距当前节点给定距离内的所有节点。在角色/权限场景中您不需要它,但如果您这样做,使用 RDBMS 将更难实现。

另一种选择是通过使用 RDBMS 存储关系并使用文档数据库存储实际数据,使整个数据层成为一个混合层。这会使您的应用程序稍微复杂化,但我认为这不是一个糟糕的解决方案。您将使用两种不同的技术,这两种技术都处理它们旨在处理的问题。

关于database - 具有参照完整性的 NoSQL/RDBMS 混合体(删除级联)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3388051/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com