在文档数据库中构建共享数据和访问权限的最佳方法是什么

时间:2016-10-27 14:12:19

标签: mongodb couchdb azure-cosmosdb document-database

我正在使用RDMS背景解决这个问题,所以文档数据库的一些最佳实践对我来说是新的。我正在尝试了解存储共享数据和访问该数据的权限的最佳方法。 SQL Server中的架构可能如下所示:

项目表

projectId PK
ownerId FK User.userId
title
...

用户表

userId PK
name
...

ProjectShare表

sharedById FK User.userId
sharedWithId FK User.userId
state
...

通过上面的表格,我可以查询用户有权访问的所有项目。然后,我可以查询与每个项目相关的所有数据。每个项目都有许多相关的表格。数据的分层特性似乎非常适合文档数据库。

我如何在MongoDB,CouchDB或DocumentDB等文档数据库中最好地构建这样的东西?

1 个答案:

答案 0 :(得分:0)

确实有多种方法可以在DocumentDB中对这些数据进行建模。

DocumentDB中的集合可以托管异构文档集,并且可以进行大规模分区。

根据查询要求,数据可以在多个方向上进行非规范化 - 通过在项目上转动(并保持所有用户关联,包括所有者,共享和共享详细信息)或通过转向用户(并保留他们拥有的所有项目) ,项目的细节,包括共享该项目的其他用户的信息等。)

还可以通过简单地存储软引用并将引用的信息保持为单独的文档来控制非规范化的级别。例如,如果我们按项目进行转换,我们可以在每个项目文档中重复存储所有用户信息,或者仅存储userId(在这种情况下,用户信息存储在单独的文档中)。我们可以根据您的查询/逻辑完整性约束来控制要存储的引用数据量。