如何在noSql数据库中建模数据

时间:2018-04-23 14:41:01

标签: mongodb nosql couchdb

您好我对同一主题感到困惑。例如在我的场景中。如果我有一个用户表和另一个表用于订单。我在nosql数据库中下了订单,那么我该如何在订单中维护用户信息表

提前致谢

3 个答案:

答案 0 :(得分:5)

SQL和NoSQL是完全不同的数据库概念。我们称之为"表"在SQL中被" collections"和我们称之为" rows"在表中被"文档"。

取代

明确地记住这个概念,很容易理解NoSQL数据库是如何工作的。

你有类似于SQL的CRUD操作,你不会有连接,主键和外键关系等概念。

数据以JSON / BSON的形式存储,就像从任何形式的客户端收到的原始javascript对象一样。(无论是android还是webapp)。

所以SQL表由(例如):

组成
NAME|ADDRESS|AGE|SALARY
ABC |XYZ    |23 |50000
NoSQL Collection中的

成为:

{
    "NAME":"ABC",
    "ADDRESS":"XYZ",
    "AGE":23,
    "SALARY":50000
}

因此,要回答有关如何更新订单表中的用户名的问题,您必须提出完全不同的架构。我们在这里使用嵌套对象的概念。

在NoSQL场景中,您的用户"集合"将具有用户作为字段在您的用户集合中作为嵌套对象的订单列表。因此,如果您更新用​​户"集合"中的用户名,就可以对用户迄今为止所做的所有订单执行更新操作。

所以你的架构看起来像(例如):

{
  username:"abc",
  orders:[{
             order_number:1,
             order_name:"abcd"
          },
          {
             order_number:2,
             order_name:"xyza"
          }]
 }

Mongodb是您可以获得的最简单的NoSQL数据库形式。这是深入了解NoSQL的一个很好的起点。

有关如何使用mongodb的更多信息,请查看以下内容:https://docs.mongodb.com/

答案 1 :(得分:1)

您可以为订单表创建数据模型以获取用户表值。您可以拉出当前用户,并将订单中的信息推送到订单表中。如果没有当前用户,您可以创建一个查询以从用户表中提取用户数据,并将其与订单数据一起推送到订单表中。

答案 2 :(得分:1)

首先,迁移到NoSQL可能是一个挑战,但如果您将数据模型视为更多的对象模型,那么最好。不确定你用的是什么,所以我会给你一个简短的答案和一个很长的答案。

简答

考虑将用户数据的子集放在订单对象中:

{ OrderId: 123, 
  OrderDate:'2018-08-01', 
  User: {
    Id: 1234, 
    UserName:'Joe Smith', 
    City: 'Chicago',
    (etc)
  }
}

您可以为“完整”用户数据创建另一个表格(例如 - 身份证,姓名,密码等),但将您将在订单相关查询中使用的用户数据放入其中订单本身。

长答案

NoSQL颠覆了关系数据的一些核心概念。这些差异使NoSQL非常快。当你转向NoSQL时,你必须克服的一个非常重要的心理障碍是“非规范化”的概念。

NoSQL data modelsdenormalizing data上有一些非常好的文章,并使用嵌入式文档和one to many关系重新思考one-to-several关系的想法。< / p>

通常,大多数NoSQL实现对于连接都不是很好。因此,我们通常最终在应用程序层执行“类似连接”的工作,而不是数据库层,以保持系统以闪电般的速度运行。

它还有很多(例如 - 用于更新非规范化数据的模式),但这是你问题的要点。尝试在订单对象中嵌入足够的用户对象,以满足90%的订单查询需求。然后,将“完整”用户数据存储在用户表中。

希望这有用!

相关问题