【数据库】01——精通数据库需要掌握这九个维度_数据库要掌握哪些技术(1)

想象如果没有数据库,一个大学要怎么在计算机中存储学生、教师、课程等数据?

那只能够将数据存储在操作系统的文件中,并且编写对应的程序对于这些数据进行读写操作。至少需要有:

  • 增加学生、教师和课程。
  • 为课程注册学生,产生班级花名册
  • 为学生填成绩,算绩点。

当需求增多,新的应用程序就需要被加入系统中,比如学校需要开设新的专业,就业为这个专业新建新的永久性文件(或者在现有文件增加新的数据),为了满足这个新专业数据处理的特殊规则,就需要编写新的程序。久而久之,越来越多的程序和文件会被添加到操作系统。

这种文件处理系统(file-processing system)在传统操作系统中是被支持的。

它有什么问题?

  • 数据冗余与不一致。比如学生半旧的地址信息可能重复出现在音乐课和美术课的文件中,更新了音乐课中半旧的地址,又可能忘记了美术表的地址更新。
  • 数据访问困难,比如需要筛选分数超过60分的学生,就需要手动进行过滤或者编写程序完成。筛选性别为男的学生又需要重复上面的过程。
  • 数据孤立,不同的数据分布于不同的文件,并且文件的数据组织结构还可能不同,想要检索适当的数据很困难。
  • 完整性问题,比如要求每个系的财务账户余额不能小于0,需要编写对应的程序完成,这些财务数据还跨文件。问题会变得越来越复杂。
  • 原子性问题一致性问题安全性问题

总结起来就是三个特点,不好存,不好取,不安全。数据库就是为了解决这些问题的。

3.数据视图——将数据库从复杂变简单

数据的存储与维护是复杂的,对于用户当然不需要知道这些无聊枯燥的过程,数据库系统为用户提供了抽象视图,隐藏数据存储维护的某些细节。

3.1 数据模型:描述数据的方式

数据库的基础是数据模型,是一个描述数据、数据关系、数据语义和一致性约束概念工具的集合。可以分为四类。

  • 关系模型(relational model),使用表来表示数据与数据之间的联系。表也被称为关系
  • 实体、联系模型(entity-relationship model),实体是现实世界中的一件“事情”或者一个“物体”。实体-联系模型包括数据实体与数据之间的联系,在数据库设计阶段广泛应用,后续文章会详细介绍。
    在这里插入图片描述
  • 半结构化模型。结构化的数据模型可以有效的支持数据查询的响应,但是无法支持数据结构的动态修改。半结构化模型允许相同类型的数据项含有不同的属性集,比如json和xml。

半结构化模型可以有效的处理以下场景:
(1)数据缺失
例如,在公司人事档案库中,已婚雇员会有配偶项信息,而未婚的雇员则无该项信息
(2)单值和集合值属性兼容
在传统查询语言如SQL、OQL、XSQL中, 单值和集合值属性是不兼容的,即集合不能按单值处理,单值也不能按集合处理。半结构化模型可以解决该问题。
(3)查询对象类型各异
在WWW 和异构信息源集成时,会有不少内容相同而类型各异的问题。如一信息源上的电话信息是用字符串表示,而另一信息源上则可能用整数表示。有些电话信息上可能带区号,而有些则不带。又如WWW上的主页,相同实体的类型差异也很大。如主页里的朋友项,有的是用字符串给出名字,有的则带有简单描述信息或是指向其朋友的网络地址。这就要求查询处理时有宽松的类型限制或没有类型检查。
(4)异构的查询返回结果
半结构化数据的同类实体查询会出现不同的结果对象,选择语句的返回结果可能因数据源的不同而异。
(5) 查询的对象结构未知

  • 基于对象的数据模型。
    java,c++等面向对象语言成为主导的软件开发语言,工程师们通过过程已经将对象的概念很好的整合到了关系型数据库中。

关系型数据模型是大多数数据库的理论基础。

3.2 数据抽象:屏蔽复杂细节

为了能够使数据库中的数据被高效地检索,数据库的开发人员不得不使用复杂的数据结构来表示数据。而数据库的用户多没受过专业的计算机训练,需要对他们进行如下几个层次的数据抽象,让不同层次的用户关注自己这层的事情,屏蔽不需要的内容。

  • 物理层。物理层描述数据实际上是如何存储的。
  • 逻辑层。逻辑层描述存储什么样的数据以及数据之间联系。
  • 视图层。逻辑层尽管采用了相对简单的结构,但是还是具有一定的复杂性,数据库系统的用户可能并不需要这部分的数据,只需要一部分的数据,以用户友好,需要的方式展现出来。
    在这里插入图片描述
3.3 实例和模式

数据库的整体设计被成为模式(schema),这就相当于一个模板。数据库在某一个特定时刻存储的数据总和被称为实例(instance).举个栗子,数据库的模式就像是变量的定义,而变量在每个时刻都会特定的值,这个值对应是数据库模式的一个实例。

按照不同的抽象层次划分,数据库有几种模式。物理模式在物理层描述数据库的设计,逻辑模式在逻辑层描述数据库的设计,数据库在视图层也可以有几种模式,通常被称为子模式,它用于描述数据库的不同视图。一般与程序员打交道的是逻辑模式。

4.数据库语言——定义和操作数据

数据库的定义语言DDL与数据库的操作语言DML都是数据库系统的操作语言,他们都是SQL语言的一部分,关系型数据库几乎都使用SQL语言。

4.1 数据定义语言

数据定义语言DDL用来进行数据存储和定义。数据库中的数据必须满足一致性约束,常见的约束有:

  • 域约束。如,整数型、字符型、日期、时间等。
  • 引用完整性。一个course中记录的dept_name必须出现在department关系中某个记录的dept_name属性中。
  • 授权。不同的用户在数据库中的不同数据值上允许不同的访问类型。常见的是,读权限,插入权限、更新权限、删除权限。

DDL的输出会被放在数据字典中,数据字典也包含元数据,也就是关于数据的数据。数据字典可以被看做一种特殊的表,这种表只能有数据库系统本身(不是常规的用户)来访问和修改。在读取和修改实际的数据前,数据库系统先要参考数据字典。

SQL数据定义语言可以参考:

create table department
	(dept_name char(20),
	building char(15),
	bugetn numeric(12,2));

我们还可以加完整性约束,后续文章会详细介绍。

4.2 数据操作语言

DML可以对数据进行访问和操作( 增删改查)。有以下两种类型。

  • 过程化DML(procedural DML),要求用户指定需要什么数据以及如何获得这些数据。
  • 声明式的DML(declarative DML),也被称为非过程化的DML,只要用户指定需要什么数据,而不必指明如何获取这些数据。

声明式的DML通常更加易学易用,由于用户不指明如何获得数据,数据库系统必须要提供一种访问数据的高效途径。

最常用的数据库查询语言SQL是非过程化的。举个栗子,一个常见的SQL查询语句如下。

select instructor.name
from instructor
where instructor.dept_name = 'History';

4.3 从应用程序访问数据库

很显然,sql语句只可以下发给数据库进行数据的访问与操作,对于从用户输入数据,输出到显示器或者网络上等活它不管,需要高级宿主语言比如C、C++,JAVA来完成。高级宿主语言要想和将SQL指令发送给数据库,数据库就必须提供接口。对于C语言等其他几种语言,开放数据库连接(ODBC)标准定义提供了接口,JDBC标准为java语言提供了相应的接口。

5 数据库设计有哪些步骤

数据库的设计需要考虑很多问题,但主要是数据库模式的设计,这里我们将讨论数据库模式的设计和查询语句的编写。
(1)需求确定。数据库设计的初始阶段是和领域专家、数据库用户充分讨论,形成数据库用户需求说明书文档,说明数据库用户的数据需求,以及将怎样构造数据库用户满足这些需求。
(2)概念设计。下一步,设计者要选择一个数据模型,将需求转换成一个数据库的概念模式,形成企业的详细综述,再复审这个模式,确保满足所有的数据需求并且需求之间没有冲突。
从关系模型角度,这个阶段还需要涉及数据库应该包含哪些属性,以及如何组织这些属性到各个表中。前者主要是决策,后者主要是计算机科学问题,解决方法主要有两种,一种是使用实体-联系模型,另一种是使用一套算法,后续我们将详细介绍。
一个开发完整的概念模式还将指出企业的功能需求。也就是用户需要做哪些增删改查,进行复审,确保其满足需求。
(3)逻辑设计。将高层的概念映射到要实现的数据库系统的系统模型上。
(4)物理设计。说明数据库的物理特性,包括文件的组织形式和内部存储特征。

6.数据库引擎——如何存储、查询并保证数据安全

数据库系统大致可以分为以下功能模块:存储管理器、查询处理器和事务管理部件。

数据库的存储管理十分重要,因为企业数据库的大小通常达到数百个gigabyte(千兆字节),甚至达到terabyte(万亿字节)。最大的企业数据库规模达到数个petabyte(千万亿字节)。计算机主存存储不了这么多信息,而且系统奔溃时主存会丢失,因此,信息被存储在磁盘中。从磁盘读取数据速度是很慢的,因此,固态硬盘也被越来越多的应用到了数据库的存储中。

查询处理器也很重要,他简化和促进了用户对数据的访问,使得用户能够获得很高的性能,同时有不必要了解系统实现的物理层细节和负担。

事务处理器同样也很重要,它使应用开发人员能够把一系列的数据库操作当作一个单元来看待,保证数据的安全性。、

传统的数据库引擎是集中式的计算机系统,而现代数据库引擎则非常注重并发数据存储和并发查询处理。

6.1 存储管理器

存储管理器是存储数据,并对应用程序以及向系统提交的查询之间的提供查询接口的部件。它主要负责数据库中数据的存储、检索和更新。

存储管理器部件主要包括。

  • 权限及完整性管理器。检测用户访问权限与数据是否满足一致性约束。
  • 事务管理器。保证即使系统发生了故障,数据库也保持在一致状态。并且保证并发事务的执行不发生冲突。
  • 文件管理器。管理磁盘存储空间的分配,管理用于磁盘上所存储信息的数据结构。
  • 缓冲区管理器。负责将数据从磁盘上取到内存中,并决定哪些数据应该被缓冲存储在内存中。
  • 数据文件(data file)。存储数据库自身。
  • 数据字典(data dictionary)。它存储关于数据库结构的元数据,特别是数据库模式。
  • 索引。更快的访问数据。
6.2 查询处理器

查询处理器包括。

  • DDL解释器。解释DDL并将其记录在数据字典中。
  • DML编译器。翻译DML语句为存储引擎能够理解的低级指令。它还执行查询优化,选出代价最小的执行计划。
  • 查询执行引擎。执行 DML编译器产生的低级指令。
6.3 事务管理

事务的原子性和持久性都是数据库系统的自身职责,确切的说,是恢复管理器的职责。如果事务总能被成功的执行,那么自然可以保证原子性。但是如果一系列的事务不总成功被执行完毕,为了保证原子性,失败的事务不应该对数据库产生任何影响,在这种情况下,数据库系统需要进行故障恢复,也就是它必须检测系统故障并且将数据库恢复到故障发生以前的状态。

另外,当几个事务并发对数据库进行更新时,即使每个单独的事务是正确的,对数据库的一致性也可能被破坏。并发控制管理器控制并发事务间的相互影响。保证数据库的一致性。事务管理器包括并发控制管理器和恢复管理器。

7 数据库的应用体系结构

现在我们终于可以来给出数据库的体系结构图了。
在这里插入图片描述
上面的数据库体系结构是集中式的。虽然有多个cpu进行并行存储,但是所有cpu都i访问一个公共的共享内存。为了扩展到更大的数据库规模和更高的处理速度,研究人员又设计了包括多台机器的集群上的并行数据库(paraller database)。

8 数据库用户和管理员

8.1 数据库用户和用户界面

数据库系统把用户分成了四种,不同用户访问不同类型的数据库界面。

  • 初学者用户。提供典型的表格界面。
  • 应用程序员,提供工具共应用程序员开发用户界面。
  • 老练用户。不需要编写程序来同系统交互。提供查询语句或者数据分析软件。

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

-1714446883124)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 19
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值