您将如何在NoSql数据库中对customer> order> ordertem> product进行build模?

我目前正在学习Node.JS,需要实现一个数据库。 所有的Node书籍似乎都认为MongoDB是最好的解决scheme,但似乎无法摆脱像Mongo和Couch这样的NoSQL数据库,我是MS SQL Server的家伙!

所以,我明白,你可以保持结构化的数据作为logging(JSON),但我不知道你如何build模一个典型的电子商务应用程序与以下(简化)表…

customers (id, name, address) orders (id, customerID, orderDate) orderItems (id, orderID, productID) products (id, title, description, image) 

所以,通常我会写这样的查询(但显然更好地优化)….

 SELECT Customers.name, Products.title FROM (orders INNER JOIN customers ON orders.customerID = customers.id) INNER JOIN orderItems ON orderItems.orderID = orders.id INNER JOIN products ON orderItems.productID = products.id 

如果我能看到一个如何在NoSQL数据库中工作的例子,那么我可能会开始“得到它”。

或者,我只是坚持使用MSSQL服务器或MySql,它们都与Node兼容吗?

为MongoDBdevise模式时,一个重要的考虑因素不是数据是什么,而是如何使用它。 如果不研究你将要做什么types的读写操作(以及它们将如何执行),devise一个“最佳”模式可能很困难。

有一些基本的准则,你可以考虑避免遇到问题。 其中之一就是避免devise不断增长的文件。 这意味着您不应该将订单embedded到客户文档中。 另一个规则是,那些自己不是“有兴趣”的东西(或者不是自己存在的东西)可能更好地embedded其中。 这表明orderItems不值得他们自己的collections,应该简单地被视为订单的属性(事实就是这样)。

MongoDB开发人员培训涵盖了这个确切的练习,是模式devise的一个非常典型的例子。

底线是你应该有三个集合:

制品
顾客
命令

订单将引用客户(可select非规范化来自客户收集的一些信息),他们将参考产品(在它们将包含的orderItems的数组中)。

所有这些集合中的更多集合和确切的字段取决于您的具体用例,但是我看不到一个可行的scheme比这三个集合有更less的集合。

Mongo使用集合,你可以把这些集合关联到“表”,所以你可以在这里有4个集合。 但是请注意,没有理由不能将“订单”和“订单项”合并到“订单”中,因为您需要考虑每个条目可以更多地是可以通过RDBMS实现的文档。

沙发是不同的,你只需存储文件。 在这种情况下,您可能会将每个文档都标记为文档的“types”。 然后你可以创build视图函数,它可以通过map / reduce返回你需要的数据。

有了这些,不要太在一个查询中做任何事情,因为这并不总是可能的。

关键是这里没有单一的“NoSQL”方法,与SQL是统一体的RDBMS不同。 每个数据库和NoSQL存储的types都有其优点和缺点,您需要确定最适合您的是什么。

希望这可以帮助。