(一) 引言

当你登录你的QQ账号和别人吹水的时候,当你期末交作业去度娘复制的时候,当你在工作中登录一些网站的时候,再比如当你查看自己几乎没有什么余额的银行卡的时候(捂脸),或许自己也没注意,(非需要,大部分人也不想注意哈哈哈)我们一直都在以某种方式与数据库打交道,或许你是一个开发人员,也或许你只是一个普通的用户,这一篇是我去年就一直想写的文章,但是也没个合适的机会,这一段时间加班加点写出来,同时最近想要更新的一系列文章,主要针对数据库理论知识,后面我把去年写过的 MySQL 文章也会对应的重新整理一遍

注:这篇文章重点还是偏理论,比较适合数据库的新手,或者具有一定实操基础的小伙伴,

既然你都打开这篇文章了,那你就注定不是一个村民,这一局我们跳 Java 程序员!

开发学习中,想满足一些需求,与数据打交道这可太频繁了,如何存储这些数据就是你考虑的问题了,当然不考虑性能,管理、安全等等,你的选择可就多了,存个 txt,存个xml,甚至还可以存个excel等等,有位新手朋友曾经问过我这样一个问题 “他在学习IO的一些技术的时候,常常会简单的保存一些数据到 .txt 文件中,为什么还需要数据库呢?”,这样的一些小Demo,大家在Java基础的学习中应该都是做过的,那么我们下面就从这个问题讲起~

(二) 为什么使用数据库?

(1) 查询速度

假定我们将数据全部存储在一个普通文件中(data.txt)_(以逗号间隔)

......
"Eminem",male,1972,"USA"
"Rihanna",female,1988,"Barbados"
"Taylor Swift",1989,female,"USA"
"Aavril Lavigne",1984,female,"Canada"
......

如果在我们的数据极为庞大的情况下,我们需要查询其中的一些数据,例如,查询Eminem的国籍,我们一般会使用遍历,但是毫无疑问,这个响应时间会变得极其缓慢,但是使用数据库后,它所提供的一些索引技术等就可以解决这样的问题

(2) 数据完整有效

"Rihanna",female,1988,"Barbados"
"Rihanna",female,1995,"USA"

如果数据中出现了重名的情况,又如何判断是不是同一个人呢?

如果data.txt文件中的数据被错误的修改,例如出生年份被修改为其他类型字符串这种无效表达怎么办?

或许你可以在程序中写一些逻辑判断语句进而筛选处理这些问题,但是仍旧在数据较为庞大的情况下,会出现各种各样的问题,增加了开发者的开发难度,而数据库本身就制定了一些约束,从而保证了数据的完整且,有效,从而使开发者只需要更加注重于程序本身的设计,而不用花费过多的时间去处理数据上的一些细节问题

(3) 数据共享

常用来简单存储数据的 txt/excel 等均属于单一文件,并且都是无法共享的,只支持当前用户使用并且修改

数据库允许用户共享,不同的用户可以同时存取数据库中的数据,用户也可以用各种方式通过接口使用数据库,并提供数据共享

(4) 数据的安全性

在我们前者中,数据的修改是很随意的
但是在实际开发中,我们有时候需要面临,多个用户检索、修改同一文件中的数据,或者在并发情况下,写同一文件或者记录,而数据库基于锁等的一些技术便可以帮助我们解决这些问题

(5) 故障恢复

由于逻辑或者物理上的错误,导致了系统的错误操作,从而使得数据被破坏,如何快速恢复数据,我们上面的单一文件系统显然无法帮助我们解决问题,而数据库却有相关机制去弥补、处理相关问题

上面我们仅仅从几个常见的点分析了为什么使用数据库,当然远远不止这些,所以总的来说就是数据库其特殊的存储以及管理方式,既提高了效率,也极大的减少了开发人员的负担

总结一下:数据库 em... 是个好东西!

(三) 数据库系统概述

(1) 四个基本概念

A:数据(Data)

数据是信息的表现形式和载体,同样也是数据库中存储的基本对象

数据的定义:描述事物的符号记录

数据的种类:文本、图形、图像、音频、视频、学生的档案记录、货物的运输情况等

数据的语义:数据的含义称为数据的语义,数据与其语义是不可分的,这同样呼应了前面所说:“ 数据是信息的表现形式和载体 ”

B:数据库(Database)

定义:数据库(Database,简称DB)是长期储存在计算机内、有组织的、统一管理的、可共享的大量相关数据的集合

简单点说:数据库就是一个以某种有组织的方式存储的数据集合(理解为数据的仓库也可以),并且能为各种用户共享

特别特别要注意一点:例如 MySQL 、Oracle 等数据库软件不能被称作数据库,他们确切的叫法是 DBMS(数据库管理系统),当然了我们口语一般都习惯了,叫XXX数据库,从理论上来说,是不准确的,自行有个区分的概念就好了,怎么叫就你哈

C:数据库管理系统(DBMS)

朋友们,这几个货理论上叫做,数据库管理系统,要和数据库的概念区别好了喔

定义:它是位于用户与操作系统之间的一层数据管理软件,用于建立、使用和维护数据库,简称 DBMS(Database Management System)

看一下他的功能:

① 数据库定义功能
  • DBMS提供数据定义语言(Data Definition Language,DDL)来对数据库中的数据对象进行定义,指定其结构和约束等。
② 数据操纵功能
  • DBMS提供数据操纵语言(Data manipulation Language,DML)来实现对数据库的基本操作,包括查询数据库以获得所需数据、更新数据库以反映现实世界的变化等
③ 数据的组织存储管理
  • 分类组织、存储和管理各种数据,包括数据字典(存放数据库的定义、数据库运行时的统计信息等)、 用户数据、数据的存取路径等
  • 确定以何种文件结构和存取方式在磁盘上组织这些数据。
  • 实现数据之间的联系。
④ 数据库事务管理和运行管理(控制)
  • 对数据库的建立、运用和维护等进行统一管理、统一控制,保证数据的安全性、完整性、多用户的并发操作和发生故障后的系统恢复。
⑤ 数据库维护
  • 数据库数据的载入、转换数据库的转储、恢复数据库的重组和性能监视、分析

总结一下

  • 它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性
  • 用户通过 DBMS 访问数据库中的数据,数据库管理员也通过 DBMS 进行数据库的维护工作
  • 它可使多个应用程序和用户用不同的方法在同时或不同时刻去建立,修改和询问数据库

D:数据库系统(DBS)

在计算机系统中引入数据库后的系统构成

数据库系统包括:① 数据库 ② 数据库管理系统(及其开发工具)③ 应用系统 ④数据库管理员

(2) 数据管理技术的产生和发展

数据管理,就是对数据进行分类、组织、编码、存储、检索和维护

数据管理技术的发展过程
① 人工管理阶段(20世纪40年代中--50年代中)

  • 人工管理阶段,数据面向应用,且不能保存,不能共享,同时不具有数据独立性

    • 数据面向应用:数据需要由应用程序自己定义说明以及管理,也就是说,程序员需要自己规定数据的存储结构,方法,输入方式等等
    • 数据独立性:是指用户的应用程序与数据的逻辑结构和物理结构是相互独立的

② 文件系统阶段(20世纪50年代末--60年代中)

  • 文件系统管理数据,数据可以长期保存,同时具有了一定的共享性,但是不具有数据独立性

③ 数据库系统阶段(20世纪60年代末--现在)

(3) 数据库系统的特点

前面简单介绍了 人工管理阶段,以及文件系统阶段的一些优缺点,而数据库系统作为他们的进化产物,自然对前者的不足做出了一定的完善,下面简单先将其特点列出来

  • 数据结构化
  • 数据的共享性高,冗余度低,易扩充
  • 数据独立性高

    • 数据由DBMS统一管理和控制

A:数据结构化

数据结构化是数据库系统文件系统的根本区别。在文件系统中,独立文件内部的数据一般是有结构的,但文件之间不存在联系,因此从数据的整体来说是没有结构的

数据库系统虽然也常常分成许多单独的数据文件,并且文件内部也具有完整的数据结构,但是它更注意同一数据库中各数据文件之间的相互联系

简单的认为就是:整体结构化+ 数据结构化(数据模型)

B:数据的共享性高,冗余度低,易扩充

数据库系统从整体角度看待和描述数据,数据面向整个系统,可以被多个用户、多个应用共享使用

减少了数据冗余,同时节约存储空间,避免数据之间的不相容性与不一致性,使系统易于扩充

这样的特点不仅,减少了数据冗余,同时节约存储空间,也避免数据之间的不相容性与不一致性,使系统易于扩充

C:数据独立性高

① 物理独立性

  • 指用户的应用程序与存储在磁盘上的数据库中数据是相互独立的,即:当数据的物理存储改变了,应用程序不用改变

② 逻辑独立性

  • 指用户的应用程序与数据库的逻辑结构是相互独立的 数据的逻辑结构改变了,用户程序也可以不变
  • 数据独立性是由DBMS的二级映像功能来保证的

③ 数据由DBMS统一管理控制

  • 数据的安全性(Security)保护
  • 数据的完整性(Integrity)检查
  • 并发(Concurrency)控制
  • 数据库恢复(Recovery)

(四) 数据库系统结构

从数据库管理系统角度看,数据库系统通常采用三级模式结构,是数据库系统内部的系统结构

从数据库最终用户角度看(数据库系统外部的体系结构),数据库系统的结构分为:

  • 单用户结构
  • 主从式结构
  • 分布式结构
  • 客户/服务器
  • 浏览器/应用服务器/数据库服务器多层结构等

(1) 几个基本概念

A:“型” 和“值” 的概念

型(Type):对某一类数据的结构和属性的说明

值(Value):是型的一个具体赋值

例如,员工记录定义为(编号,姓名,性别,部门,年龄,籍贯)这样的记录型

而(20200417,汤姆,男,技术部,40,北京)则是该记录型的一个记录值

B:模式(Schema)

模式是数据库中全体数据的逻辑结构和特征的描述(数据的结构和联系),它仅仅涉及到型的描述,不涉及到具体的值,并且模式是相对稳定的

C:实例(Instance)

模式的一个具体值,反映数据库某一时刻的状态同一个模式,可以有很多实例,实例随数据库中的数据的更新而变动

模式是相对稳定的,而实例是相对变动的,因为数据库中的数据是在不断更新。模式反映的是数据的结构及其联系,而实例反映的是数据库某一时刻的状态。

分别看完模式和实例的配图,这两者的概念就很好区分了,就比如上例中,就是一个学生选课的数据库模式,其中包含学生的记录,还有课程的记录,以及学生选课的记录,而下面我随便举了一些例子,例如他是 2020年的学生选课数据库实例,当然前面还有2019年的 2018年的 等等,每个实例就是不同的了,虽然都是学生选课数据库模式

(五) 数据库系统的三级模式结构

数据库系统分为三级模式,简单做了一个图,让大家看起来直观一点,当然啦,大家最好先去简单看一下下面概念的介绍再回过头食用 ~

先讲模式,再讲上下两个

(1) 模式(逻辑模式)

定义数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图,综合了所有用户的需求,同时一个数据库只有一个模式

举个例子:我的数据库中,存在很多关系模式,例如用户关系模式中(用户编号,用户名称),权限关系(权限编号,权限名称)等,数据库中所有关系模式的集合就组成了逻辑模式

模式所处位置(三层模式中):是数据库系统模式结构的中间层

与数据的物理存储细节和硬件环境无关

与具体的应用程序、开发工具及高级程序设计语言无关

(2) 外模式(子模式/用户模式)

定义:数据库用户(包括应用程序员和最终用户)使用的局部数据的逻辑结构和特征的描述,是与某一应用有关的数据的逻辑表示

外模式所处位置(三层模式中):介于模式与应用之间

模式外模式的关系:一对多,外模式通常是模式的子集 (看图记忆就行了 - - ),不同的外模式反映了不同的用户的应用需求、看待数据的方式、对数据保密的要求

外模式应用的关系:一对多,同一外模式也可以为某一用户的多个应用系统所使用,但一个应用程序只能使用一个外模式

(3) 内模式 (存储模式)

是数据物理结构和存储方式的描述,它定义了数据库内部记录类型、记录寻址技术、索引和文件的组织方式、以及数据控制方面的内容

数据在数据库内部的表现方式:

  • 记录的存储方式(顺序存储,按照B树结构存储,按hash方法存储)
  • 索引的组织方式
  • 数据是否压缩存储
  • 数据是否加密
  • 数据存储记录结构的规定
  • 一个数据库只有一个内模式

网图,侵删

(六) 数据库的二级映像

这二级映像分为:

  • 外模式与模式之间的映像
  • 模式和内模式的映像

(1) 外模式与模式之间的映像

保证了数据的逻辑独立性

模式改变时,数据库管理员修改有关的外模式/模式映像,使外模式保持不变

应用程序是依据数据的外模式编写的,从而应用程序不必修改保证了数据与程序的逻辑独立性,简称数据的逻辑独立性。

(2) 模式和内模式的映像

保证了数据的物理独立性
当数据库的存储结构改变了(例如选用了另一种存储结构),数据库管理员修改模式/内模式映像,使模式保持不变,应用程序不受影响保证了数据与程序的物理独立性,简称数据的物理独立性。

(3) 二级映像总结

  • 保证了数据库外模式的稳定性
  • 从底层保证了应用程序的稳定性,除非应用需求本身发生变化,否则应用程序一般不需要修改
  • 数据与程序之间的独立性,使得数据的定义和描述可以从应用程序中分离出去
  • 数据的存取由DBMS管理,用户不必考虑存取路径等细节,简化了应用程序的编制,大大减少了应用程序的维护和修改

(七) 数据库系统的组成

数据库,数据库管理系统(及其开发工具),应用系统,数据库管理员,硬件平台及数据库 ,软件 ,人员

这一块,不是很重点,也比较好理解,就不细细展开说了 知道这几个点就好了

(八) 结尾

如果文章中有什么不足,欢迎大家留言交流,感谢朋友们的支持!

如果能帮到你的话,那就来关注我吧!如果您更喜欢微信文章的阅读方式,可以关注我的公众号

在这里的我们素不相识,却都在为了自己的梦而努力 ❤

一个坚持推送原创开发技术文章的公众号:理想二旬不止


二境志
191 声望26 粉丝