`

关系数据库和nosql设计schema时的差别的例子

阅读更多
在关系数据库中和nosql的设计时,对于schema的设计是不同的.比如MYSQL中,设计如下一个例子:

mysql> select * from people;
+----+------------+
| id | name       |
+----+------------+
|  1 | Stephane   |
|  2 | John       |
|  3 | Michael    |
|  4 | Cinderella |
+----+------------+
mysql> select * from passports;
+----+-----------+---------+-------------+
| id | people_id | country | valid_until |
+----+-----------+---------+-------------+
|  4 |         1 | FR      | 2020-01-01  |
|  5 |         2 | US      | 2020-01-01  |
|  6 |         3 | RU      | 2020-01-01  |
+----+-----------+---------+-------------+

  这个如果要转换为mongodb要如何设计呢,首先一个方法是全部放在一个collection中,如
> db.people_all.find().pretty()
{
	"_id" : ObjectId("51f7be1cd6189a56c399d3bf"),
	"name" : "Stephane",
	"country" : "FR",
	"valid_until" : ISODate("2019-12-31T23:00:00Z")
}
{
	"_id" : ObjectId("51f7be3fd6189a56c399d3c0"),
	"name" : "John",
	"country" : "US",
	"valid_until" : ISODate("2019-12-31T23:00:00Z")
}
{
	"_id" : ObjectId("51f7be4dd6189a56c399d3c1"),
	"name" : "Michael",
	"country" : "RU",
	"valid_until" : ISODate("2019-12-31T23:00:00Z")
}
{ "_id" : ObjectId("51f7be5cd6189a56c399d3c2"), "name" : "Cinderella" }


  这样的话,如果要查询people的所有信息,放在同一个collection中是很快的,当然也可以分开两个collection进行嵌套,如:
> db.people_embed.find().pretty()
{
	"_id" : ObjectId("51f7c0048ded44d5ebb83774"),
	"name" : "Stephane",
	"passport" : {
		"country" : "FR",
		"valid_until" : ISODate("2019-12-31T23:00:00Z")
	}
}
{
	"_id" : ObjectId("51f7c70e8ded44d5ebb83775"),
	"name" : "John",
	"passport" : {
		"country" : "US",
		"valid_until" : ISODate("2019-12-31T23:00:00Z")
	}
}
{
	"_id" : ObjectId("51f7c71b8ded44d5ebb83776"),
	"name" : "Michael",
	"passport" : {
		"country" : "RU",
		"valid_until" : ISODate("2019-12-31T23:00:00Z")
	}
}
{ "_id" : ObjectId("51f7c7258ded44d5ebb83777"), "name" : "Cinderella" }


  甚至可以这样:
> db.passports_embed.find().pretty()
{
	"_id" : ObjectId("51f7c7e58ded44d5ebb8377b"),
	"country" : "FR",
	"valid_until" : ISODate("2019-12-31T23:00:00Z"),
	"person" : {
		"name" : "Stephane"
	}
}
{
	"_id" : ObjectId("51f7c7ec8ded44d5ebb8377c"),
	"country" : "US",
	"valid_until" : ISODate("2019-12-31T23:00:00Z"),
	"person" : {
		"name" : "John"
	}
}
{
	"_id" : ObjectId("51f7c7fa8ded44d5ebb8377d"),
	"country" : "RU",
	"valid_until" : ISODate("2019-12-31T23:00:00Z"),
	"person" : {
		"name" : "Michael"
	}
}
{
	"_id" : ObjectId("51f7c8058ded44d5ebb8377e"),
	"person" : {
		"name" : "Cinderella"
	}
}


  如果是大部分只查询people的本身信息的话,那么建议分开两个collection存放,避免每次把不需要加载的信息加载进去了.
 
2
8
分享到:
评论

相关推荐

    数据库设计漫谈 元数据设计

    这包括定义框架结构元素、要素集和要素类、要素分类编码等,以及处理地理空间数据特有的问题,如拓扑关系和地图注记等。 #### 结论 通过对数据库设计尤其是元数据设计的深入了解,我们可以更好地管理和利用数据...

    nosql 入门教程

    4.1.1 使用关系型数据库中的表格和列 63 4.1.2 列数据库对比RDBMS 65 4.1.3 列数据库当做键/值对的嵌套映射表 67 4.1.4 Webtable布局 70 4.2 HBase分布式存储架构 71 4.3 文档存储内部机制 73 4.3.1 用内存...

    北邮国院 EBU5602 数据库 DataBase 期末复习总结

    - **EER (Extended Entity Relationship) Modelling**:扩展了传统ER模型,提供更复杂的实体、关系和属性表示,适合大型复杂系统的建模。 - **ER to Relational Model Mapping**:将ER模型转换为关系模型,这是...

    nosql-tests:一些示例代码,用于执行不同类型的NOSQL数据库

    在IT领域,尤其是在数据库管理方面,Nosql(Not Only SQL)是一种非关系型数据库技术,它与传统的SQL数据库系统有着显著的区别。 Nosql-tests项目提供了一系列的Java示例代码,帮助开发者了解并实践如何与不同类型的...

    database-schema:在.json中创建的数据库模式

    数据库模式是数据库设计的核心部分,它定义了数据库的结构、规则和关系。在JSON(JavaScript Object Notation)中创建数据库模式是一种常见的做法,特别是在NoSQL数据库系统中,如MongoDB。JSON格式因其简洁、易读且...

    PGConf.CN2019大会资料 培训PPT--4-李章梅--HugeGraph图数据库介绍及使用PostgreSQL作为后端存储

    通过对这些知识点的学习,可以帮助读者更好地理解和应用图数据库技术,尤其是在处理复杂关系网络和大规模数据集时的优势更为明显。此外,对于有兴趣深入了解HugeGraph与PostgreSQL结合使用的读者来说,还可以进一步...

    neo4j-getting-started-4.0.pdf

    Neo4j图数据库在处理高度互联的数据方面表现出色,特别适合于需要处理复杂关系和图结构的数据模型,如社交网络、推荐系统、网络拓扑结构等领域。 ### 图数据库的概念 图数据库基于图论原理,将数据抽象为顶点...

    neo4j-graphgist-2.1.6.zip

    2. **GraphGist**:GraphGist是Neo4j社区的一个创新,它允许开发者通过一个交互式的在线平台创建和分享关于如何使用图数据库解决特定问题的例子。每个GraphGist通常包括一段描述、一个或多个Cypher查询以及结果的...

    mongoose-schema-reference-sample:显示猫鼬架构引用的用法

    MongoDB是一个流行的NoSQL数据库,以其灵活性、可扩展性和高性能著称。在MongoDB中,数据以文档形式存储,这些文档由键值对组成,类似于JSON格式。Mongoose则为MongoDB提供了面向对象的接口,使得在Node.js应用中...

    spark 连接 mongodb 使用例子

    MongoDB则是一款流行的NoSQL数据库,以文档型数据存储为特点,适合处理半结构化和非结构化数据。本示例将讨论如何使用Java语言在Spark中连接MongoDB进行CRUD(创建、读取、更新和删除)操作,同时涉及到Spring框架和...

    Koa2 + mongoDB +编写的通用后台管理系统(

    6. **开发流程**:构建这样的系统通常涉及以下步骤:安装和配置环境、设计数据库模型、编写API接口、实现业务逻辑、设置路由、集成测试、部署和维护。 7. **中间件机制**:在Koa2中,中间件是一个接收请求和响应...

    HBase官方文档

    在介绍中,对HBase进行了基础的定义和描述,提到其作为一种NoSQL数据库,如何使用它存储和处理数据。快速开始则会指导新用户如何开始搭建和使用HBase。 ### 配置 HBase的配置章节涉及了基础条件、运行模式、配置...

    前端开源库-mongoose-autopopulate

    MongoDB是一个NoSQL数据库,以其灵活性、高性能和强大的数据模型而受到广泛欢迎,尤其是对于处理大规模、非结构化数据的Web应用。 ### 自动填充(Autopopulate) `mongoose-autopopulate` 库的核心功能是自动填充...

    大事件项目-API服务器

    这些模型可能使用了像Mongoose这样的ORM(对象关系映射)库,使得与MongoDB等NoSQL数据库的交互变得更加简单。在用户注册或登录时,这些模型会被用来验证和存储用户信息。 `node_modules`目录包含了项目依赖的所有...

    详解Wondows下Node.js用法MongoDB的环境配置_.docx

    MongoDB是一个流行的NoSQL数据库,而Node.js则是一种基于Chrome V8引擎的JavaScript运行环境,两者结合可以实现全栈JavaScript开发。 首先,安装Mongoose是连接Node.js和MongoDB的关键。Mongoose是一个强大的...

    Mongodb in Mycat指南

    对于NoSQL数据库的支持,如MongoDB,则是通过封装NoSQL API并基于JDBC协议来实现。 #### 二、Mycat与MongoDB集成概述 自Mycat 1.3版本起,其正式支持了MongoDB数据库的接入。这一功能的实现主要依赖于Mycat内部对...

    使用koa+mongoDB开发的Vue后台管理系统的后端相关代码.zip

    Koa.js是Node.js的一个轻量级、高效的Web框架,而MongoDB则是一个强大的NoSQL数据库,两者结合为创建灵活、高性能的后端服务提供了坚实基础。 ### Koa.js Koa.js是由Express.js团队开发的下一代Node.js Web应用...

    schemaa::rocket:快速,轻巧和灵活的基于模式的验证器和清理器

    该项目的目标是提供一种可在SQL和NoSQL数据库,传入请求,传出请求等中广泛使用的模式。 :memo: 项目目标 跨节点和浏览器工作 简单的实现(没有幕后的魔力) 轻量级<5kb gzip压缩 快速地 最小的嵌套和样板 可...

    Python Web框架Pylons中使用MongoDB的例子

    在本例子中,我们将探讨如何在Pylons框架中集成非关系型数据库MongoDB。 MongoDB是一种流行的NoSQL数据库,以其高效、灵活的数据模型和强大的文档存储能力而闻名。在Pylons中集成MongoDB,我们可以利用Ming ORM...

Global site tag (gtag.js) - Google Analytics