数据库
第一章
三种数据管理技术和优缺点
-
人工管理
-
文件系统
共享性差,冗余度大
-
数据库系统
特点:
-
数据整体结构化
不是针对某一个应用,而是面向全组织;不仅数据内部结构化,数据整体也是结构化的,数据之间有联系;数据记录是变长的;数据最小存取单位是数据项。
-
数据共享性高、冗余度低且易扩充
可以被多个应用、用户共享使用;低冗余节省空间,使系统易于扩充。
-
数据独立性高
物理独立性:应用和数据的物理存储是独立的,物理存储改变,应用程序不变。
逻辑独立性:应用和数据的逻辑结构是独立的,逻辑结构改变,应用程序不变。
数据独立性由数据库管理系统的二级映像功能来保证。
-
数据由数据库管理系统统一管理
数据的安全性保护;数据的完整性检查;并发控制;数据库恢复。
-
数据模型
-
概念模型(信息模型)
从用户的角度对数据和信息进行建模
-
逻辑模型和物理模型
-
逻辑模型
主要包括网状模型、层次模型、关系模型、面向对象数据模型、对象关系数据模型、半结构化数据模型等。从计算机系统的角度建模。用于DBMS实现。
-
物理模型
数据最底层的抽象,描述数据在系统内部的表示方式和存取方法,在磁盘或磁带上的存储方式和存取方法。
-
客观对象的抽象过程:
- 将显示世界抽象为概念模型(信息模型)
- 将概念模型抽象为DBMS支持的数据模型
- 逻辑模型到物理模型(DBMS完成)
概念模型
实体-联系法
- 实体:客观存在并可相互区别的事物称为实体
- 属性:实体具有的某一特性,一个实体可以由若干个属性来刻画
- 码:唯一标识实体的属性集称为码
- 实体型(实体模型):用实体名及其属性名集合来抽象和刻画同类实体称为实体型
- 实体集:同一类型实体的集合称为实体集
- 联系: 现实世界中事物内部以及事物之间的联系在信息世界中反应为实体内部和实体之间的联系;实体內部的联系通常是指实体的属性之间的联系;实体之间的联系通常是指不同实体集之间的联系;实体之间的联系通常有一对一、一对多、多对多等。
实体-联系图/E-R图
实体矩形,属性椭圆、联系菱形,实体和属性之间用无向边连接,
1.png数据模型组成(三要素记住)
数据结构
描述数据库的组成对象以及对象之间的联系,是对系统静态特性的描述
内容:与对象的类型内容性质有关,也与数据之间的联系有关
数据操作
对数据库中对象和实例的操作集合,增删查改,是对系统动态特性的描述
完整性约束条件
一组完整性规则的集合
完整性规则:给定数据模型中数据及其联系所具有的制约和依存规则,用于限制数据模型的状态及状态变化,以保证数据的正确、有效和相容。
常用的数据模型
层次模型和网状模型称为非关系模型,关系模型、面向对象关系模型、对象关系数据模型、半结构化数据模型
层次模型
是用树形结构来表示实体以及实体之间的联系,满足以下两个条件的基本层次结构的集合称为层次模型
- 有且只有一个节点没有双亲结点,称为根节点
- 根以外的节点有且只有一个双亲节点
层次模型的术语
- 根节点
- 双亲结点
- 兄弟节点
- 叶节点(子节点)
特点:双亲结点是唯一的;只能直接处理一对多的实体联系;每个记录类型可以定义一个排序字段(码字段);任何记录值只有按其路径查看才能显出它的全部意义;没有一个子女记录能脱离双亲记录值而独立存在。
完整性约束:
- 不能插入无双亲的子节点
- 如果删除双亲节点,则所有子节点也被删除
- 更新操作数,应更新所有对应记录以保证数据的一致性
优点:
- 数据结构简单清晰
- 查询效率高于关系模型,不低于网状模型
- 提供了良好的完整性支持
缺点:
- 多对多表示不自然
- 对插入和删除操作的限制多,程序编写复杂
- 查询子节点必须经过双亲节点
- 层次命令趋于程序化
网状模型
满足以下条件:
- 允许一个以上的节点无双亲
- 一个节点可以有一个以上的双亲
层次模型是网状模型的一个特例,网状模型中父子节点的联系可以不唯一,要为每个联系命名并指出与该联系有关的父子节点
优点:
- 更直观的描述现实世界
- 具有良好的性能,存取效率高
缺点:
- 结构复杂,随着数据的增多,数据越来越复杂不利于维护
- DDL、DML语言复杂
- 记录之间的联系是通过存取路径实现的,用户必须了解系统结构的细节
关系模型
逻辑结构是一个二维表,由行和列组成
- 关系:即一张表
- 元组:一行
- 属性:列
- 主码
- 域:一组具有相同数据类型的值的集合,属性的取值范围
- 分量:元组中的一个属性值
- 关系模式:对关系的描述,即实体型,下划线的属性是主码
关系模型的规范:
- 每一个分量都是密不可分的数据项,数据项是关系模型中的最小操作单位,即不允许表中有表
优点:
- 建立在严格的数学概念的基础上
- 概念单一,实体和各类联系以及对数据的检索结果都用关系来表示
- 关系模式的存取路径对用户透明,有更高的数据独立性和安全保密性,简化了程序员的工作和数据库开发的工作
缺点:
- 查询效率低,需要另外增加对查询的优化
数据库系统的结构
模式:schema,是型的描述,反应的是数据的结构和联系,是静态的
实例:instance,模式的具体值,是某一时刻的状态,是动态的,一个模式可以有多个实例
三级模式
- 模式:定义和值
- 外模式:使用管理,通常是模式的子集,一个模式可能有多个外模式,一个外模式可以供多个应用使用
- 保证数据安全性
- 每个用户只能访问对应外模式中的数据
- 内模式:存储管理:一个数据库只有一个内模式
二级=映像功能与数据独立性
- 外模式到模式的映射
- 模式到内模式的映射
数据的逻辑独立性
应用程序(外模式)与数据库的逻辑结构(模式)是相互独立的,即数据的逻辑结构发生改变,应用程序不用改变
外模式/模式映象定义了外模式与模式之间的对应关系,当模式改变时,只需修改外模式/模式映象,使外模式保持不变,而应用程序时是根据外模式编写的,因次不需要修改外部程序,保证了数据与程序的逻辑独立性
数据的物理独立性
应用程序(外模式)与存储在磁盘上的数据库(文件)中的存储结构(内模式)是相互独立的。数据文件的组织方式改变不需要修改应用程序
模式/内模式映象定义了数据全局逻辑结构与存储结构之间的对于关系,当存储结构改变,只需修改模式/内模式映象,使模式保持不变。同样不需要修改应用程序,保证了数据与程序的物理独立性
第二章
关系数据结构及形式化定义
- 域:一类具有相同数据类型的值的集合
- 笛卡尔积:给定一组域D1,...Dn,其笛卡尔积D1*...*Dn={(d1,...,dn)|di=1,...,n}。其中(d1,...dn)称为元组,di称为元组的第i个分量,D1*...*Dn的一个子集叫做该域上的关系,定义在n个域上的关系称为n元关系。有些笛卡尔积可能没有意义
关系的6个性质:
- 列是同质的
- 不同的列可以出自同一个域
- 列序无关性
- 任意两个元组不能完全相同
- 行序无关行
- 分量必须取原子值
几个概念:
- 候选码:能够唯一标识元组的属性
- 主码:候选码中选择一个作为主码
- 主属性:出现在候选码中的属性
- 非主属性:不出现在候选码中的属性
关系操作
4.png关系的完整性
-
实体完整性
主属性不能取空值
-
参照系统完整性
外码只能取空值或者对于关系中包含的主码,不能取未出现的值
-
用户定义完整性
对某些属性进行约束
关系代数
以集合为基础,定义一组运算,由已知关系经过一系列运行,得到需要的查询结果,关系代数是过程化的查询语言
关系代数继承传统的集合运算:交、并、差、广义笛卡尔积。其中交并差要求参与运算的两个关系要由相同的结构。
专门的关系运算:
选择
其中F是条件,一般为一个逻辑表达式
投影
从R中选择出若干属性组成新的关系
其中A为要取出的R中的列的集合
注:投影之后不仅取消了原关系中的某些列,还可能取消某些行(避免重复行)
连接
5.png同样需要取消重复列
两种常用的连接运算
- 等值连接:A=B
- 自然连接:特殊的等值连接,要求条件中的两个列必须是同名的,并在结果中合并
几种特殊的自然连接:
- 左外连接:保留左侧不匹配的,NULL填充,下同
- 右外连接:保留右侧不匹配的
- 外连接:保留不匹配的
- 内连接:丢弃不匹配的(一般的自然连接)
象集
6.png除法
整除,类似取样性质,需要取样时会用到除法
7.png对于共同属性的判断,是域相同而不是属性名相同,但通常是指公共属性
各类符号
8.png关系演算
9.png看PPT
SQL
在mysql中,create database和create schema是等价的
一些sql关键字:
- authorization:指定所有者
- primary key:指定主键,主键指定的属性不能用unique和not null修饰
- unique:唯一性约束,但可以有多个空值
- foreign key (<column.name>) references <table.name>(<column.name>)
- distinct:消除重复组。select distinct * from table.name
- between and/not between and
- in/not in
- like:%通配符,_单通配符/not like
- desc降序/asc升序
- group by:分组并使集函数分别作用于每个组
- intesect:返回两个select查询中相同的部分
索引
- 普通索引
- 单一索引:对索引加上unique约束,create unique index table.name(column.name)
- 聚簇索引:会改变内模式
自身连接
select a.con, b.conp from course a,course b;取别名
13.png嵌套查询中子查询不能使用order by语句
14.png子查询时,子查询语句要放在等号后面
相关子查询:子查询的条件与父查询当前值相关。相关子查询如果子查询和父查询是对同一个数据库操作,必须使用别名。如果是不相关子查询也可以不用别名。
集函数不能出现在where字句中,只能在select字句和having短句中。集函数不能嵌套。
15.pngfrom语句后的表也可以是子查询,但必须使用别名
数据更新时会检查完整性规则:
- 实体完整性
- 参照完整性
- 用户定义完整性
视图view
和表操作基本一致,但是view不占用实际存储空间,而是在使用时从表中获取临时数据集,视图对应外模式。
视图的作用:
简化用户操作,使多用户从多个角度看待同一数据,保证数据的逻辑独立性,提供数据保密
数据完整性
三个要求:
- 提供定义完整性约束条件(可定义)
- 提供完整性检查的方法(可检查)
- 违约处理(可处理)
实体完整性
定义
-
列级约束定义
在建表时的列声明后加上码约束,单属性码
-
表级主码约束
在建表时列声明完成侯最后进行码约束,单属性或多属性码
检查
DBMS检查:
-
主码是否唯一
-
全表扫描
耗时
-
索引
DBMS在主码上自动建立索引
- B+树索引
-
-
检查主码是否为空
参照完整性
定义
- foreign key创建2外码约束
- references指明外码参照的表和其属性
- 外码定义时需要定义外码是否允许为空
检查
- 附表插入元组中的外码在主表中没有对应的主码
- 附表修改元组中的外码在主表中没有对应的主码
- 主表中删除一个元组导致附表中的元组外码对应缺失
- 主表中修改一个元组导致附表中的元组外码对应缺失
处理:
附表操作:拒绝
主表操作:拒绝/级连删除/附表中对应外码设空
用户定义完整性
属性约束
定义
表声明列定义时添加的约束:
- 列值非空:NOT NULL
- 列值唯一:UNIQUE
- 列值检查:CHECK
检查和处理
拒绝
元组约束
定义
表声明列定义时使用CHECK语句建立,可以设置同一组不同属性之间的约束
检查和处理
拒绝
完整性约束命名字句
定义
constraint <约束名> <约束条件>
约束条件包括:
- not null
- unique
- primary key
- foreign kry
- check
修改
alter table <table.name> (drop/add) constraint <constraint.name>
断言
create assertion语句创建断言
create assertion <assertion.name> <条件>
对断言中涉及的关系进行操作都会触发断言,不能通过断言的操作都会被拒绝
触发器
定义
create trigger <触发器名>
{before/after} <触发事件> on <表名>
referencing new/old row as <变量>
for each {row/statement}
[when <触发条件>]<触发动作体>
触发器又叫:事件-条件-动作;触发器只能定义在基本表上,不能定义在视图上;基本表数据发生变化时,将激活定义在该表上相应的触发器
before/after指定触发动作执行的时间;触发事件是insert\delete\update或者他们的组合,或update of <列名,...>指定触发列;row/statement指定触发器级别,语句级触发器每条语句最多触发一次,行级触发器每行最多触发一次
关系数据理论
数据依赖
一个关系内部属性与属性之间的一种约束关系,是现实世界属性间相互联系的抽象,是数据的内在性质,是语义的体现。
规范化
函数依赖
由一个属性可以唯一确定另一个属性,称为函数依赖(类似函数关系)。如学号可以唯一确定姓名。
通过依赖将模式分解。
16.png平凡函数依赖与非平凡函数依赖
17.png若X->Y,则称X为这个函数依赖的决定因素
-
完全函数依赖
X->Y,X的任何真子集,不能决定Y,称为完全函数依赖
-
部分函数依赖
X->Y,X的某个真子集也能决定Y,称为部分函数依赖
-
传递函数依赖
20.png
码
-
全码
关系中,所有属性共同决定组成候选码,任意部分都不能组成候选码,改码称为主码
-
候选码
-
主码
-
外码
范式
- 1NF
- 2NF
- 3NF
- BCNF
- 4NF
- 5NF
第一范式
表项不可再分
第二范式
每个表都有主码
任何一个非主属性,都完全依赖于候选码
例如主码(学号,课程号),非主属性(成绩,姓名),其中非主属性姓名不是主码的完全依赖(只依赖于学号),那么该关系不属于第二范式
尽量让主码为单一字段
将不符合第二范式的模式分解,使其符合第二范式
22.png第三范式
不存在非主属性之间的传递依赖
BCNF
只有候选码能决定属性组
网友评论