数据库概论

目录

  • 什么是数据库
  • 数据库的概念模型
    • 层次模型
    • 网状模型
    • 关系模型
  • 为什么要使用关系型数据库
  • 完整性约束
  • 结构化查询语言SQL
    • 基本语句

什么是数据库

考虑这些问题:当用户使用软件计算时,如果想要保存计算结果或者想选择不同的题目,是否要保存、读取多个不同的文件呢?这样的效率高吗?这种数据管理策略合适吗?假设有上万套练习题时,是否需要保存上万个文件呢?
很明显,我们需要数据库的帮助。在信息化社会,充分有效地管理和利用各类信息资源,是进行科学研究和决策管理的前提条件。
数据库技术是管理信息系统、办公自动化系统、决策支持系统等各类信息系统的核心部分,是进行科学研究和决策管理的重要技术手段。
数据库时长期存储在计算机内、有组织、可共享的大量数据的集合。它的目的是提供一种可以方便、高效管理数据库信息的途径。
数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。

数据库是“按照数据结构来组织、存储和管理数据的仓库”。在经济管理的日常工作中,常常需要把某些相关的数据放进这样“仓库”,并根据管理的需要进行相应的处理。

例如,企业或事业单位的人事部门常常要把本单位职工的基本情况(职工号、姓名、年龄、性别、籍贯、工资、简历等)存放在表中,这张表就可以看成是一个数据库。

有了这个"数据仓库"就可以根据需要随时查询某职工的基本情况,也可以查询工资在某个范围内的职工人数等等。这些工作如果都能在计算机上自动进行,那的人事管理就可以达到极高的水平。

此外,在财务管理、仓库管理、生产管理中也需要建立众多的这种“数据库”,使其可以利用计算机实现财务、仓库、生产的自动化管理。

J.Martin给数据库下了一个比较完整的定义:数据库是存储在一起的相关数据的集合,这些数据是结构化的,无有害的或不必要的冗余,并为多种应用服务;数据的存储独立于使用它的程序;对数据库插入新数据,修改和检索原有数据均能按一种公用的和可控制的方式进行。

当某个系统中存在结构上完全分开的若干个数据库时,则该系统包含一个“数据库集合”。

数据库的概念模型

aws数据库服务一览图

层次模型

优点:

数据结构简单清晰。
因为记录之间的联系用有向边表示,这种联系在DBMS中通常使用指针实现,查询效率高。层次模型数据库性能优于关系数据库,不低于网状数据库。
提供了良好的完整性支持。进行插入操作时,如果没有对应的双亲结点就不能插入它的子女结点值。进行删除操作时,如果删除双亲结点,则相应的子女结点值也将被同时删除。
缺点:

现实世界中的很多联系是非层次性的。如果结点之间具有多对多联系,不再适合使用层次模型表示。如果一个子女结点确实具有多个双亲结点,使用层次结构模型表示的时候就会出现大量的冗余,且操作复杂。
查询子女结点必须通过双亲结点。
由于结构严密,层次命令趋于程序化。

网状模型

优点:

能够更为直接地表示现实世界。
具有良好的性能,存取效率高。
缺点:

结构复杂,伴随应用环境的扩大,数据结构变得越来越复杂,不利于最终用户掌握。
网状模型的数据定义语言和数据管理语言复杂。
由于记录之间的联系通过存取路径实现,应用程序在访问数据的时候必须选择恰当的存取路径,因此用户必须了解系统结构的细节,导致加重了编写应用程序的负担。

关系模型

优点:

关系模型建立在严格的数学概念的基础之上。
关系模型概念单一。无论是实体还是实体之间的联系都用关系来表示。对数据的检索和更新结果也是基于关系(表)的。所以,数据结构简单清晰,用户易懂易用。
关系模型的存取路径对用户透明,从而具有较高的数据独立性,更好的安全保密性,也简化了程序员的工作和数据库开发建立的工作。
缺点:

由于存取路径对用户是透明的,查询效率往往不如格式化数据模型。
为了提高系统性能,数据库管理系统必须对用户的查询请求进行优化。

为什么要使用关系型数据库

关系型数据库的优势:

便于理解:二维表构造非常贴近逻辑;
应用方便:支持通用的SQL(结构化查询语言)语句;
易于维护:全部由表结构组成,文件格式一致;
复杂操作:可以用SQL句子多个表之间做非常繁杂的查询;
事务管理:促使针对安全性性能很高的数据信息浏览规定得到完成。
关系型数据库存在的不足

读写性能差,尤其是海量信息的效率高读写能力;
固定不动的表构造,灵便度稍欠;
高并发读写时,硬盘I/O存在瓶颈;
可扩展性不足,不像web server和app server那样简单的添加硬件和服务节点来拓展性能和负荷工作能力。
非关系型数据库概念介绍
非关系型数据库:指非关系型的,分布式系统的,且一般不确保遵照ACID标准的数据储存系统。

非关系型数据库算是一种数据结构化储存的集合,可以是文档或键值对等。

非关系型数据库的本质是传统关系型数据库的功能阉割版本,通过去掉不需要的功能来提高性能。

非关系型数据库的类型:

键值储存数据库
列储存数据库
文档型数据库
图数据库
非关系型数据库的优点

格式灵活:数据存储格式非常多样,应用领域广泛,而关系型数据库则只适用基础的关系模型。
性能优越:NOSQL是根据键值对的,不用历经SQL层的分析,因此 性能非常高。
可扩展性:基于键值对,数据之间耦合度极低,因此容易水平扩展。
低成本:非关系型数据库部署简易,且大部分可以开源使用。
非关系型数据库的不足:

不支持sql,学习和运用成本比较高;
无事务处理机制;
数据结构导致复杂查询不容易实现。
关系型与非关系型数据库的区别:
成本:Nosql数据库易部署,不用像Oracle那般花费较高成本选购。
查询速率:Nosql数据库将数据储存于缓存当中,不用历经SQL层的分析;关系型数据库将数据储存在电脑硬盘中,查询速率远不如Nosql数据库。
储存格式:Nosql的储存文件格式是key,value方式、文本文档方式、照片方式这些,能储存的对象种类灵活;关系数据库则只适用基础类型。
可扩展性:关系型数据库有join那样的多表查询机制限定造成拓展性较差。Nosql依据键值对,数据中间沒有耦合度,因此容易水平拓展。
数据一致性:非关系型数据库注重最终一致性;关系型数据库注重数据整个生命周期的强一致性。
事务处理:SQL数据库支持事务原子性粒度控制,且方便进行事务回滚;NoSQL也支持事务处理,但可靠性不足,其价值在于可扩展性和大数据量处理。

其实说白了,人总是在为了方便自己而做一些事情的,在大多数使用场景中,关系型数据库更方便更好理解

完整性约束

数据完整性
要想了解这三类完整性约束首先要了解什么是数据完整性。
数据完整性是指数据库中存储的数据是有意义的或正确的,和现实世界相符。关系模型中三类完整性约束:
– 实体完整性(Entity Integrity)
– 参照完整性(Referential Integrity)
– 用户定义的完整性(User-defined Integrity) •
实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性,应该由关系系统自动支持

实体完整性
• 保证关系中的每个元组都是可识别的和惟一的 • 指关系数据库中所有的表都必须有主键,而且表中不允
许存在如下记录:
– 无主键值的记录
– 主键值相同的记录
• 原因:实体必须可区分
例如:
在这里插入图片描述

上图就出现了主键值(学号是主键)重复的情况。当在表中定义了主键时,数据库管理系统会自动保证数据的实体完整性,即保证不允许存在主键值为空的记录以及主键值重复的记录。

参照完整性
也称为引用完整性
• 现实世界中的实体之间往往存在着某种联系,在关系模型中,实体以及实体之间的联系都是用关系来表示的,这样就自然存在着关系与关系之间的引用
• 参照完整性就是描述实体之间的联系的
• 参照完整性一般是指多个实体或关系之间的关联关系
在这里插入图片描述

此完整性涉及到了外键:
• 参照完整性规则就是定义外键与被参照的主键之间的引用规则
• 外键一般应符合如下要求:
– 或者值为空
– 或者等于其所参照的关系中的某个元组的主键值

用户定义完整性
• 也称为域完整性或语义完整性
• 是针对某一具体应用领域定义的数据约束条件
• 反映某一具体应用所涉及的数据必须满足应用语义的要求
• 实际上就是指明关系中属性的取值范围,防止属性的值与应用语义矛盾
• 关系模型应提供定义和检验这类完整性的机制,以便用统一的系统方法处理它们,而不要由应用程序承担这一功能

结构化查询语言SQL

结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。

基本语句

结构化查询语言包含6个部分:
1、数据查询语言(DQL: Data Query Language):其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其它类型的SQL语句一起使用。
2、数据操作语言(DML:Data Manipulation Language):其语句包括动词INSERT、UPDATE和DELETE。它们分别用于添加、修改和删除。
3、事务控制语言(TCL):它的语句能确保被DML语句影响的表的所有行及时得以更新。包括COMMIT(提交)命令、SAVEPOINT(保存点)命令、ROLLBACK(回滚)命令。
4、数据控制语言(DCL):它的语句通过GRANT或REVOKE实现权限控制,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。
5、数据定义语言(DDL):其语句包括动词CREATE,ALTER和DROP。在数据库中创建新表或修改、删除表(CREATE TABLE 或 DROP TABLE);为表加入索引等。
6、指针控制语言(CCL):它的语句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。

大概就是以上内容,简单阐述了一下关于关系型数据库的内容,如果想了解更多可以阅读这篇文章
tink

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/127537.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用云计算和微服务架构开发可扩展的同城外卖APP

如今,同城外卖APP已经成为了人们点餐的主要方式之一。然而,要构建一款成功的同城外卖APP,不仅需要满足用户的需求,还需要具备可扩展性,以适应快速增长的用户和订单量。 一、了解同城外卖APP的需求 在着手开发同城外卖…

设计模式(23)解释器模式

一、介绍: 1、定义:解释器(Interpreter)模式是一种对象的行为模式。给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 2、组成结构: (1&…

vue项目打包时按一定的名称规范生成对应的压缩包

在项目部署中经常需要将打包的dist按一定的名称压缩成压缩包,今天记录一下打包时生成压缩包的过程。其中有用到的npm包需要自己安装一下。 js文件放置的目录如下 compress.js内容如下: // compress.jsimport fs from "fs"; import shell fro…

外网远程登录之 NAT server

案例: 外网远程登录内网SW: 需求 1.内网的PC都可以访问Server1 2.外网的R2可以远程登录SW1, 用户名和密码是:HCIE/hehe 需求 1.内网的PC都可以访问Server1 2.外网的R2可以远程登录SW1, 用户名和密码是:HCI…

HTML5<canvas>

HTML5<canvas>元素用于图形的绘制&#xff0c;通过脚本&#xff08;通常是JavaScript&#xff09;来完成。<canvas>标签只是图形容器&#xff0c;必须使用脚本来绘制图形。 1)、<canvas> 创建一个画布&#xff1a; <canvas id"myCanvas" widt…

PyTorch入门学习(十):神经网络-非线性激活

目录 一、简介 二、常见的非线性激活函数 三、实现非线性激活函数 四、示例&#xff1a;应用非线性激活函数 一、简介 在神经网络中&#xff0c;激活函数的主要目的是引入非线性特性&#xff0c;从而使网络能够对非线性数据建模。如果只使用线性变换&#xff0c;那么整个神…

OpenCV 笔记(4):图像的算术运算、逻辑运算

Part11. 图像的算术运算 图像的本质是一个矩阵&#xff0c;所以可以对它进行一些常见的算术运算&#xff0c;例如加、减、乘、除、平方根、对数、绝对值等等。除此之外&#xff0c;还可以对图像进行逻辑运算和几何变换。 我们先从简单的图像加、减、逻辑运算开始介绍。后续会有…

文件fd.

共识原理: 1.文件 内容 属性 2.文件分为打开的文件 和 没打开的文件 3.打开的文件: 谁打开? 进程! ----本质是研究进程和文件的关系! 根据冯诺依曼原理&#xff0c;文件被打开&#xff0c;必须先被加载到内存&#xff01;不然CPU怎么访问它 那么是文件内容被加载&#xff…

redis如何保证和mysql数据的一致性

Redis和MySQL是两种不同的数据库系统&#xff0c;它们在数据一致性方面有不同的特点和应用场景。保证Redis和MySQL数据的一致性通常需要考虑以下几个方面&#xff1a; 双写策略&#xff1a; 一种常见的方法是采用双写策略&#xff0c;即将更新操作同时写入Redis和MySQL。这确保…

JS计算中出现无限小数位的情况

原因分析&#xff1a; 在开发中遇到了浮点数转换为百分数的问题&#xff0c;用浮点数乘以100结果产生了一堆小数位。查资料发现原因是由于计算机计算会先把数字转换成二进制计算&#xff0c;然后在转换为10进制&#xff0c;导致精度丢失。 在计算机角度&#xff0c;计算机算的…

系列七、Mybatis的二级缓存

一、概述 Mybatis的二级缓存是多个sqlSession共享的&#xff0c;其作用域是mapper的同一个namespace&#xff0c;不同的sqlSession执行两次相同的查询&#xff0c;mybatis会将第一次执行完的数据放到二级缓存中&#xff08;坑&#xff1a;需要执行close操作&#xff0c;要不然不…

C#学习系列之虚方法和多态

C#学习系列之虚方法和多态 啰嗦设计原则&#xff08;六大类其中之一&#xff09;基类的引用使用 共性与差异虚方法和多态的武器使用 其他总结 啰嗦 基础学习。 设计原则&#xff08;六大类其中之一&#xff09; **依赖倒置原则&#xff1a;**依赖抽象类&#xff0c;不依赖具体…

通过Python脚本支持OC代码重构实践(二):数据项提供模块接入数据通路的代码生成

作者 | 刘俊启 导读 在软件开发中&#xff0c;经常会遇到一些代码问题&#xff0c;例如逻辑结构复杂、依赖关系混乱、代码冗余、不易读懂的命名等。这些问题可能导致代码的可维护性下降&#xff0c;增加维护成本&#xff0c;同时也会影响到开发效率。这时通常通过重构的方式对已…

创建ABAP数据库表和ABAP字典对象-使用基本类型增加账号字段03

新增字段 现在你将增加字段&#xff1a;account_number,基于基本类型 1.输入以下内容(包括句点)&#xff0c;然后选择“代码补全”(Ctrl空格): key account_number : abap.2.从下拉列表中选择numc(len)并指定len为8。另外&#xff0c;指定这个关键字段为not null: key accoun…

频频让“智造大佬”们追加投资,长沙凭啥?

文 | 智能相对论 作者 | 范柔丝 自2021年长沙将每年11月1日确定为长沙“企业家日”后&#xff0c;今年已到了第三个长沙“企业家日”。 在完美闭幕的2023年第三届长沙“企业家日”活动中&#xff0c;长沙发布了民企研发投入增量10强、湘商回归标志性项目10强、湘商回归突出贡…

网络综合和简化实频理论学习概述

0、网络综合和简化实频理论学习概述 1、电路综合原理与实践—电抗函数的综合原理 介绍了策动点阻抗函数的综合方法&#xff08;考尔Ⅰ型和Ⅱ型、福斯特Ⅰ型和Ⅱ型、考尔Ⅰ型和Ⅱ型&#xff09;&#xff0c;并给出了基于策动点阻抗函数的综合示例和Matlab代码 2、电路综合原理…

sql server数据库跟踪——SQL Server Profiler解析

工具&#xff1a; SQL Server Profiler这个工具是SQL Server数据库自带的语句执行跟踪工具&#xff0c;常使用于分析软件修改数据库时所执行的语句&#xff0c;适合用来研究软件运行数据库的原理。 打开方式&#xff1a; 本机安装了SQL server的话&#xff0c;都是自带的。直接…

useEffect如何模拟生命周期?

文章目录 前言介绍后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;react.js &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果出现错误&#xff0c;感谢大家指出)&am…

hdlbits系列verilog解答(优化32位加法器)-27

文章目录 一、问题描述二、verilog源码三、仿真结果一、问题描述 行波进位加法器(参见前一个练习)的一个缺点是,加法器计算执行的延迟(在最坏的情况下,从最初进位开始)相当慢,并且第二级加法器在第一阶段加法器完成之前无法开始计算其执行。这会使加法器变慢。其中一项…

java读取.properties文件,通过key获取value

1.将xx.properties文件放置在src/main/resources/config目录下&#xff08;config是自己建的目录&#xff09; 2. 通过ApplicationHome类获取target路径 ApplicationHome applicationHome new ApplicationHome(this.getClass());String path applicationHome.getSource().ge…