你将如何模型客户>订单> ordertem>产品在NoSQL数据库?(How wo

2019-08-04 03:50发布

我目前正在学习的Node.js和需要实现一个数据库。 所有的节点书籍似乎认为MongoDB是最好的解决办法,但我似乎无法让我的周围NoSQL数据库一样蒙戈和沙发的头,我的MS SQL Server的家伙!

所以,我明白,你可以保持结构化的数据记录(JSON),但我不知道怎么你一个典型的电子商务应用具有以下(简化)表模型...

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 Server或MySQL的坚持,这两者都是兼容的节点呢?

Answer 1:

设计MongoDB的架构时的一个重要考虑是不是你的数据是什么,但你会如何使用它。 如果没有制定什么类型的读取和写入你会做(以及如何高性能他们会),它可以是很难设计“最佳”模式。

有迹象表明,你可以考虑以避免这类问题的一些基本准则。 其中之一是避免设计其保持增长无限的文件。 这意味着你不应该嵌入到订单客户文档。 另一条规则是,那都不算事“利益”自己(或不上自己的存在)可能是更好嵌入。 这表明的OrderItems配不上自己的收藏,应该简单地作为订单的属性处理(这是它们是什么,其实)。

这种精确的运动是覆盖在MongoDB的开发人员培训,是架构设计的一个非常典型的例子。

底线是,你应该有三个类别:

制品
顾客
命令

订单将参考客户(可选非规范化的客户收集一些资料),他们会参考产品(的OrderItems的阵列它们含有)。

另外收藏,并在所有这些集合的具体领域取决于具体的使用情况,但我看不出一个可行的方案有比这三个集合少。



Answer 2:

蒙戈使用集合,其中你能有所关联到“表”,所以你可以有4收藏在这里。 但是请注意,我们没有理由你不能结合“订单”和“订单项目”逼到“订单”,因为你需要考虑每个条目可以多文件,你可以用RDBMS的实现。

沙发是不同的,在那里你只需存储文档。 在这种情况下,你可能会标志和它是什么“类型”的文件每个文档。 然后,您可以创建视图功能,可以返回您通过地图需要的数据/减少。

与任何这些,不要太挂在一个查询中所做的一切,因为它并不总是可能的。

这里关键的一点是没有单一的“的NoSQL”的方法来此,不同于RDBMS其中SQL是统一者。 NoSQL的商店的每一个DB和类型都有加分和缺点,你需要确定你最适合的是什么。

希望这可以帮助。



文章来源: How would you model customer > order > ordertem > product in NoSql database?