【发布时间】:2016-04-02 19:37:27
【问题描述】:
到目前为止,我一直在使用关系数据库,但由于我已经切换到 MongoDB(使用 Mongoose 和 Express),我很难调整我对数据库设计的思考方式。
我经常发现自己会“为什么我不能放一个 id 来引用?...等等”,然后默认回到关系数据库的角度。
我知道 MongoDB 的重点是嵌套 JSON 结构之类的东西。但我发现如果我使用这种方法,我可以在技术上将我的整个应用程序嵌套在一个集合中。但不知何故,我觉得这不是正确的方法......这是我的应用程序的简单示例布局:
{
company: {
collections: [{
createdBy,
documents: [{
text,
createdBy
}],
title
}],
templates: [{
text,
createdBy,
placeholders
}],
users: [{
email,
firstName,
lastName,
password
}]
}
}
一个公司会有很多用户,每个用户都可以创建模板,用户也可以创建集合(比如包含文档的文件夹),集合中会有很多文档,但文档不必属于一个集合。文档是从现有模板创建的(但它们不需要在数据库中有任何关系)。
- 公司 - 拥有许多模板、文档、集合和用户。
- 用户 - 属于公司,拥有许多文档、集合和模板
- 收藏 - 属于用户和公司,有很多文档
- 文档 - 属于用户、公司和集合
- 模板 - 属于用户和公司
我觉得我可以在技术上创建一个名为 company 的集合,然后将其他所有内容作为子文档嵌套在它下面。或者我习惯的方式只是将 id refs 添加到所有内容中,并将所有内容都设为自己的单独集合。
这两种方式似乎都不太靠谱...有人可以使用我的示例,向我展示他们将如何在 MongoDB 中正确设计数据库,并解释他们为什么选择这样做吗?
这将极大地帮助我更好地理解如何在 Mongo 中设计数据库模式。
非常感谢!
【问题讨论】:
标签: javascript node.js mongodb mongoose nosql