(一) 引言
当你登录你的QQ账号和别人吹水的时候,当你期末交作业去度娘复制的时候,当你在工作中登录一些网站的时候,再比如当你查看自己几乎没有什么余额的银行卡的时候(捂脸),或许自己也没注意,(非需要,大部分人也不想注意哈哈哈)我们一直都在以某种方式与数据库打交道,或许你是一个开发人员,也或许你只是一个普通的用户,这一篇是我去年就一直想写的文章,但是也没个合适的机会,这一段时间加班加点写出来,同时最近想要更新的一系列文章,主要针对数据库理论知识,后面我把去年写过的 MySQL 文章也会对应的重新整理一遍
注:这篇文章重点还是偏理论,比较适合数据库的新手,或者具有一定实操基础的小伙伴,
既然你都打开这篇文章了,那你就注定不是一个村民,这一局我们跳 Java 程序员!
开发学习中,想满足一些需求,与数据打交道这可太频繁了,如何存储这些数据就是你考虑的问题了,当然不考虑性能,管理、安全等等,你的选择可就多了,存个 txt,存个xml,甚至还可以存个excel等等,有位新手朋友曾经问过我这样一个问题 “他在学习IO的一些技术的时候,常常会简单的保存一些数据到 .txt 文件中,为什么还需要数据库呢?”,这样的一些小Demo,大家在Java基础的学习中应该都是做过的,那么我们下面就从这个问题讲起~
假定我们将数据全部存储在一个普通文件中(data.txt)_(以逗号间隔)
......
"Eminem",male,1972,"USA"
"Rihanna",female,1988,"Barbados"
"Taylor Swift",1989,female,"USA"
"Aavril Lavigne",1984,female,"Canada"
......
如果在我们的数据极为庞大的情况下,我们需要查询其中的一些数据,例如,查询Eminem的国籍,我们一般会使用遍历,但是毫无疑问,这个响应时间会变得极其缓慢,但是使用数据库后,它所提供的一些索引技术等就可以解决这样的问题
"Rihanna",female,1988,"Barbados"
"Rihanna",female,1995,"USA"
如果数据中出现了重名的情况,又如何判断是不是同一个人呢?
如果data.txt文件中的数据被错误的修改,例如出生年份被修改为其他类型字符串这种无效表达怎么办?
或许你可以在程序中写一些逻辑判断语句进而筛选处理这些问题,但是仍旧在数据较为庞大的情况下,会出现各种各样的问题,增加了开发者的开发难度,而数据库本身就制定了一些约束,从而保证了数据的完整且,有效,从而使开发者只需要更加注重于程序本身的设计,而不用花费过多的时间去处理数据上的一些细节问题
常用来简单存储数据的 txt/excel 等均属于单一文件,并且都是无法共享的,只支持当前用户使用并且修改
而数据库则允许用户共享,不同的用户可以同时存取数据库中的数据,用户也可以用各种方式通过接口使用数据库,并提供数据共享
在我们前者中,数据的修改是很随意的 但是在实际开发中,我们有时候需要面临,多个用户检索、修改同一文件中的数据,或者在并发情况下,写同一文件或者记录,而数据库基于锁等的一些技术便可以帮助我们解决这些问题
由于逻辑或者物理上的错误,导致了系统的错误操作,从而使得数据被破坏,如何快速恢复数据,我们上面的单一文件系统显然无法帮助我们解决问题,而数据库却有相关机制去弥补、处理相关问题
上面我们仅仅从几个常见的点分析了为什么使用数据库,当然远远不止这些,所以总的来说就是数据库其特殊的存储以及管理方式,既提高了效率,也极大的减少了开发人员的负担
总结一下:数据库 em… 是个好东西!
数据是信息的表现形式和载体,同样也是数据库中存储的基本对象
数据的定义:描述事物的符号记录
数据的种类:文本、图形、图像、音频、视频、学生的档案记录、货物的运输情况等
数据的语义:数据的含义称为数据的语义,数据与其语义是不可分的,这同样呼应了前面所说:“ 数据是信息的表现形式和载体 ”
定义:数据库(Database,简称DB)是长期储存在计算机内、有组织的、统一管理的、可共享的大量相关数据的集合
简单点说:数据库就是一个以某种有组织的方式存储的数据集合(理解为数据的仓库也可以),并且能为各种用户共享
特别特别要注意一点:例如 MySQL 、Oracle 等数据库软件不能被称作数据库,他们确切的叫法是 DBMS(数据库管理系统),当然了我们口语一般都习惯了,叫XXX数据库,从理论上来说,是不准确的,自行有个区分的概念就好了,怎么叫就你哈
朋友们,这几个货理论上叫做,数据库管理系统,要和数据库的概念区别好了喔
定义:它是位于用户与操作系统之间的一层数据管理软件,用于建立、使用和维护数据库,简称 DBMS(Database Management System)
看一下他的功能:
总结一下:
在计算机系统中引入数据库后的系统构成
数据库系统包括:① 数据库 ② 数据库管理系统(及其开发工具)③ 应用系统 ④数据库管理员
数据管理,就是对数据进行分类、组织、编码、存储、检索和维护
数据管理技术的发展过程 ① 人工管理阶段(20世纪40年代中--50年代中)
② 文件系统阶段(20世纪50年代末--60年代中)
③ 数据库系统阶段(20世纪60年代末--现在)
前面简单介绍了 人工管理阶段,以及文件系统阶段的一些优缺点,而数据库系统作为他们的进化产物,自然对前者的不足做出了一定的完善,下面简单先将其特点列出来
数据结构化是数据库系统与文件系统的根本区别。在文件系统中,独立文件内部的数据一般是有结构的,但文件之间不存在联系,因此从数据的整体来说是没有结构的
数据库系统虽然也常常分成许多单独的数据文件,并且文件内部也具有完整的数据结构,但是它更注意同一数据库中各数据文件之间的相互联系
简单的认为就是:整体结构化+ 数据结构化(数据模型)
数据库系统从整体角度看待和描述数据,数据面向整个系统,可以被多个用户、多个应用共享使用
减少了数据冗余,同时节约存储空间,避免数据之间的不相容性与不一致性,使系统易于扩充
这样的特点不仅,减少了数据冗余,同时节约存储空间,也避免数据之间的不相容性与不一致性,使系统易于扩充
① 物理独立性
② 逻辑独立性
③ 数据由DBMS统一管理控制
从数据库管理系统角度看,数据库系统通常采用三级模式结构,是数据库系统内部的系统结构
从数据库最终用户角度看(数据库系统外部的体系结构),数据库系统的结构分为:
型(Type):对某一类数据的结构和属性的说明
值(Value):是型的一个具体赋值
例如,员工记录定义为(编号,姓名,性别,部门,年龄,籍贯)这样的记录型
而(20200417,汤姆,男,技术部,40,北京)则是该记录型的一个记录值
模式是数据库中全体数据的逻辑结构和特征的描述(数据的结构和联系),它仅仅涉及到型的描述,不涉及到具体的值,并且模式是相对稳定的
模式的一个具体值,反映数据库某一时刻的状态同一个模式,可以有很多实例,实例随数据库中的数据的更新而变动
模式是相对稳定的,而实例是相对变动的,因为数据库中的数据是在不断更新。模式反映的是数据的结构及其联系,而实例反映的是数据库某一时刻的状态。
学生表:
课程表:
中间表(可能叫法不是很准确,不过能理解意思即可)
分别看完模式和实例的配图,这两者的概念就很好区分了,就比如上例中,就是一个学生选课的数据库模式,其中包含学生的记录,还有课程的记录,以及学生选课的记录,而下面我随便举了一些例子,例如他是 2020年的学生选课数据库实例,当然前面还有2019年的 2018年的 等等,每个实例就是不同的了,虽然都是学生选课数据库模式
数据库系统分为三级模式,简单做了一个图,让大家看起来直观一点,当然啦,大家最好先去简单看一下下面概念的介绍再回过头食用 ~
先讲模式,再讲上下两个
定义:数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图,综合了所有用户的需求,同时一个数据库只有一个模式
举个例子:我的数据库中,存在很多关系模式,例如用户关系模式中(用户编号,用户名称),权限关系(权限编号,权限名称)等,数据库中所有关系模式的集合就组成了逻辑模式
模式所处位置(三层模式中):是数据库系统模式结构的中间层
与数据的物理存储细节和硬件环境无关
与具体的应用程序、开发工具及高级程序设计语言无关
定义:数据库用户(包括应用程序员和最终用户)使用的局部数据的逻辑结构和特征的描述,是与某一应用有关的数据的逻辑表示
外模式所处位置(三层模式中):介于模式与应用之间
模式与外模式的关系:一对多,外模式通常是模式的子集 (看图记忆就行了 - - ),不同的外模式反映了不同的用户的应用需求、看待数据的方式、对数据保密的要求
外模式与应用的关系:一对多,同一外模式也可以为某一用户的多个应用系统所使用,但一个应用程序只能使用一个外模式
是数据物理结构和存储方式的描述,它定义了数据库内部记录类型、记录寻址技术、索引和文件的组织方式、以及数据控制方面的内容
数据在数据库内部的表现方式:
网图,侵删
这二级映像分为:
保证了数据的逻辑独立性
当模式改变时,数据库管理员修改有关的外模式/模式映像,使外模式保持不变
应用程序是依据数据的外模式编写的,从而应用程序不必修改,保证了数据与程序的逻辑独立性,简称数据的逻辑独立性。
保证了数据的物理独立性 当数据库的存储结构改变了(例如选用了另一种存储结构),数据库管理员修改模式/内模式映像,使模式保持不变,应用程序不受影响,保证了数据与程序的物理独立性,简称数据的物理独立性。
数据库,数据库管理系统(及其开发工具),应用系统,数据库管理员,硬件平台及数据库 ,软件 ,人员
这一块,不是很重点,也比较好理解,就不细细展开说了 知道这几个点就好了