如何改进我的MongoDB结构?

时间:2015-05-18 11:05:29

标签: javascript node.js mongodb mongoose database

问题

我正在使用mongoose的Schema创建一个MongoDB结构。

该网站的目的是存储与组件相关的教程( Article )。 组件位于类别中,来自一个或多个供应商。我来自SQL数据库所以我不确定我为这个NoSQL数据库做的结构..

缺少信息?结构正确

实际结构

文章

* title : String
* [ components : Component ]
* abstract : String (160- chars)
* content : String (markdown)
* [ langages : Langages ]
* created : Date
* [ files : 
  - path : String 
  - description : String ]
* by : User
* [ edited : User ] 

供应商

* name : String
* serial : String (10- chars)
* country : Country
* adress : String
* city : String
* score : Number
* [ components : 
  - component : Component
  - price : Number ]

国家应该存储?

* name : String (China)
* serial : String (ZH)
* [ suppliers : Supplier ]

组件

* name : String (ex : Bluetooth slave)
* reference : String (ex : HC-06 )
* [ suppliers : Supplier ]
* [ categories : Category ]
* [ images : String ]

分类

* name : String
* description : String
* [ component : Component ]

1 个答案:

答案 0 :(得分:1)

MongoDB是一个文档数据库,非常灵活,您可以按照自己选择的方式构建文档!这种感觉与SQL的做法非常不同。

从你的问题来看,没有"对"如果您有一个从一个文档到另一个文档的ID,则信息为"完成"同样。 SQL和非SQL数据库的汽车示例是SQL就像一个自动传输,为你做了很多,而NoSQL是一个手动传输。你可以获得更多的性能,但你也必须更多地调整它。

你有任何一对一的关系吗?如果是,请将它们作为同一文档。

如果您总是以同样的方式拉树(组件+类别+供应商),也许只需将其作为单个文档!易于阅读,更多的工作更新。从您的示例中,只需嵌入类别和国家/地区 - 它们基本上只是字符串。

如果能够帮助您获得高效的数据,并且结构更加简洁,请不要害怕数据加倍。可能,你还会比你正在写的更多很多。并且您将创建/更新某些内容(文章)很多,而不是更新供应商,类别等。

您将尝试更多内容,并且您的数据可能会经常更改。这被算作NoSQL DB的优势!您不需要管理架构,旧文档只是没有可用的新字段。 (当然,如果您希望所有旧数据都包含所述新字段,那么您需要进行大量更新!)

最后请注意,如果您愿意重新构建所有数据,只需使用SQL,因为您已经了解它,并选择一个好的ORM,如BookshelfSequelize,或者只是通过Knex进行一些查询访问。让您的数据访问为您服务!文档存储有可能不适合您的应用程序,如果您希望完成某项工作(而不是了解Mongo),那么只使用SQL就能获得更好的成功。