在文档数据库中构建共享数据和访问权限的最佳方式是什么
What is the best way to structure shared data and access rights in a document database
我有 RDMS 背景来解决这个问题,所以文档数据库的一些最佳实践对我来说是新的。我试图了解存储共享数据和访问该数据的权限的最佳方式。 SQL 服务器中的架构可能如下所示:
项目Table
projectId PK
ownerId FK User.userId
title
...
用户Table
userId PK
name
...
ProjectShare Table
sharedById FK User.userId
sharedWithId FK User.userId
state
...
通过上面的表格,我可以查询用户有权访问的所有项目。然后我可以查询与每个项目相关的所有数据。每个项目都会有很多相关的表。数据的层次结构似乎很适合文档数据库。
我如何在 MongoDB、CouchDB 或 DocumentDB 等文档数据库中最好地构建类似的结构?
确实有多种方法可以在 DocumentDB 中对这些数据进行建模。
DocumentDB 中的集合可以托管异构文档集,并且可以进行大规模分区。
根据查询要求,可以在多个方向对数据进行非规范化 - 通过以项目为中心(并保持所有用户关联,包括所有者、共享者和共享详细信息)或以用户为中心(并保留所有项目)他们拥有项目的详细信息,包括共享此项目的其他用户的信息等)。
还可以通过简单地存储软引用并将引用的信息保存为单独的文档来控制反规范化的级别。例如,如果我们按项目进行透视,我们可以在每个项目文档中重复存储所有用户信息,或者只存储 userId(在这种情况下,用户信息存储在单独的文档中)。我们可以根据您的查询/逻辑完整性约束来控制要存储多少引用数据。
我有 RDMS 背景来解决这个问题,所以文档数据库的一些最佳实践对我来说是新的。我试图了解存储共享数据和访问该数据的权限的最佳方式。 SQL 服务器中的架构可能如下所示:
项目Table
projectId PK
ownerId FK User.userId
title
...
用户Table
userId PK
name
...
ProjectShare Table
sharedById FK User.userId
sharedWithId FK User.userId
state
...
通过上面的表格,我可以查询用户有权访问的所有项目。然后我可以查询与每个项目相关的所有数据。每个项目都会有很多相关的表。数据的层次结构似乎很适合文档数据库。
我如何在 MongoDB、CouchDB 或 DocumentDB 等文档数据库中最好地构建类似的结构?
确实有多种方法可以在 DocumentDB 中对这些数据进行建模。
DocumentDB 中的集合可以托管异构文档集,并且可以进行大规模分区。
根据查询要求,可以在多个方向对数据进行非规范化 - 通过以项目为中心(并保持所有用户关联,包括所有者、共享者和共享详细信息)或以用户为中心(并保留所有项目)他们拥有项目的详细信息,包括共享此项目的其他用户的信息等)。
还可以通过简单地存储软引用并将引用的信息保存为单独的文档来控制反规范化的级别。例如,如果我们按项目进行透视,我们可以在每个项目文档中重复存储所有用户信息,或者只存储 userId(在这种情况下,用户信息存储在单独的文档中)。我们可以根据您的查询/逻辑完整性约束来控制要存储多少引用数据。