一.数据库概论
1.数据库
数据库(
DataBase
,DB):是长期存储在计算机内、有组织的、统一管理的相关数据的集合。简单来说,它就是一个存储各种数据的仓库,且存储过程不是随便而是有组织的。
数据库管理系统(DBMS):位于用户与操作系统制键的一层数据管理软件,为用户提供访问DB的方法。我的理解是把它认为是帮助我们操纵和管理数据库的大型软件。
SQL
:我们可以通过DBMS来操作数据库,那我们使用什么来操作DBMS呢?所谓的SQL
就是当我们操作关系型数据库时使用的编程语言,它定义了一套操作关系型数据库的统一标准。
2.主流数据库管理系统
主流的关系型数据库管理系统:
Oracle
:收费,且昂贵。MySQL
:原来免费,是一个中小型数据库,后来被Oracle公司收购,进行加强,提供免费基础版和收费加强版。SQL Server
:微软公司研发的一个中型数据库,收费。SQLite
:嵌入式开发用的微型数据库。
即使后来实际开发过程,我们使用的不是MySQL
,但他们都是使用SQL
语言控制的。
MySQL
保姆级安装教程:点击这里
二.MySQL
数据库
1.数据模型
MySQL
数据库模型:
2.数据描述
概念设计中的数据描述:
- 实体:客观存在、可以相互区别的事物。可以是具体对象,比如一名学生;也可以是抽象对象,比如一次学习。
- 实体集:性质相同的同类实体的集合。比如所有的学生。
- 属性:实体有很多特性,一个特性就是其一种属性。比如学生有学号、年龄、姓名的属性。
- 实体标识符:能唯一标识实体的属性或属性集。也称关键码、键。
逻辑设计中的数据描述:
- 字段:标识实体属性的命名单位称为字段或数据项。比如学生有学号、姓名、年龄等字段。
- 记录:字段的有序集合。一般用一条记录描述一个实体,比如一个学生记录的组成:(学号、姓名、年龄)。
- 文件:同一类记录的集合。文件往往用来描述实体集,例如所有的学生记录构成了一个文件。
- 关键码:能唯一标识文件中每条记录的字段或字段集,也叫键。
对应关系:
概念设计 | 逻辑设计 |
---|---|
实体 | 记录 |
属性 | 字段(或数据项) |
实体集 | 文件 |
实体标识符 | 关键码 |
3.ER图
ER图也叫实体联系图,用来描述实体类型和实体间的关系。
ER图的基本成分:
- 1.矩形框:用于表示实体。
- 2.菱形框:用于表示实体间的联系。
- 3.椭圆形框:用于表示实体的属性。
在某属性下画一条横线,表示该属性是关键码或实体标识符。
比如,现在有一ER图:
4.关系型数据库
概念:建立在关系模型基础上,由多张相互连接的二维表组成的数据库。
特点:
- 1.使用表存储数据,格式统一,便于维护
- 2.使用
SQL
语言操作,标准统一,使用方便
关系模型补充:
- 实体:客观存在、可以相互区别的事物。可以是具体对象,比如一名学生;也可以是抽象对象,比如一次学习。
- 实体集:性质相同的同类实体的集合。比如所有的学生。
- 属性:实体有很多特性,一个特性就是其一种属性。比如学生有学号、年龄、姓名的属性。
- 实体标识符:能唯一标识实体的属性或属性集。也称关键码、键。
- 关系模型:用二维表格表示实体集,用关键码表示实体之间联系的数据模型叫关系模型。
上面ER图例子的关系模型:
三.数据库体系结构
1.三层模式和两级映像
我们知道用户是不可能直接操纵数据的,它是通过应用软件来管理底层的数据库,那么应用软件到数据库中间过程是怎么样的呢?
主要看上面这张图,右半边就是从应用软件到数据库的过程,可以看见有三种模型,依次是外部模型、逻辑模型、内部模型,这三层模型用数据库的语言来说,就是外模式(用户模式)、逻辑模式和内模式(物理模式)。这就是所谓的三层模式。
而三层模式的数据不可能是一样的,那怎么理解不同的数据?我们可以看到上面右半图在三层之间画了两条虚线,即映像,用来说明各层数据的对应性。两级映像分别叫“外模式/逻辑模式映像”和“逻辑模式/内模式”映像。
可以看到左半边主要是对用户需求进行分析总结得出的模型叫概念模型,我们ER图画的就是概念模型。而我们实际开发,比如写一个学生管理系统管理学生数据,我们只开发右边的逻辑模型,所以才要有概念模型到逻辑模型的转换。
2.逻辑模式
- 数据库中全体数据的逻辑结构和特征的描述
- 是综合了所有用户的需求的公共数据视图
- 一个数据库只有一个逻辑模式
逻辑模式的地位:
- 是数据库系统模式结构的中间层
- 与数据的物理存储细节和硬件环境无关
- 与具体的应用程序、开发工具及高级程序设计语言无关
逻辑模式定义的内容:
- 数据的逻辑结构
- 数据之间的关系
- 数据有关的安全性、完整性要求
前面的关系模型就是逻辑模式常见的一种表达方式。
3.外模式
- 数据库用户(包括应用程序员和最终用户)使用的局部数据的逻辑结构和特征的描述
- 数据库用户的数据视图,是与某一应用有关的数据的逻辑表示
比如教务处的成绩管理系统,学生可以查成绩有一个外模式,教师可以录入成绩也有一个外模式,教务处管理人员管理系统也有一个外模式,不一定一类用户只对应一种外模式,但一般一个数据库其外模式是一对多的关系。
- 保证数据库安全性的一个有力措施。每个用户只能看见和访问所对应的外模式中的数据
- 保证数据独立性的一个有力措施
4.内模式
- 是数据物理结构和存储方式的描述
- 是数据在数据库内部的表示方式
关系:一对一。
面试问题:什么保证了数据库的数据独立性?
答:三层模式两级映像的数据结构。
四.关系数据模型
1.数据模型
在数据库中用数据模型这个工具来抽象、表示和处理现实世界中的数据和信息
数据模型就是用抽象对现实世界的模拟
数据模型应满足三方面要求:能比较真实地模拟现实世界、容易为人所理解、便于在计算机上实现。
2.关系的表示
一个二维表对应的就是一个关系。
表的每行对应一个元组,表的每列对应一个域。
一个元组其实对应一条记录或一个实体,表中列数也就是属性个数叫元数,含一个属性的元组叫一元组,依次类推。
域其实就是二维表中同一列所有数据的集合,它在定义上是同一数据类型的集合。
3.完整性约束
完整性约束:关系型数据库维护与更新必须遵循的3类完整性规则。
- 实体完整性
- 参照完整性
- 用户定义的完整性
其中,实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性,应该由关系系统自动支持。
实体完整性==》1.主键不能为空;2.主属性不能取空值
参照完整性==》外键必须是另一个关系模式的主键或者取空值
五.关系代数
1.关系代数
- 是一种抽象的数据查询语言
- 用对关系的运算来表达查询
关系代数通过关系运算符进行查询操作,关系运算符的分类:
- 传统的集合运算符
- 专门的关系运算符
- 比较运算符
- 逻辑运算符
2.基本操作
前提:R和S是两个关系,具有相同的关系模式==》两个二维表具有相同的属性
并:
- 符号:R∪S
- 解释:由属于R或属于S的元组构成的集合
差:
- 符号:R—S
- 解释:由属于R但不属于S的元组构成的集合
笛卡尔积:
- 符号:R × S
- 解释:新集合每个元组前r个分量来自R,后s个分量来自S
投影:
- 符号:Π i 1 , … … , i m i_1,……,i_m i1,……,im(R)
- 解释:消除某些列,并重新排序
- 补充:对一个关系进行垂直切割
选择:
- 符号:σF®
- 解释:从R中挑选满足公式F为真的元组构成新的关系
例子:
3.组合操作
交:
- 符号:R∩S
- 解释:既属于R又属于S构成的新关系
连接:
- 符号:R ∞ i θ j ∞_{i{\theta}j} ∞iθjS
- 解释:从R中挑选第i个分量,从S中挑选第j个分量,其满足{\theta}$操作的元组进行连接
例如:
自然连接:
- 符号:R∞S
- 解释:1.计算R×S;2.
R
和S
的公共属性是Ai……Ak,挑选R.
Ai=S.
Ai的元组进行组合例如:
除法:
- 符号:R ÷ \div ÷S
- 解释:具体计算太复杂,其实就是找满足S的元组去除对应列后的新关系
例如:
看图还不懂?这是一个学生和课程的关系,R ÷ \div ÷
COURSE1
、R ÷ \div ÷COURSE2
、R ÷ \div ÷COURSE3
分别表示至少选修COURSE1
、COURSE2
、COURSE3
的学生名单。
把由5个基本操作经过有限次复合的式子称为关系代数表达式。可以利用关系代数表达式对数据库进行各种数据查询操作,而我们后面的SQL
语言其底层原理还是关系代数来操作数据,只是把关系代数封装在了底部,而使用简单的SQL
语句来操作。
4.补充操作
改名:
- 符号: ρ S ( A 1 , … , A n ) R ρ_{S (A_1,…,A_n)}R ρS(A1,…,An)R
- 解释:把原来的关系R改名为S,把原来的属性依次改名为 A 1 , … , A n A_1,…,A_n A1,…,An
除了改名,还有广义投影、赋值、外连接、外部并、半连接、聚集操作共7个扩充操作,关系代数和关系演算是早期的关系型数据库操作方式,现在更多的是使用SQL
语言来操作(虽然底层原理还是它),但现在编程人员更多的还是掌握SQL
语言即可。
除了改名,还有广义投影、赋值、外连接、外部并、半连接、聚集操作共7个扩充操作,关系代数和关系演算是早期的关系型数据库操作方式,现在更多的是使用SQL
语言来操作(虽然底层原理还是它),但现在编程人员更多的还是掌握SQL
语言即可。