数据库系统

初步认识数据库系统
基础概念
表(Table)
Table: 以按行按列形式组织及展现的数据

表名+表标题=(关系)模式 用于表示表的结构
表名+表标题+表内容(值)=表/关系
数据库(Database)
Database: 相互之间有关联关系的Table的集合

数据库系统(工作环境)
数据库系统的构成
- 数据库(DB): 用于存放数据
- 数据库管理系统(DBMS): 系统软件,用于管理数据库
- 数据库应用(DBAP): 为用户更好使用数据库开发的应用程序,应用程序通过DBMS管理数据库
- 数据库管理员(DBA): 使用DBMS管理数据库
- 计算机基本系统

数据库系统实例化

数据库管理系统(DBMS)
用户角度的功能
数据库定义
定义数据库中Table 的名称、标题(内含的属性名称及对该属性的值的要求内含的属性名称及对该属性的值的要求)等
- DBMS提供一套数据定义语言(DDL:Data Definition Language) 给用户
- 用户使用DDL描述其所要建立表的格式
- DBMS依照用户的定义,创建数据库及其中的Table
数据库操纵
向数据库的Table中增加/删除/更新数据及对数据进行查询、检索、统计等
- DBMS提供一套数据操纵语言(DML:Data Manipulation Language) 给用户
- 用户使用DML 描述其所要进行的增、删、改、查等操作
- DBMS 依照用户的操作描述,实际执行这些操作
数据库控制
控制数据库中数据的使用及访问权限
- DBMS提供一套数据控制语言(DCL:Data Control Language) 给用户
- 用户使用DCL描述其对数据库所要实施的控制
- DBMS依照用户的描述实际进行控制
DBA定义控制信息(谁能访问哪些数据),DBMS依照定义信息,对数据库的使用实施控制,限制用户(DBAP)
数据库维护
转储/恢复/重组/性能监测/分析…
- DBMS提供一系列程序( 实用程序/例行程序)给用户
- 在这些程序中提供了对数据库维护的各种功能
- 用户使用这些程序进行各种数据库维护操作
数据库维护的实用程序,一般都是由数据库管理员(DBA)来使用和掌握的。
数据库语言
使用者通过数据库语言利用DBMS操作数据库

数据库语言与高级语言
一条数据库语言语句相当于高级语言的一个或多个循环程序。
数据库语言:
1 | Select 学号,姓名 From 学生登记表 Where 性别 = ‘ 男’; |
高级语言:
1 | For K=1 to 最后一条记录 |
数据库语言可以嵌入到高级语言(宿主语言)中使用。
系统角度的功能
形式 ->构造 ->自动化

DBMS 为完成DB管理,在后台运行着一系列程序:
- 语言编译器:将用数据库语言书写的内容,翻译成DBMS可执行的命令。例如: DDL编译器, DML编译器, DCL编译器等;
- 查询优化(执行引擎)与查询实现(基本命令的不同执行算法):提高数据库检索速度的手段;例如贯穿于数据存取各个阶段的优化程序;
- 数据存取与索引:提供数据在磁盘、磁带等上的高效存取手段。例如:存储管理器,缓冲区管理器,索引/文件和记录管理器等;
- 通信控制:提供网络环境下数据库操作与数据传输的手段
- 事务管理:提供提高可靠性并避免并发操作错误的手段
- 故障恢复:使数据库自动恢复到故障发生前正确状态的手段,例如提供了备份、运行日志操控等实用程序
- 安全性控制:提供合法性检验,避免非授权非法用户访问数据库的手段
- 完整性控制:提供数据及数据操作正确性检查的手段
典型的数据库管理系统
Oracle/DB 2 (IBM)/Sybase/MS SQL Server/MS Access/MS Foxpro
总结

数据库系统的结构抽象与演变
数据库系统的标准结构
数据库系统的分层抽象
DBMS管理数据的三个层次
外部层次=用户层次
某一用户能够看到与处理的数据, 全局数据中的某一部分。不同用户只能看到的数据为全局数据的某一映射。
全局层次=概念层次=逻辑层次
从全局角度理解/管理的数据, 含相应的关联约束。
内部层次=物理层次=存储层次
存储在介质上的数据,含存储路径、存储方式 、索引方式等。

外部层次与全局层次是局部与全局的关系,全局层次与内部层次是概念与存储的关系。
数据(视图)与模式
模式(Schema):对数据库中数据所进行的一种结构性的描述所观察到数据的结构信息。
视图(View)/ 数据(Data):某一种表现形式下表现出来的数据库中的数据。

模式是对视图的抽象,视图或数据是模式展现形式下的一种数据。
三级模式与两层映像
三级模式(三级视图)
从结构角度为模式,从数据角度为视图。
外部模式—->外部视图
某一用户能够看到与处理的数据的结构描述。
概念模式—->概念视图
从全局角度理解/管理的数据的结构描述, 含相应的关联约束。体现在数据之间的内在本质联系。
内部模式—->内部视图
存储在介质上的数据的结构描述,含存储路径、存储方式 、索引方式等。
当省略层次只有视图(View)时,指外部视图((Externel)View);当省略层次只有模式(Schema)时,指概念模式((Conceptual)Schema)。
两层映像
映像:将一种模式映射为另一种模式。
E-C Mapping(External Schema-Conceptual Schema Mapping)
- 将外模式映射为概念模式,从而支持实现数据概念视图向外部视图的转换
- 便于用户观察和使用
C-I Mapping(Conceptual Schema-Internal Schema Mapping)
- 将概念模式映射为内模式,从而支持实现数据概念视图向内部视图的转换
- 便于计算机进行存储和处理

数据库系统的标准结构

两个独立性
逻辑数据独立性
当概念模式变化时,可以不改变外部模式(只需改变E-CMapping),从而无需改变应用程序。
物理数据独立性
当内部模式变化时,可以不改变概念模式(只需改变C-I Mapping),从而不改变外部模式。
数据模型
数据模型的概念
区分数据模型/模式/数据
数据模型
- 规定模式统一描述方式的模型,包括:数据结构、操作和约束
- 数据模型是对模式本身结构的抽象,模式是对数据本身结构形式的抽象。即数据的结构的结构是数据模型。
比如:
关系模型:所有模式都可为抽象表(Table)的形式[数据结构],而每一个具体的模式都是拥有不同列名的具体的表。对这种表形式的数据有哪些[操作]和[约束]。

三大经典数据模型
关系模型:表的形式组织数据

层次模型:树的形式组织数据

网状模型:图的形式组织数据

总结

关系模型之基本概念
关系模型概述
一个关系(relation) 就是一个Table。
关系模型就是处理Table的,它由三个部分组成:
- 描述DB各种数据的基本结构形式(Table/Relation)
- 描述Table与Table之间所可能发生的各种操作(关系运算)
- 描述这些操作所应遵循的约束条件(完整性约束)
即关系模型研究Table如何描述,有哪些操作、结果是什么、有哪些约束等。
关系模型的三个要素
基本结构 :Relation/Table
基本操作 :Relation Operator

完整性约束:实体完整性、参照完整性和用户自定义的完整性
关系运算
关系运算分为关系代数和关系演算;关系演算又分为元组演算和域演算。
关系代数
示例:
基于集合的运算。即操作的对象及结果都是集合,是一次一集合的操作。而非关系型(层次模型、网状模型)的数据操作通常是(根据指针)一次一记录的操作。
基于关系代数设计的数据库语言(ISBL):关系代数是一种数学语言,用计算机可识别的符号表征关系代数的运算符号。
((R*S):课程号=c2)%姓名,课程名
关系演算
元组演算
示例:
基于逻辑的运算,逻辑运算包括与或非、全称量词、存在量词等,也是一种基于数学的语言。
基于元组演算设计的数据库语言(Ingres 系统的QUEL):用计算机可识别的符号表征元组演算的运算符号。
1 | range of t is R |
域演算
示例:
基于示例的运算。
基于域演算设计的数据库语言(QBE):用计算机可识别的符号表征域演算的运算符号。
关系
表的基本构成要素

表的严格定义
域(Domain)
列的取值范围,这列的取值只能从域的集合中选取。
- 一组值的集合,这组值具有相同的数据类型(如整数的集合、字符串的集合、全体学生的集合)
- 集合中元素的个数称为域的基数(Cardinality)

笛卡尔积(Cartesian Product)
表到底有多少行说不清楚,但表所有可能的行是可以基于域列出的。
元组及所有可能组合成的元组。
- 一组域
的笛卡尔积为: 笛卡尔积的每个元素
称为一个n-元组(n-tuple) 元组
是从每一个域任取一个值所形成的一种组合,笛
卡尔积是所有这种可能组合的集合, 即笛卡尔积是由n个域形成的所有可能的n-元组的集合。- 元组
的每一个值 叫做一个分量 (component)。 - 若
的基数为 ,则笛卡尔积的基数,即元组个数为

其中男人、女人、儿童为域名,域中元素为域值。
关系(Relation)
笛卡尔积中的所有元组并不都是有意义的,因此出现了关系。关系是笛卡尔积的一个子集,关系是笛卡尔积所有可能元组中满足某种意义的组合构成的集合。
- 一组域
的笛卡尔积的子集 - 笛卡尔积中具有某一方面意义的那些元组被称作一个关系(Relation)
- 由于关系的不同列可能来自同一个域,为区分需要为每一列起一个名
字,该名字即为属性名。属性名与域名不同。

关系可用
表示,可简记为 ,这种描述又被称为关系模式 (Schema)或表标题(head)。其中 是关系的名字, 是属性, 是属性所对应的域, 是关系的度或目(degree),关系中元组的数目称为关系的基数 (Cardinality)。 例如上图的关系为3目关系,描述为家庭(丈夫:男人,妻子:女人,子女:儿童)或家庭(丈夫,妻子,子女)
关系模式
中属性向域的映象在很多DBMS中一般直接说明为属性的类型、长度等。 例如:
Student(S# char(8),Sname char(10),Ssex char(2),Sage integer,D# char(2),Sclass char(6))
关系模式与关系
- 同一关系模式下,可有很多的关系
- 关系模式是关系的结构, 关系是关系模式在某一时刻的数据
- 关系模式是稳定的;而关系是某一时刻的值,是随时间可能变化的
关系模式为Student(S# char(8),Sname char(10),Ssex char(2),Sage integer,D# char(2),Sclass char(6))
对应的关系可以为:

例:左边为2班学生,右边为3班学生。即元组数目可能是不断变化的,但结构是相同的。模式即为这种表的结构。
关系的特性
1.列同质:每一列中的分量来自同一域,是同一类型的数据。

2.不同的列可来自同一个域,称其中的每一列为一个属性,不同的属性要给予不同的属性名。
关系模式
中 必须是不同的,而 可以是相同的。 例:我们定义一个域为Person=所有男人、女人和儿童的集合={李基,张鹏,王芳,刘玉,李健,张睿,张峰} ,则下述”家庭”关系的三个列将来自同一个域Person, 因此需要不同的属性名”丈夫””妻子””子女”以示区分。

3.关系中属性与行列位置无关
列位置互换性:区分哪一列是靠列名
行位置互换性:区分哪一行是靠某一或某几列的值(关键字/键字/码字)
关系是以内容(名字或值)来区分的,而不是属性在关系的位置来区分
例:这两个关系子女与妻子列互换位置,但完全相同。

4.关系与表的差别:理论上,关系的任意两个元组不能完全相同。(集合的要求:集合内不能有相同的两个元素)。现实应用中,表(Table)可能并不完全遵守此特性。

5.属性不可再分特性(关系第一范式)


在第二张表中,name属性又被分为lname和fname两个属性,为复合属性。第4行中同时对应多个值,为多值属性。复合属性和多值属性都违反了属性不可再分特性。
关系上的重要概念
候选码/候选键(Candidate Key)
关系中的一个属性组,其值能唯一标识一个元组,若从该属性组中去掉任何一个属性,它就不具有这一性质了,这样的属性组称作候选码。
例如:
学生(S#, Sname, Sage, Sclass),S#学号就是一个候选码,在此关系中,任何两个元组的S#是一定不同的,而这两个元组的Sname,Sage, Sclass 都可能相同( 同名、同龄、同班),所以S#是候选码。属性组作为候选码:
选课(S#, C#, Sname, Cname, Grade),(S#,C#)联合起来是一个候选码。有时,关系中有很多组候选码,例如:
学生(S#, Sname, Sage, Sclass, Saddress)其中属性S#是候选码,属性组(Sname, Saddress) 也是候选码(同名同地址的两个同学是不存在的)再如
Employee(EmpID, EmpName, Mobile)的每一雇员有唯一的EmpID, 没有两个雇员有相同的手机号Mobile, 则EmpID是候选码,Mobile也是候选码。
主码/主键(Primary Key)
- 当有多个候选码时,可以选定一个作为主码。
- DBMS以主码为主要线索管理关系中的各个元组。
- 例如可选定属性S#作为“学生”表的主码,也可以选定属性组(Sname,Saddress)作为“学生”表的主码。
主属性与非主属性
包含在任何一个候选码中的属性被称作主属性,而其他属性被称作非主属性。
如”选课“中的S#,C#为主属性,而Sname, Cname, Grade则为非主属性。
最简单的,候选码只包含一个属性。
最极端的,所有属性构成这个关系的候选码,称为全码(All-Key)。
比如:关系“教师授课”(T#,C#)中的候选码(T#,C#)就是全码。
外码/外键(Foreign Key)
关系R中的一个属性组,它不是R的候选码,但它与另一个关系S的候选码相对应,则称这个属性组为R的外码或外键 。
例如”合同”关系中的客户号不是候选码,但却是外码。因它与”客户”关系中的候选码”客户号”相对应。

两个关系通常是靠外码连接起来的。两个关系中外码值相同的两个元组连接成一个大的元组。
小结
关系是对表进行的严格的定义。表和关系是有一定差别的:关系是严格的数学定义,是没有重复的元组;而表可以有重复的元组。故当前商务数据库系统中,都是以表来表达的;而关系数据库理论中,是以关系来描述的。
表的术语与关系的术语相对应。

关系模型中的完整性
实体完整性
- 关系的主码中的属性值不能为空值(不知道或无意义的值)
- 关系中的元组对应到现实世界相互之间可区分的一个个个体,这些个体是通过主码来唯一标识的;若主码为空,则出现不可标识的个体,这是不容许的。

空值及其含义
- 空值:不知道、不存在或无意义的值
- 进行关系操作时,有时关系中的某属性值在当前是填不上的,比如档案中有“生日不详”、“下落不明“、“日程尚待公布“等,这时就需要空值来代表这种情况。关系模型中用’?’表征
- 数据库中有了空值,会影响许多方面,如影响聚集函数运算的正确性,不能参与算术、比较或逻辑运算等。有空值的时候是需要特殊处理的,要特别注意。很多时候,数据库系统使用默认值来代替空值。
参照完整性
外码可以取空值,如果不取空值,一定取它作为主码的表中的某一个值,不允许出现其他情况。外码要保证两个关系之间联系的正确性、一致性。
如果关系R1的外码Fk与关系R2的主码的主码Pk相对应,则R1中的每一个元组的Fk值或者等于R2中某个元组的Pk值或者为空值。即如果关系R1的某个元组t1参照了关系关系R2的某个元组t2,则t2必须存在。
例如关系Student在D#上的取值有两种可能:
- 空值,表示该学生尚未分到任何系中
- 若非空值,则必须是Dept关系中某个元组的D#值,该学生不可能分到不存在的系中

用户自定义完整性
用户针对具体的应用环境定义的完整性约束条件
如S#要求是10位整数,其中前四位为年度,当前年度与他们的差必须在4 以内。
再如:

DBMS对关系完整性的支持
实体完整性和参照完整性由DBMS系统自动支持
DBMS 系统通常提供了如下机制:
- 它使用户可以自行定义有关的完整性约束条件
- 当有更新操作发生时,DBMS将自动按照完整性约束条件检验更新操作的正确性,即是否符合用户自定义的完整性。
小结

- 本文标题:数据库系统
- 本文作者:y4ny4n
- 创建时间:2021-01-03 13:12:15
- 本文链接:https://y4ny4n.cn/2021/01/03/DB/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!








