您好我对同一主题感到困惑。例如在我的场景中。如果我有一个用户表和另一个表用于订单。我在nosql数据库中下了订单,那么我该如何在订单中维护用户信息表
提前致谢
答案 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 models和denormalizing data上有一些非常好的文章,并使用嵌入式文档和one to many关系重新思考one-to-several关系的想法。< / p>
通常,大多数NoSQL实现对于连接都不是很好。因此,我们通常最终在应用程序层执行“类似连接”的工作,而不是数据库层,以保持系统以闪电般的速度运行。
它还有很多(例如 - 用于更新非规范化数据的模式),但这是你问题的要点。尝试在订单对象中嵌入足够的用户对象,以满足90%的订单查询需求。然后,将“完整”用户数据存储在用户表中。
希望这有用!