关系型数据和文档型 数据库有什么区别?

article/2025/11/5 23:44:12

●关系数据库(Relational Database)是建立在关系模型基础上的数据库
借助于几何代数等数学概念和方法来处理数据库中的数据
●所谓关系模型是一对一、一对多或者多对多等关系
常见的关系型数据库有Oracle、SQL Server、DB2、 MySQL 等

●文档型数据库是一种非关系型数据库.
非关系型数据库(Not Only SQL, NoSQL) 正好与关系型数据库相反
它不是建立在“关系模型”. 上的数据库
文档型数据库的典型代表是MongoDB

●关系型数据库属于早期的传统型数据库,它有着标准化的数据模型,以及事务和持久化的支持
例如,关系型数据库都会支持的ACID特性,也就是原子性(Atomicity) 、一致性(Consistency)、隔离性(Isolation) 和持久性(Durability)

  • 01原子性(Atomicity) 指一个事务中的所有操作,要么全部完成、要么全部不完成,不会存在中间的状态
    也就是说事务在正常的情况下会执行完成,异常的情况下 比如在执行的过程中如果出现问题,会回滚成最初的状态,而非中间状态
    在这里插入图片描述

关系型数据库三范式

  • 要求对属性的原子性,也就是说要求 数据库中的字段需要具备原子性 不能再被拆分
    在这里插入图片描述
  • 属性必须依赖唯一主键 例如订单详情表有这些字段:订单ID、产品ID、产品名称、产品单价、折扣 其中,订单ID和产品ID为联合主键 但这个表中的产品名称和产品单价两个字段只依赖产品ID和订单ID就没有任何关系了因此这个表也不符合第二范式.

我们可以把原来的订单表拆分为订单表和产品表,其中订单表包含:订单ID、产品ID、折扣等字段
而产品表包含:产品ID、产品名称、产品单价等字段
这样就消除了产品名称和产品单价多次重复出现的情况了,从而避免了冗余数据的产生.
在这里插入图片描述

  • 属性字段不能存在传递依赖 想要满足第三范式必须先满足第二范式 第二范式要求所有的非主键字段必须直接 依赖主键,且不存在传递依赖的情况
    在这里插入图片描述

tip : 简单理解 第二范式和第三范式的区别 第二范式 本来只有一张表的 冗余的对象 有没有提取出来设计成为另一张表(原本只有一张表,现在要拆成2张表), 第三范式 在第二范式的基础上 拆分出来的表有没有做到 只关联主键 (已经有两张表 ,有没有做到第二范式基础的上结果,即只存放另一张表的主键ID).

MongoDB 是 文档型数据库的代表

它提供了更高效的读/写性能以及可自动容灾的数据库集群,还有灵活的数据库结构
从而给系统的数据库存储带来了更多可能性
当然MongoDB的诞生并不是为了替代关系型数据库
而是为系统的快速开发提供一种可能性
它和关系型数据库是一种互补的关系
可供开发者在不同的业务场景下选择相对应的数据库类型.

非关系型数据包含了文档型数据库,文档型数据库属于非关系型数据
在这里插入图片描述

文档型数据库

  • 文档型数据库以MongoDB和Apache CouchDB为代表
  • 文档型数据库通常以JSON或者XML为格式进行数据存储
    以MongoDB为例,它是由C++编写的一种面向文档的数据库管理系统

MongoDB

MongoDB是以二进制JSON格式存储数据的,MongoDB 对JSON做了-些优化
它支持了更多的数据类型,这种二进制存储的JSON也可以称之为BSON (Binary JSON)

BSON具备三个特点:轻量、可遍历以及高效
它的缺点是空间利用率不是很理想
●MongoDB使用BSON进行存储的另一个重要原因是BSON具备可遍历性
在这里插入图片描述
“_id” 为MongoDB 默认的主键字段,它会为我们生成一起全局唯一的id值,并且这个值在做数据分,片时非常有用.

  • 敏捷开发:因为MongoDB拥有比关系型数据库更快的开发速度,因此很多敏捷开发组织 包括纽约时报等都采用了MongoDB数据库
  • 使用它可以有效地避免在增加和修改数据库带来的沟通成本,以及维护和创建数据库模型成本
    使用MongoDB只需要在程序层面严格把关就行,程序提交的数据结构可以直接更新到数据库中 并不需要繁杂的设计数据库模型再生成修改语句等过程

●MongoDB在4.0之前是不支持事务的,不支持的原因也很简单
●因为文档型数据库和传统的关系型数据库不-样,不需要满足三范式
●文档型数据库之所以性能比较高的另-一个主要原因就是
使用文档型数据库不用进行多表关联性查询,因为文档型数据库会把相关的信息存放到一张表中
●因此,无需关联多表查询的MongoDB,在这种情况下的查询性能是比较高的
●把所有相关的数据都放入-个表中,这也是MongoDB之前很长一 段时间内不支持事务的原因
它可以保证单表操作的原子性,一条记录要么成功插入,要么插入失败,不会存在插入了一半的数据
●因此,在这种设计思路下,MongoDB官方认为“事务功能”的实现没有那么紧迫
●但在MongoDB 4.0之中正式添加了事务的功能,并且在MongoDB 4.2中实现了分布式事务的功能
至此MongoDB开启了支持事务之旅

● 日志系统:使用MongoDB数据库非常适合存储日志,日志对应到数据库中就是很多个文件
而MongoDB更擅长存储和查询文档,它提供了更简单的存储和更方便的查询功能
●社交系统:使用MongoDB可以很方便的存储用户的位置信息
可以方便的实现查询附近的人以及附近的地点等功能
在这里插入图片描述
优点是效率比较高,但是不支持事物.

全文搜索型数据库

全文搜索型数据库以ElasticSearch和Solr为代表
它们的出现解决了关系型数据库全文搜索功能较弱的问题


http://chatgpt.dhexx.cn/article/DE9SpaYn.shtml

相关文章

关系型数据和文档型数据库到底有什么区别?

背景知识 关系数据库(Relational Database)是建立在关系模型基础上的数据库,借助于几何代数等数学概念和方法来处理数据库中的数据。所谓关系模型是一对一、一对多或者多对多等关系,常见的关系型数据库有 Oracle、SQL Server、DB…

Document-oriented database(文档数据库)

前言: 关系型数据库已经红火了很久,但是其弊端也是显而易见的,对于很多非结构数据以及半结构化数据很难有效地管理,而且RDBMS的固定式的Schema往往很难接受,太呆板不灵活,因此基于可自由伸缩的schema的数据…

数据库需求文档

数据库管理文档 记录人:娄雨禛 转载于:https://www.cnblogs.com/DeltaFish/p/9134329.html

关系型数据库 和 文档类型数据库 的区别

如果在使用的时候,需要频繁的去查复杂的表与表之间的关联关系时,关系型数据库更友好。 如果在使用的时候,需要频繁对数据进行读写操作时,文档类型数据库更友好。 数据类型: String:字符串      Numbe…

华为云文档数据库服务更安全

华为云文档数据库服务更安全 华为云文档数据库服务(Document Database Service)作为华为云数据库的一款明星产品,它在数据库兼容方面完全兼容了MongoDB协议,能够为我们提供安全、高可用、高可靠、弹性伸缩和易用的数据库服务&am…

开源的文档型数据库--MongoDB(安装)

1、简介 MongoDB 是一个开源的、文档数据库管理系统。它提供了高性能、高可扩展性和高可用性。 MongoDB 使用了一种称为 BSON 的二进制形式的 JSON 来存储数据。这使得 MongoDB 可以轻松地存储各种数据类型,包括大型对象和二进制文件。 MongoDB 的一个重要特性是它的…

数据库文件

数据库由 存储在 硬件设备上的信息组成。 而 mysql 、sqlist 等只是数据库系统, 在 数据库 使用者 和 储存在 硬件上面的 数据 之间建立联系的桥梁。 最终, 我们存储在数据库里面的信息会以 文件(或内存)的形式展示在操作系统上。 如 Ubuntu16.04 &a…

文档数据库-MongoDB

文章目录 前言优点MongoDB 使用广泛MongoDB 性能高MongoDB 支持分布式安装和部署容易MongoDB 便于开发 MongoDB的文档数据模型NoSQL 中的文档数据库MongoDB 文档数据模型 MongoDB的文档存储结构键值对文档集合数据库 前言 MongoDB 是一个开源文档数据库,提供高性能…

MongoDB文档数据库

一,引言 MongoDB 是一个开源的文档数据库,并是领先的NoSQL数据库。 MongoDB 是由C语言编写。 通过本系列教程的讲解,使得学习者可以了解并掌握创建和部署高度可扩展和高性能的面向对象数据库MongoDB概念和理解。 该系列教程是专为软件专业人员…

NOSQL,MongoDB是什么?

什么是MongoDB ? MongoDB 是一个开源的文档数据库,它基于 C 语言编写,性能高,可用性强,能够自动扩展。 MongoDB 是最流行的 NoSQL 数据库之一,原生支持分布式集群架构,特别适合处理大数据&…

胖人瘦下来后,会长高或变矮吗?

一个还算高的胖子,单看是不显矮的,但正所谓没有对比就没有伤害,若将他与一个跟他一般高的瘦人排在一起,就会无端显得矮了一截,当然也只是“显得”矮而已,并非真的矮。 那么,他们要是瘦下来后会…

PTA 7-40 到底是不是太胖了

很明显题目中有绝对值&#xff0c;需要调用绝对值函数。 整形绝对值&#xff1a;abs函数 双精度浮点型绝对值&#xff1a;fabs函数 长整型绝对值&#xff1a;labs函数 他们的头文件都是include<math.h>或者include<stdlib.h> 接着一个for循环就可以解决问题。…

PTA题目 到底是不是太胖了

据说一个人的标准体重应该是其身高&#xff08;单位&#xff1a;厘米&#xff09;减去100、再乘以0.9所得到的公斤数。真实体重与标准体重误差在10%以内都是完美身材&#xff08;即 | 真实体重 − 标准体重 | < 标准体重10%&#xff09;。已知市斤是公斤的两倍。现给定一群人…

[模板]详细设计说明书(整理版)【申明:来源于网络】

[模板]详细设计说明书&#xff08;整理版&#xff09;【申明&#xff1a;来源于网络】 地址&#xff1a;http://www.doc88.com/p-0724366501067.html

模板设计模式

模板设计模式—基于抽象类的&#xff0c;核心是封装算法 模板方法定义了一个算法的步骤&#xff0c;并允许子类为一个或多个步骤提供具体实现模板&#xff08;模板方法&#xff09;模式&#xff08;Servlet、AQS&#xff09; 在一个方法中定义一个算法的骨架&#xff0c;并将一…

资深码农教你写详细设计(附示例模板)

很多小伙伴都不知道怎么写详细设计&#xff0c;本期就带大家看一下详细设计都有哪些内容。 喜欢听我叨叨的&#xff0c;直接看视频 资深码农教你写详细设计&#xff08;附模板&#xff09; 不同的公司&#xff0c;详细设计不太一样&#xff0c;有的细&#xff0c;有的粗&#x…

【零基础深度学习教程第二课:深度学习进阶之神经网络的训练】

深度学习进阶之神经网络的训练 神经网络训练优化一、数据集1.1 数据集分类1.2 数据集的划分1.3 同源数据集的重要性1.4 无测试集的情况 二、偏差与方差2.1 概念定义2.1.1 偏差&#xff08;bias&#xff09;2.1.2 方差&#xff08;variance&#xff09; 2.2 图形定义2.3 衡量偏差…

深度学习小白入门教程-基础运用篇

深度学习小白入门教程-基础运用篇 可能有图片没部署成功&#xff0c;如果有影响&#xff0c;请回小主主页PyCharm玩个文本类数据二分类第一步&#xff0c;把我们可能用到的包安排上&#xff0c;还有python的标准主函数~第二步&#xff0c;导入数据集&#xff0c;cv大法就好啦~第…

深度学习(一、入门)

从人工智能开始 让机器具有人类的智能&#xff0c;能够理解人类语言、语音、图片、视频以及各种人类活动数据&#xff0c;并以此为依托辅助甚至代替人类做出决策&#xff0c;是人工智能的终极目标。最早提到机器智能的是图灵&#xff0c;1950年&#xff0c;他提出机器是否拥有…

深度学习如何入门?

beanfrog &#xff0c;computer vision 161 人赞同 先了解个大概 A Deep Learning Tutorial: From Perceptrons to Algorithms 神经网络肯定是要学习的&#xff0c;主要是BP算法&#xff0c;可以看看PRML3、4、5三章&#xff0c;可先忽略其中的贝叶斯视角的解释。一些主要的算…