我对mongoDB和数据库一般来说还很陌生,我不确定设置不同属性的正确/典型结构是什么。
例如,假设我有一个叫Tim的人,他可以打篮球,足球和网球。您如何说明这一点?您使用布尔值还是存储字符串数组?
这就是我认为的格式。这是正确的思考方式吗?
name: 'Tim',
sports: {
soccer: true,
tennis: true,
basketball: true,
football: false
}
答案 0 :(得分:1)
MongoDB中的数据建模与RDBMS的工作方式不同。使用RDBM的典型工作流程是,定义实体及其属性以及它们之间的关系,然后将头撞在墙上,以使“上方左上方和上方”™连接正确,以便数据为您提供所需的答案
一般而言,NoSQL数据库(尤其是MongoDB)的典型工作流程有所不同。您首先确定需要数据回答的问题,然后对数据进行建模,以便以最有效的方式回答这些问题。因此,让我们继续进行下去。
您显然有个人,应该记录他们参加的运动。因此,我们必须问自己的第一个问题是嵌入数据还是引用数据。由于我们不太可能达到16MB的文件限制,因此嵌入似乎是一个不错的选择。现在,与一个持有可想象的所有运动的布尔值的对象一起(后来),不仅要引入不必要的冗长性,而且与持有一系列运动相比,我们将信息值精确地添加为0 :
{
Name: “Tim“,
Sports: [”Soccer”,“Tennis”,”Basketball”]
}
这使得以后更容易引入新的运动(将所述运动附加到一系列运动中),不会污染每个文档并获得不相关的数据,并且保留了相同的信息价值。