我对 No-SQL 数据库比较陌生。我正在为电子学习网络应用程序设计数据结构。将有 X 数量的类(class)和 Y 数量的用户。
每个用户都可以参加任意数量的类(class)。
每门类(class)都由许多部分组成(每个部分可能是一个视频或一个测验)。
我需要跟踪用户学习的每个部分,因此我认为整个类(class)应该是用户集的一部分(对于每个用户),如下所示:
{
_id: "ed",
name: "Eduardo Ibarra",
courses: [
{
name: "Node JS",
progress: "100%",
section: [
{name: "Introdiction", passed:"100%", field3:"x", field4:""},
{name: "Quiz 1", passed:"75%", questions:[...], field3:"x", field4:""},
]
},
{
name: "MongoDB",
progress: "65%",
...
}
]
}
这是最好的方法吗?
最佳答案
我想说的是,根据您的查询来设计您的数据库。有一点是肯定的..您将必须进行一些嵌入。
如果您要对用户正在执行的操作执行更多查询,请将用户作为主要实体并将类(class)嵌入其中。您不需要嵌入整个类(class)信息。有关类(class)的信息是静态的。例如:有关 Node JS 类(class)的数据 - 即类(class)内容、作者、练习文件等 - 不会改变。因此您可以将类(class)信息单独保存在另一个集合中。但用户完成了多少类(class)取决于个人用户。因此,您应该只保留类(class)的 ID(存储在单独的“类(class)”集合中),并且对于每个用户,您可以存储与嵌入在用户集合本身中的(用户、类(class))对相关的信息。
现在最重要的问题 - 如果您必须执行需要“加入”用户和类(class)集合的查询该怎么办?为此,您可以使用 javascript 首先获取类(class)(并且可能将它们存储在数组或列表等中),然后从类(class)集合中获取每个类(class)的用户,反之亦然。网上有一些驱动程序可以帮助您完成此任务。其中之一是 UnityJDBC,可用 here .
根据我的经验,我知道知道要从 MongoDB 查询什么对于设计数据库非常有帮助,因为 MongoDB 的 NoSQL 本质意味着您没有正确的设计方法。如果任何方法都不允许你完成你的任务,那么它就是不正确的。很明显,事先知道您将使用数据库做什么(即您将查询什么)是唯一的指导。
关于mongodb - 基于 Mongodb 的电子学习网络应用程序上的多对多关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23974799/