Sql 非关系数据库设计混乱

Sql 非关系数据库设计混乱,sql,mongodb,nosql,relational-database,Sql,Mongodb,Nosql,Relational Database,我正在学习MongoDB,并试图了解不使用关系数据库模式的概念 对于我的应用程序,我希望能够添加新用户和项目,并通过角色(如“经理”、“开发人员”等)将用户分配给项目。用户应该能够查看他们所扮演角色的项目的详细信息。检索有关项目的详细信息时,应包括在该项目中也具有角色的用户列表 假设我通过POST向/users添加一个新用户。我可以在/projects中添加一个新项目 然后我想给用户一个项目中的角色。我可以使用角色(包括角色名称和项目id)对/users/{id},但是通过GET/project

我正在学习MongoDB,并试图了解不使用关系数据库模式的概念

对于我的应用程序,我希望能够添加新用户和项目,并通过角色(如“经理”、“开发人员”等)将用户分配给项目。用户应该能够查看他们所扮演角色的项目的详细信息。检索有关项目的详细信息时,应包括在该项目中也具有角色的用户列表

假设我通过POST向
/users
添加一个新用户。我可以在
/projects
中添加一个新项目

然后我想给用户一个项目中的角色。我可以使用角色(包括角色名称和项目id)对
/users/{id}
,但是通过GET
/projects/{id}
检索项目的详细信息不会包括该项目中具有角色的用户列表

我本可以将角色发布到
/project/{id}
(包括角色名称和用户id),但是GET
/users/{id}
将不包括他们的角色,我可能希望在他们的登录页上显示用户所涉及的角色

要创建一个新角色,我真的需要将它放到
/users/{id}
中,然后对角色和用户执行另一个放到
/projects/{id}

在关系数据库中,只需创建一个角色表,其中可能包括角色名称、用户Id和项目Id,就可以实现上述功能。然后,我可以执行连接并访问我需要的任何信息


我是不是遗漏了什么?如果您有任何提示或有用的参考资料,我们将不胜感激。

当您使用关系型数据库时,恐怕您遇到了NOSQL数据库的一大缺点。答案是忘记关于标准化的所有知识,将数据复制到两个地方,然后使它们都保持最新

我知道这和在SQL数据库中教给你们的东西背道而驰,但这是一种权衡。 罗伯·沃尔克在这里写了一篇很好的文章


这在一开始可能看起来很糟糕,但实际上是有道理的,因为您基本上是在减少读取时间的同时增加写入时间和额外内存。现在内存很便宜,你写用户权限要比读用户权限少得多。

你说得对。NOSql数据库有一个概念,如果你沿着“表”重复相同的数据,这不是一个问题,因为重复的信息有一个哈希代码,它将识别一个数据,当你想要更新它时,你将使用它。

你的1个明确的具体研究问题是什么?你首先被卡在什么目标上,给定了什么?