我正在学习MongoDB,并试图弄清不使用关系数据库架构的概念。
对于我的应用程序,我希望能够添加新的用户和项目,并按角色将用户分配给项目,例如“经理”,“开发人员”等。用户应该能够查看有关其拥有角色的项目的详细信息。检索有关项目的详细信息应包括在该项目中也具有角色的用户列表。
假设我通过POST向/users
添加了一个新用户。我可以将带有POST的新项目添加到/projects
。
然后,我想给用户一个项目角色。我可以使用角色(包括角色名称和项目ID)对/users/{id}
进行PUT,但随后通过GET /projects/{id}
检索项目的详细信息将不包括该项目中具有角色的用户列表
我本可以将角色发布到/project/{id}
(包括角色名称和用户ID),但是GET /users/{id}
将不包含其角色,我可能想显示用户的角色参与了他们的目标网页。
要创建新角色,我真的必须将其放置到/users/{id}
中,然后使用角色和用户将另一个放置到/projects/{id}
中吗?
可以通过简单地创建一个Roles表(其中可能包含Role名称,User ID和Project ID)来在关系数据库中实现以上目的。然后,我可以执行联接并访问所需的任何信息。
我在这里想念什么吗?任何提示或有用的参考将不胜感激。
答案 0 :(得分:0)
恐怕您从关系型数据库中获取NOSQL数据库时会遇到很大的不利影响。答案是忘记关于标准化的一切知识,并将数据复制到两个地方,然后使它们保持最新。
我知道这与在SQL数据库中教您的所有知识背道而驰,但这是个折衷方案。 罗伯·沃尔克(Rob Volk)在https://robvolk.com/nosql-design-patterns-for-relational-data-9c2c11ae3b4a
上对此做了很好的文章这乍看起来似乎很糟糕,但实际上是有道理的,因为您基本上要做的是减少读取时间,但要增加写入时间和额外的内存。如今,内存很便宜,并且您要写入的用户权限要比读取权限少得多。
答案 1 :(得分:0)
您是对的。如果您在“表”上重复相同的数据,则NOSql数据库的概念没有问题,因为重复的信息具有哈希码,这将标识数据,并在您要更新数据时使用。 / p>