文章目录
- 总览全局
- 数据库
- 数据库管理系统
- DBA数据库管理员
- 数据库系统的体系结构
- 三层模式两级映像
- 独立性
- 数据模型
- 数据库技术的产生与发展
- 相关定义
总览全局
整个数据库系统所包含为:
- 数据库(数据的集合叫做一个库)
- 数据库管理系统
- 数据库应用系统(经典举例:XX管理系统)
- DBA管理员等等相关开发人员
数据库
数据库(DataBase)是数据的集合
- 长期存储的数据
- 有组织的
(前辈们已经开发好对应的数据库软件帮我们组织了) - 可共享的
(可以理解为网页访问到的数据全网都可以访问)
数据库的特征:
(我觉得不是往DBA方向发展的没必要研究这么深入,比如我) - 数据库按一定的数据模型组织进行存储的(表结构,能够描述各种存储关系)
- 能够为用户共享访问数据
- 冗余度小(比如:程序员最难以忍受的就是重复的东西,因此在数据库中有时候也可以将一些重复的可以信息单做成一张表)
- 数据独立性高
- 具有较高扩展性(数据库扩展我理解有两重意思:一是方面开发数据库管理系统人员的便捷,这是由研究开发人员来完成,二是我这类程序员,用高级语言开发管理员应用)
数据库管理系统
介于用户与操作系统之间的一个数据库软件,比如MySQL和SQLserver…
(!!我不明白为什么其他博文不写这个,搞得我刚学的时候一直不明白这个概念,DBMS不就是SQLserver这类可视化软件吗,能进行增删查改也能转储SQL文件)
DBA数据库管理员
一般来说工资高,技术牛,出手便是一招制敌的水平。这类人就是在每一个项目开发之前要定制一个基本的数据管理结构,然后程序员根据这些数据存储的结构进行开发应用。
了解完数据库整个组成结构后开始了漫长枯燥的理论学习
数据库系统的体系结构
三层模式两级映像
-
三层模式
- 外模式
我的理解:在DBMS中创建的视图就是外模式,为什么叫外模式,是因为创建的视图是用来保护真实的数据表,安全性更高,用户包括程序都是只能通过视图才能看到数据,这些数据是DBA授权后创建出来给用户和程序看到的。 - 逻辑模式
我的理解:一个关系表,Student(id,name,…)这个就是一个逻辑模式,然后假如我有数据 了,然后使用视图来访问这些数据,就是通过视图-模式这个影像映射到真实的数据表中。 - 内模式
我的理解:DBMS具体指的是索引与其他数据文件。
- 外模式
-
二级映像
- 正如上述所说,就是用一个媒介映射到对方身上。非常抽象的玩意。
比如:当一个模式发生改变的时候我只需要改变外模式的映射就行,其实这个映射的意思就是改变一下视图的创建即可。
- 正如上述所说,就是用一个媒介映射到对方身上。非常抽象的玩意。
当我理解了上面的大概意思后,也就理解了为什么一个模式对应多个外模式。就好比我开发一个网页,肯定是用的不止一个外模式,比如普通用户用的,管理员用的,但是他们可以使用同一个外模式,只是权限各有不同而已看情况而论,都要分别创建不同的视图提供给他们使用。
独立性
- 这里讨论三级关系与两级影响之间的独立性。
三级关系都是处于DBMS中,外模式是视图保护数据的,模式就是表结构,内模式就是创建的索引或者数据加密偏底层的,一般DBMS自动完成,不用我们亲自搞(要弄也是直接使用SQL语句),底层其实都是一堆算法。二级映像是通过两个级关系构成的,比如:外模式—模式,模式—内模式,这就是二级映像,非常抽象,这里提这个概念我觉得主要是想要告诉我们当模式改变的时候只需要改变映像就行,不用改变程序是这个意思。
解释:当我的模式发生了改变,就是假如说(一般不会改变)我的表结构发生了改变,这时候我的程序肯定是访问不了数据了的,因为给我的视图已经不适用于现在的表结构了,但是我们并不需要修改程序,只需要在DBMS中将二者的映像修改一下即可,就是将视图修改成能够访问现在的表即可。(这里因情况而定要不要修改视图的属性列,因为程序是操作的视图的属性列,如果改变视图属性列就要改变程序的参数名字),然后如果只是将视图的查询语句改变了一下,视图的其他属性没有改变,这样既完成了映射关系,又不用将发布出去的程序down下来修改程序的参数。
- 补充:物理独立性就是当我们在DBMS中设置的索引发生改变的时候,我们的应用程序不用变,当然了应用程序离内模式还有很远,即使要改变也轮不到他,也是先把外模式改变,但是很明显索引改变也不影响我们的模式-外模式的映像,因为是DBMS内部自行完成的,所以这里的物理独立性我个人感觉是比逻辑独立性更加的具有独立特性,基本是啥也不用修改。然而逻辑独立性指的是当我们的数据结构发生改变(这里指的是我们设计数据库的关系),当发生变动了,我们的应用程序不用变,只需要在DBMS中修改外模式的视图即可,也就是修改映像即可。
- 总结
我认为这个概念确实提不提都无所谓,主要是这个分层做的真是很好,真正的做到独立性了,我对这方面的思考还有待提高,毕竟能够完成每个层次的独立分层且互不干扰这个东西着实也正在困扰着我。
数据模型
模型就是反应现实世界的东西。比如飞机模型,仿的就是真实世界里面的飞机,打造模型的时候总不能随便造的,即使你造出来了也不能叫飞机模型,万一你造出来的是一辆车,然后你管他叫飞机这就不行(当然除非你将全世界洗脑了说这就是飞机)
反观在数据库中也是一样,首先创建的数据库必须是有逻辑的,是反应现实世界的关系的,并且有数据结构(在数据库中使用的是关系模式,也就是用表来描述现实世界的关系)
- 数据模型的三要素
- 数据结构
- 静态特性(一旦定义就不会轻易修改,比如定义一个学生表)
- 数据操作
- 动态特性(增删查改,这些是对数据操作,不是对表结构操作)
- 数据的完整性约束。
- 实体约束(比如一个表必须要有一个主键或者不能为空这些)
- 参照完整性(一个表有一个属性是另一个表的主键,不能随便乱取值。)
- 用户自定义的完整性(用户需求、程序员需求…)
- 数据结构
数据库技术的产生与发展
- 数据库技术的产生动力
不用多说,就好比刚接触C语言写一个通讯录管理系统的时候我便渴望希望能够将我的数据独立出去而不是我要写一个仅仅能用于我应用程序仅此而已。还是用的是txt文件存的,还要考虑编码格式,头大!?!因此感谢前辈们的努力,能够让我站在巨人的肩膀上。 - 数据管理技术的发展
- 人工管理阶段
没搞懂为啥会出现这个阶段,首先我想到的是用文件存储(也有可能当时还没这么多能存储的文件类型。也有可能内存不够,只能一次性应用程序输出数据然后用笔记下来) - 文件管理阶段
数据存进文件必然是一件明智的选择,好比初学C语言之时就是将数据存进txt文件的,但是很明显只能够用于自己开发的应用程序,到头来还要自己管理这么庞大的文件。 - 数据库系统阶段
我认为这个阶段最大的成功不是能够将数据更好的存储,而是能够将数据独立出去,不管是谁都能访问该数据(只要有权限),共享性杠杠的,还有事务处理。
- 人工管理阶段
相关定义
- 不同阶段给出的定义不同
- 我算是整明白了,正是由于这些不同阶段的产物,并且是一样的东西,但是处于不同阶段就不同叫法,前辈们真是谁也不服谁,前期学习这些理论知识真是煎熬,一个记录型就理解了半天都没搞懂,学到这里才整明白,一组数据还能叫记录、实体、元组。(当真是横看成岭侧成峰,远近高低各不同,可奈何只缘身在此山中。)