教材:数据库系统概论(第五版)
出版社:高等教育出版社
定义:
- 数据(Data)是数据库中存储的基本对象
- 数据是描述事物的符号记录
- 数据的含义称为数据的语义,数据与其语义是不可分的
定义:是长期储存 在计算机内、有组织 的、可共享 的大量数据的集合
基本特点:永久储存、有组织、可共享
3. 数据库管理系统(DBMS)定义:
- 位于用户与操作系统之间的一层数据管理软件
- 是基础软件,是一个大型复杂的软件系统
主要功能:
- 数据定义功能
- 数据的组织、存储和管理
- 数据操纵功能
- 数据库的事务管理和运行管理
- 数据库的建立和维护
定义:是由数据库、数据库管理系统(及其应用开发工具)、应用程序和数据库管理员(DBA)组成的存储、管理、处理和维护数据的系统
特点:
-
数据结构化:数据库主要特征之一,与文件系统的本质区别
-
数据共享性高、冗余度低且易拓展
-
数据独立性高:物理独立性和逻辑独立性
数据独立性是由DBMS提供的二级映像保证的
-
数据由DBMS统一管理和控制
- 人工管理阶段
- 文件系统阶段
- 数据可以长期保存
- 由文件系统管理数据
- 数据共享性差,冗余度大
- 数据独立性差
- 数据库系统阶段
- 数据结构化(主要特征,与文件系统的本质区别)
- 数据共享性高、冗余度低且易扩充
- 数据独立性高
- 数据由DBMS统一管理和控制
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-riYvVBgp-1640256050972)(C:UsersadminAppDataRoamingTyporatypora-user-imagesimage-20211211091004850.png)]
1.2 数据模型定义:是对现实世界数据特征的抽象
数据模型是数据库的核心和基础
1.2.1 两大类数据模型 数据建模的三大要求:
-
能比较真实地模拟现实世界
-
容易为人所理解
-
便于在计算机上实现
- 概念模型,也称信息模型,它是按用户的观点来对数据和信息建模,用于数据库设计。
- 逻辑模型和物理模型
- 逻辑模型主要包括网状模型、层次模型、关系模型、面向对象数据模型、对象关系数据模型、半结构化数据模型等。按计算机系统的观点对数据建模,用于DBMS实现。
- 物理模型是对数据最底层的抽象,描述数据在系统内部的表示方式和存取方法,在磁盘或磁带上的存储方式和存取方法。
-
实体(可以是具体的人事物,也可以是抽象的概念和联系)
-
属性(描述实体所具有的某一特征,如学生实体可以由学号等属性组成)
-
码(唯一标识实体的属性集)
-
实体型(比如学生)
-
实体集(同一类型实体的集合,比如全体学生)
-
联系(实体集之间的联系通常是指不同实体集之间的联系)
一对一(一个班级一个班长)、一对多(一个班级多位学生)、多对多(课程和学生之间的联系)
-
实体-联系方法(E-R方法/E-R模型)//第七章
- 数据结构(静态特性)
- 数据操作(动态特性)
- 数据的完整性约束条件
在数据库的非关系模型中,基本层次联系是指两个记录以及它们之间的一对多(含一对一)的联系
1.2.7 关系模型关系模型是最重要的一种数据模型
1. 数据结构- 关系:表
- 元组:行
- 属性:列
- 码:表里的某个属性组,它可以唯一确定一个元组
- 域:一组具有相同数据类型的集合
- 分量:元组中的一个属性值
- 关系模式:对关系的描述
关系的每一个分量必须是一个不可拆分的数据项:不允许表中有表
2. 数据操控和完整性约束-
数据操控:查询、插入、更新和删除数据
关系模型中的数据操作都是集合操作,操作对象和操作结果都是关系
-
完整性约束条件:实体完整性、参照完整性和用户定义完整性
略.
1.3 数据库系统的结构数据库系统通常采用三级模式结构
数据库的二级映像功能
1.3.2 三级模式结构-
模式(逻辑模式):是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。
模式是相对稳定的,实例是相对变动的
一个数据库只有一个模式
-
外模式(子模式/用户模式):用户能看到、使用的局部数据的逻辑结构和特征的描述,是DB用户的数据视图,是与某一应用有关的数据的逻辑表示
外模式是模式的子集
一个数据库可以有多个外模式
-
内模式(存储模式):是数据物理结构和存储方式的描述,是数据在数据库内部的组织方式
-
一个数据库只有一个内模式
模式:概念级抽象 外模式:视图级抽象 内模式:物理级抽象
1.3.3 二级映像功能和数据独立性 1. 外模式/模式映像- 模式描述的是数据的全局逻辑结构
- 外模式描述的是数据的局部逻辑结构
- 同一个模式可以有任意多个外模式
- 每一个外模式,数据库系统都有一个外模式/模式映象,定义外模式与模式之间的对应关系
- 映象定义通常包含在各自外模式的描述中
当模式改变时,由数据库管理员对映像做相应改变,可使外模式保持不变,而应用程序是根据外模式编写的,从而应用模式不用更改,保证了数据和程序的逻辑独立性。
2. 模式/内模式映像- 数据库中只有一个模式,也只有一个内模式,所以模式/内模式映像是唯一的
- 定义了数据全局逻辑结构与存储结构之间的对应关系
当数据库的存储结构改变了(例如选用了另一种存储结构),数据库管理员修改模式/内模式映象,使模式保持不变,从而应用程序不受影响。保证了数据与程序的物理独立性,简称数据的物理独立性。
1.4 数据库系统的组成数据库系统由DB、DBMS、应用软件和DBA构成。
数据库管理员的工作职责:
- 决定数据库中的信息内容和结构。
- 决定数据库的存储结构和存取策略。
- 定义数据的安全性要求和完整性约束条件。
- 监控数据库的使用和运行。
- 数据库的改进和重组、重构。
关系数据库系统:是支持关系模型的数据库系统
关系模型:由关系数据结构、关系操作集合和关系完整性约束三部分组成
关系模型的基础:集合代数
2.1 关系数据结构及形式化定义关系模型的数据结构(单一):关系
2.1.1 关系 1. 域- 一组具有相同数据类型的值的集合
- 定义了列的取值范围
- 是域上的一种集合运算
- 笛卡尔积可表示为一张二维表
- 表中的每行对应一个元组,表中的每列对应一个域
给定一组域D1,D2,D3…Dn的笛卡尔积为D1×D2×D3…×Dn = {( d 1 , d 2 , … , d n )|di 属于Di }
-
元组
- 笛卡尔积中每一个元素( d 1 , d 2 , … , d n )叫作一个n元组(n-tuple)或简称元组
- 笛卡尔积元素中的每一个值 d i叫作一个分量
-
基数
一个域允许的不同取值个数称为这个域的基数
- 是笛卡尔积的一个有实际意义的有限子集
- 是元组的集合
- D 1 × D 2 × … × D n的有实际意义子集叫作在域D 1 , D 2 , … , D n 上的关系,常常表示为R ( D 1 , D 2 , … , D n
- R:关系名
- n:关系的目或度(Degree)
- 当n=1时,称该关系为单元关系或一元关系
- 当n=2时,称该关系为二元关系
关系中的某一组属性集能*唯一的标识*一个元组,而它的子集不能
候选码可以有多个
(3)主码若一个关系中有多个候选码,则选定其中一个作为主码(人为指定)
主码只有一个,唯一标识一个元组
(4)主属性组成候选码的属性
(5)非主属性/非码属性不包含在任何侯选码中的属性
(6)关系的三种类型- 基本关系(基本表/基表)
- 查询表(临时表)
- 视图表(是虚表,不对应实际存储的数据)
- 列是同质的:列中的分量是同类型数据,来自同一个域
- 不同的列可出自同一个域,其中的每一列称为一个属性,不同的属性要给予不同的属性名
- 列的顺序无所谓,列的次序可以任意交换
- 任意两个元组的候选码不能相同
- 行的顺序无所谓,行的次序可以任意交换
- *(最基本的规范化条件)*分量必须取原子值。即每个分量都是不可分的数据项 (属性是不可分割的数据项)
是对关系的描述(有哪些属性,各个属性之间的依赖关系如何)
1. 关系模式的表示关系模式可以形式化地表示为:R(U,D,DOM,F)
-
R:关系名
-
U:组成该关系的属性名集合
-
D:U中属性所来自的域
-
DOM:属性向域的映象集合
-
F:属性间数据的依赖关系的集合
可以简记为R (U)或R ( A 1 , A 2 , … , A n ) R (A_1,A_2,…,A_n)R(A1,A2,…,A**n)
-
A 1 , A 2 , … , A n A_1,A_2,…,A_nA1,A2,…,A**n : 属性名
如:学生(学号,姓名,年龄,性别,系名,年级)
-
- 关系模式是型;关系是值
- 关系模式是静态的、稳定的;关系是动态的,随时间不断变化的。
- 关系模式是对关系的描述;关系是关系模式在某一时刻的状态或内容
在一个给定的应用领域中,所有关系的集合构成一个关系数据库
关系数据库的型: 关系数据库模式,是对关系数据库的描述
关系数据库的值: 关系模式在某一时刻对应的关系的集合,通常称为关系数据库
2.1.4 关系模型的存储结构- 有的关系数据库管理系统中一个表对应一个操作系统文件,将物理数据组织交给操作系统完成
- 有的关系数据库管理系统从操作系统那里申请若干个大的文件,自己划分文件空间,组织表、索引等存储结构,并进行存储管理;
-
查询
选择、投影、连接、除、并、交、差
-
数据更新
插入、删除、修改
集合操作方式:操作的对象和结果都是集合,也称为一次一集合的方式
2.3 关系的完整性-
实体完整性和参照完整性
是关系模型必须满足的完整性约束条件称为关系的两个不变性,应该由关系系统自动支持
-
用户定义的完整性
应用领域需要遵循的约束条件,体现了具体领域中的语义约束
若属性A是基本关系R的主属性,则属性A不能取空值 (主属性不能取空值)
2. 参照完整性若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:
- 或者取空值(F的每个属性值均为空值)
- 或者等于S中某个元组的主码值
学生(学号,姓名,性别,专业号,年龄,班长)
- “班长”是外码
- 学生关系既是参照关系也是被参照关系
“班长”属性值(外码)可以取两类值:
- 空值,表示该学生所在班级尚未选出班长
- 非空值,该值必须是本关系中某个元组的学号值
设F是基本关系R的一个或一组属性,但不是关系R的码。如果F与基本关系S的主码Ks相对应,则称F是R的外码。(F是R中一个或一组属性,但不是R的码,是S的主码,则F是R的外码)
- 基本关系R称为参照关系
- 基本关系S称为被参照关系或目标关系
- 关系R和S不一定是不同的关系(如班长与学号的例子)
- 目标关系S的主码Ks 和参照关系的外码F必须定义在同一个(或一组)域上
- 外码并不一定要与相应的主码同名(当外码与相应的主码属于不同关系时,往往取相同的名字,以便于识别)
学生(学号,姓名,性别,专业号,年龄)
专业(专业号,专业名)
- “专业号”属性是学生关系的外码
- 专业关系是被参照关系,学生关系为参照关系
关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不需由应用程序承担这一功能
2.4 关系代数是一种抽象的查询语言,它用对关系的运算来表达查询
运算三大要素:
- 运算对象(关系)
- 运算符(集合运算符和专门的关系运算符)
- 运算结果(关系)
R ∪ S = { t ∣ t ∈ R ∨ t ∈ S } R∪S = { t|t∈R∨t ∈S }R∪S={t∣t∈R∨t∈S}
仍为n目关系,由属于R或属于S的元组组成
2. 差R − S = { t ∣ t ∈ R ∧ t ∉ S } R -S = { t|t∈R∧t∉S }R−S={t∣t∈R∧t∈/S}
仍为n目关系,由属于R而不属于S的所有元组组成
3. 交R ∩ S = { t ∣ t ∈ R ∧ t ∈ S } R∩S = { t|t∈R∧t∈S }R∩S={t∣t∈R∧t∈S}
仍为n目关系,由既属于R又属于S的元组组成
4. 笛卡尔积无条件的头尾连接
- R : n 目 关 系 , k 1 个 元 组 、R: n目关系,k_1个元组、R:n目关系,k1个元组
- S : m 目 关 系 , k 2 个 元 组 、S: m目关系,k_2个元组、S:m目关系,k2个元组
R×S :
- 列:( n + m ) (n+m)(n+m)列元组的集合
元组的前n列是关系R的一个元组
元组的后m列是关系S的一个元组
- 行:k 1 × k 2、 k_1 × k_2、k1×k2个元组
设关系模式为R ( A 1 , A 2 , … , A n ) R(A_1,A_2,…,A_n)R(A1,A2,…,A**n)
它的一个关系设为R
t ∈ R t∈Rt∈R表示t是R的一个元组
t [ A i ] t[A_i]t[A**i]则表示元组t中相应于属性A i A_iA**i的一个分量
(2)剩余属性组 (3)元组的连接 (4)象集本质上是一次选择行的运算和一次选择列的运算
-
给定一个关系R ( X , Z ) R(X,Z)R(X,Z),X和Z为属性组
-
当t [ X ] = x t[X]=xt[X]=x时,x在R中的象集(Images Set)为:
Z x = { t [ Z ] ∣ t ∈ R , t [ X ] = x } Z_x={t[Z]|t∈R,t[X]=x}Z**x={t[Z]∣t∈R,t[X]=x}
- 它表示R中属性组X上值为x的诸元组在Z上分量的集合
-
本质上是一次选择行的运算和一次选择列的运算
-
求x 1 x_1x1在表A中的象集
- 先选出所有x属性中x = x 1 x=x_1x=x1的那些行
- 然后选择出不包含x1的那些列
从行的角度进行的运算
-
在关系R中选择满足给定条件的诸元组
-
σ F ( R ) = { t ∣ t ∈ R ∧ F ( t ) = ′ 真 ′ } σ_{F®} = {t|t∈R∧F(t)= ‘真’}σ**F(R)={t∣t∈R∧F(t)=′真′}
-
F:选择条件,是一个逻辑表达式,取值为“真”或“假”
-
F = X 1 θ Y 1 F = X_1θY_1F=X1θ**Y1
-
θ表示比较运算符
-
例:查询信息系(IS系)全体学生
σ S d e p t = ‘ I S ( S t u d e n t ) ′ σ_{Sdept} = ‘IS’ _{(Student)}σSdep**t=‘I**S(Student)′
-
主要是从列的角度进行运算
-
从R中选择出若干属性列组成新的关系
-
投影不仅取消了原关系中的某些列,而且还会取消完全相同的行
-
π A ( R ) = { t [ A ] ∣ t ∈ R } π_{A®} = { t[A] | t∈R }π**A(R)={t[A]∣t∈R}
-
A:R中的属性列
-
例:查询学生的姓名和所在系
π S n a m e , S d e p t ( S t u d e n t ) π_{Sname,Sdept}(Student)πSnam**e,Sdept(Student)
-
从行的角度进行运算
- 也称θ连接
- 从两个关系的笛卡尔积中选取属性间满足一定条件的元组
- θ为“=”时的θ连接
- 自然连接还需要取消重复列,所以是同时从行和列的角度进行运算
- 是特殊的等值联结
- 两个关系中进行比较的分量必须是相同的属性组
- 在结果中把重复的属性列去掉
- 两个关系R和S在做自然连接时,关系R中某些元组有可能在S中不存在公共属性上值相等的元组,从而造成R中这些元组在操作时被舍弃了,这些被舍弃的元组称为悬浮元组
- 如果把悬浮元组也保存在结果关系中,而在其他属性上填空值(Null),就叫做外连接
- 左外连接只保留左边关系R中的悬浮元组
- 右外连接只保留右边关系S中的悬浮元组
同时从行和列角度进行运算
对于表A和表B,求A÷B
- 找出表B中与A属性相同的那些列
- 求表A中各个不同x对应的象集
- 找表A中的x,这个x要满足:表B是x的象集的子集
SQL:结构化查询语言,是关系数据库的标准语言
3.1 SQL概述 SQL的特点- 综合统一
- 高度非过程化(必须指定存取路径)
- 面向集合的操作方式
- 以同一种语法结构提供两种使用方法:交互式和嵌入式
- 语言简洁,易学易用
数据库(有的系统称为目录)→ 模式 → 表以及视图、索引等
- 一个关系数据库管理系统的实例(Instance)中可以建立多个数据库
- 一个数据库中可以建立多个模式
- 一个模式下通常包括多个表、视图和索引等数据库对象
这里的模式,不是关系模式,也不是三级模式结构中的模式,指的是数据库管理系统(软件)的一个层次,也是实际的一个用户数据库
1. 定义模式CREATE SCHEMA AUTHORIZATION 1
定义数据库模式实际上定义了一个命名空间
2. 删除模式DROp SCHEMA 1(1)CASCADE(级联)
删除模式的同时把该模式中所有的数据库对象全部删除
(2)RESTRICT(限制)- 如果该模式中定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行。
- 仅当该模式中没有任何下属的对象时才能执行。
CREATE TABLE <表名>
(<列名> <数据类型>[ <列级完整性约束条件> ]
[,<列名> <数据类型>[ <列级完整性约束条件>] ]
…
[,<表级完整性约束条件> ] );
CREATE TABLE Student
(Sno CHAR(9) PRIMARY KEY,
Sname CHAR(20) UNIQUE,
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);
1234567891011121314
常用完整性约束
- 主码约束:PRIMARY KEY
- 唯一性约束:UNIQUE
- 非空值约束:NOT NULL
- 参照完整性约束 FOREIGN KEY
ALTER TABLE <表名> [ ADD <新列名> <数据类型> [ 完整性约束 ] ] [ DROP <完整性约束名> ] [ ALTER COLUMN <列名> <数据类型> ]; ALTER TABLE Student ADD S_entrance DATE; 123456
- <表名>:要修改的基本表
- ADD子句:增加新列和新的完整性约束条件
- DROP子句:删除表中的列和删除指定的完整性约束条件
- ALTER COLUMN子句:用于修改列名和数据类型
直接删除属性列:
例:ALTER TABLE Student Drop Scome;
3.3.3 索引的建立与删除建立索引的目的:加快查询速度
索引类型:
- 顺序文件上的索引
- B+树索引(具有动态平衡的优点)
- 散列(hash)索引(具有查找速度快的特点)
- 位图索引
- 采用B+树
CREATE [UNIQUE] [CLUSTER] [NONCLUSTERED] INDEX <索引名> ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]…); 12
- <表名>:要建索引的基本表的名字
- 索引:可以建立在该表的一列或多列上,各列名之间用逗号分隔
- <次序>:指定索引值的排列次序,升序:ASC,降序:DESC,缺省值:ASC
- UNIQUE:此索引的每一个索引值只对应唯一的数据记录
- CLUSTER:表示要建立的索引是聚簇索引
- NONCLUSTERED:创建非聚集索引。缺省是创建非聚集索引
SC表按学号升序和课程号降序建唯一索引
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC); 12. 修改索引
ALTER INDEX <旧索引名> RENAME TO <新索引名> 1例子
将SC表的SCno索引名改为SCSno
ALTER INDEX SCno RENAME TO SCSno; 13. 删除索引
DROP INDEX <索引名>;DROP INDEX <表名>.<索引名>12例子
删除Student表的Stusname索引
DROP INDEX Stusname;13.3.4 数据字典
数据字典是关系数据库管理系统内部的一组系统表,它记录了数据库中所有定义信息
- 关系模式定义
- 视图定义
- 索引定义
- 完整性约束定义
- 各类用户对数据库的操作权限
- 统计信息等
关系数据库管理系统在执行SQL的数据定义语句时,实际上就是在更新数据字典表中的相应信息
3.4 数据查询SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表达式>] … FROM <表名或视图名>[,<表名或视图名> ]…|(SELECt 语句) [AS]<别名>[ WHERe <条件表达式> ][ GROUP BY <列名1> [ HAVINg <条件表达式> ] ][ ORDER BY <列名2> [ ASC|DESC ] ];123456
- SELECT子句:指定要显示的属性列
- FROM子句:指定查询对象(基本表或视图)
- WHERe子句:指定查询条件
- GROUPBY子句:对查询结果按指定列的值分组,该属性列值相等的元组为一个组。通常会在每组中作用聚集函数。
- HAVINg短语:只有满足指定条件的组才予以输出
- ORDER BY子句:对查询结果表按指定列值的升序或降序排序
查询仅涉及一个表
1. 选择表中的若干列查询全部列:SELECt * FROM Student;
2. 选择表中的若干元组 (1)消除取值重复的行指定DISTINCT关键词,去掉表中重复的行(作用范围是所有目标列)
(2)查询满足条件的元组- 确定范围
- BETWEEN … AND …
- NOT BETWEEN … AND …
- 确定集合
- IN
- NOT IN
- 例:WHERe Sdept IN ('CS','MA’,'IS' );
- 字符匹配
- [NOT] LIKE ‘<匹配串>’
- 当匹配模板为固定字符串时:
- 可以用 = 运算符取代 LIKE 谓词
- 用 != 或 < >运算符取代 NOT LIKE 谓词
- 匹配串:
- % (百分号) 代表任意长度(长度可以为0)的字符串
- _ (下横线) 代表任意单个字符。
- [ ]:匹配[ ]中的任意一个字符
- [^ ]:不匹配[ ]中的任意一个字符
- 涉及空值的查询
- IS NULL
- IS NOT NULL
- 多重条件查询
- AND和 OR来连接多个查询条件
可以按一个或多个属性列排序
例:ORDER BY Grade DESC;
4. 聚集函数聚合函数就用来输入多个数据,输出一个数据的
WHERe子句中不能用聚集函数作为条件表达式。聚集函数只能用于SELECt子句和GROUP BY
中的HAVINg子句
-
统计元组个数
COUNT(*)1
-
统计一列中值的个数
COUNT([DISTINCT|ALL] <列名>)1
-
计算一列值的总和(此列必须为数值型)
SUM([DISTINCT|ALL] <列名>) 1
-
计算一列值的平均值(此列必须为数值型)
AVG([DISTINCT|ALL] <列名>)1
-
求一列中的最大值和最小值
MAX([DISTINCT|ALL] <列名>)MIN([DISTINCT|ALL] <列名>)12
- 如果未对查询结果分组,聚集函数将作用于整个查询结果
- 对查询结果分组后,聚集函数将分别作用于每个组
- 按指定的一列或多列值分组,值相等的为一组
- GROUP BY子句的作用对象是查询的中间结果表
等值连接:连接运算符为=
2. 自身连接- 一个表与其自己进行连接
- 需要给表起别名以示区别
- 由于所有属性名都是同名属性,因此必须使用别名前缀
查询每一门课的间接先修课(即先修课的先修课)
SELECT FIRST.Cno, SECOND.Cpno FROM Course FIRST, Course SECOND WHERe FIRST.Cpno = SECOND.Cno;1233. 多表连接
查询每个学生的学号、姓名、选修的课程名及成绩
SELECt Student.Sno, Sname, Cname, Grade FROM Student, SC, Course WHERe Student.Sno = SC.Sno AND SC.Cno = Course.Cno;12343.4.3 嵌套查询
将一个查询块嵌套在另一个查询块的WHERe子句或HAVINg短语的条件中的查询称为嵌套查询
3.4.4 集合查询种类:
- 并操作UNIOn
- 参加UNIOn操作的各结果表的列数必须相同;对应项的数据类型也必须相同
- 自动去掉重复元组,如果要保留重复元组,用ALL。
- 交操作INTERSECT
- 差操作EXCEPT
子查询不仅可以出现在WHERe子句中,还可以出现在FROM子句中,这时子查询生成的临时派生表成为主查询的查询对象
3.5 数据更新 3.5.1 插入数据 1. 两种插入数据方式 (1) 插入元组INSERTINTO <表名> [(<属性列1>[,<属性列2 >…)]VALUES (<常量1> [,<常量2>]… );123
INTO子句
- 指定要插入数据的表名及属性列
- 属性列的顺序可与表定义中的顺序可以不一致
- 没有指定属性列:表示要插入的是一条完整的元组,且属性列属性与表定义中的顺序一致
- 指定部分属性列:插入的元组在其余属性列上取空值
例子:将一个新学生元组(学号:201215128;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中。
INSERTINTO StudentVALUES ('201215128','陈冬','男', 18, 'IS');123
(2)插入子查询结果
可以一次插入多个元组
3.5.2 修改数据UPDATe <表名>SET <列名>=<表达式>[,<列名>=<表达式>]…[WHERe <条件>];123
- 修改指定表中满足WHERe子句条件的元组
- SET子句给出的值用于取代相应的属性列
- 如果省略WHERe子句,表示要修改表中的所有元组
例子:将计算机系学生的年龄增加1岁。
UPDATE StudentSET Sage= Sage+1WHERe sdept='cs';1233.5.3 删除数据
DELETE FROM <表名> [WHERe <条件>];1233.6空值的处理
课本P119
-
空值与另一个值(包括空值)算术运算的结果为空值
-
空值与另一个值(包括空值)比较运算的结果为UNKNOWN
视图的特点
- 虚表,是从一个或几个基本表(或视图)导出的表
- 只存放视图的定义,不存放视图对应的数据
- 基表中的数据发生变化,从视图中查询出的数据也随之改变
- 对视图数据的操作最终都会转换为对基本表的操作
CREATE VIEW <视图名> [(<列名> [,<列名>]…)] AS <子查询> [WITH CHECK OPTION];123
组成视图的属性列名:全部省略或全部指定
(1)全部省略:由子查询中SELECt目标列中的诸字段组成
(2)明确指定视图的所有列名:- 某个目标列是聚集函数或列表达式
- 多表连接时选出了几个同名列作为视图的字段
- 需要在视图中为某个列启用新的更合适的名字
关系数据库管理系统执行CREATE
VIEW语句时只是把视图定义存入数据字典,并不执行其中的SELECT语句
若一个视图是从单个基本表导出的,并且只是去掉了基本表的某些行和某些列,保留了主码
(4)带表达式的视图带虚拟列的视图
(5)分组视图 带有GROUPBY子句的查询来定义视图
2. 修改视图 ALTER VIEWALTER VIEW 视图名 [( 列名[ ,...n ] )] AS查询语句 1233. 删除视图 DROP VIEW
DROP VIEW <视图名>[CASCADE];13.7.2 查询视图
略
3.7.3 更新视图 允许对行列子集视图进行更新 3.7.4 视图的作用- 视图能够简化用户的操作
- 视图使用户能以多种角度看待同一数据
- 视图对重构数据库提供了一定程度的逻辑独立性
- 视图能够对机密数据提供安全保护
- 适当的利用视图可以更清晰的表达查询
数据库安全性是指保护数据库以防止不合法使用所造成的数据泄露、更改或破坏。
4.2 数据库安全性控制 4.2.1用户身份鉴别最外层安全保护措施
4.2.2 存取控制存取控制机制主要包括定义用户权限和合法权限检查两部分,两部分一起组成了数据库管理系统的存取控制子系统
常用存取控制方法 (1)自主存取控制(C2级支持)- 用户对不同的数据对象有不同的存取权限
- 不同的用户对同一对象也有不同的权限
- 用户还可将其拥有的存取权限转授给其他用户
- 每一个数据对象被标以一定的密级
- 每一个用户也被授予某一个级别的许可证
- 对于任意一个对象,只有具有合法许可证的用户才可以存取
用户权限是由数据库对象(哪个数据库)和操作类型(哪些操作)组成的。
定义存取权限称为授权
4.2.4 授权:授予与回收PUBLIC:全体用户
1. GRANTGRANT <权限>[,<权限>]... ON <对象类型> <对象名>[,<对象类型> <对象名>]… TO <用户>[,<用户>]... [WITH GRANT OPTION];如果没有该语句则不能传播该权限1234
语义:将对指定操作对象的指定操作权限授予指定的用户
例子把查询Student表权限授给用户U1
GRANT SELECT ON TABLE Student TO U1;123
把对Student表和Course表的全部权限授予用户U2和U3
GRANT ALL PRIVILIGES ON TABLE Student,Course TO U2,U3;1232. REVOKE
REVOKE <权限>[,<权限>]... ON <对象类型> <对象名>[,<对象类型><对象名>]…FROM <用户>[,<用户>]...[CASCADE | RESTRICT];1234.2.5 数据库角色
角色是权限的集合,可以为一组有相同权限的用户创建一个角色,简化授权过程。
角色的创建 CREATE ROLE 4.2.6 强制存取控制方法实现强制存取控制时要首先实现自主存取控制。
1. 强制存取控制规则- (1)仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体
- (2)仅当主体的许可证级别小于或等于客体的密级时,该主体才能写相应的客体
- 如果违反了(2)有可能把数据密级从高流向低,造成数据的泄露
数据的完整性是指数据的正确性和相容性
-
数据的正确性
是指数据是符合现实世界语义,反映了当前实际状况的
-
数据的相容性
是指数据库同一对象在不同关系表中的数据是符合逻辑的
CREATE TABLE中用PRIMARY KEY定义
单属性构成的码有两种说明方法
-
定义为列级约束条件
-
定义为表级约束条件
-
CREATE TABLE Student ( Sno CHAR(9) PRIMARY KEY, Sname CHAR(20) NOT NULL, Ssex CHAR(2), Sage SMALLINT, Sdept CHAR(20) );1234567
对多个属性构成的码只有一种说明方法
- 定义为表级约束条件
入或对主码列进行更新操作时,关系数据库管理系统按照实体完整性规则自动进行检查。包括:
- 检查主码值是否唯一,如果不唯一则拒绝插入或修改
- 全表扫描
- 检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改
在CREATE TABLE中
- 用FOREIGN KEY短语定义哪些列为外码
- 用REFERENCES短语指明这些外码参照哪些表的主码
CREATE TABLE时定义属性上的约束条件
- 列值非空(NOT NULL)
- 列值唯一(UNIQUE)
- 检查列值是否满足一个条件表达式(CHECK)
- 插入元组或修改属性的值时,关系数据库管理系统检查属性上的约束条件是否被满足
- 如果不满足则操作被拒绝执行
在CREATE TABLE时可以用CHECK短语定义元组上的约束条件,即元组级的限制
5.6 断言SQL中,可以使用CREATE ASSERTION语句,通过声明性断言来指定更具一般性的约束。
5.7 触发器触发器(Trigger)是用户定义在关系表上的一类由事件驱动的特殊过程
第六章 关系数据理论 6.1 问题的提出- 关系模式是一个五元组
- R(U, D, DOM, F)
- 关系名R是符号化的元组语义
- U为一组属性
- D为属性组U中的属性所来自的域
- DOM为属性到域的映射
- F为属性组U上的一组数据依赖
本章把关系模式看作一个三元组:
- R(U, F)
- 当且仅当U上的一个关系r满足F时,r称为关系模式R的一个关系
- 作为二维表,关系要符合一个最基本的条件:每个分量必须是不可分割的数据项。满足了这个条件的关系模式就属于第一范式(1NF)
通过属性间值的相等与否以及相互之间制约等体现出来的数据间相互联系
主要类型- 函数依赖(FD)
- 多值依赖(MVD)
- 其他(连接依赖等)
通常按照属性间的依赖情况来区分关系规范程度
6.2.1 函数依赖 1.函数依赖设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等,则称“X函数确定Y”或“Y函数依赖于X”,记作X → Y X→YX→Y,X称为这个函数依赖的决定属性集
(1)说明:- 函数依赖不是指关系模式R的某个或某些关系实例满足的约束条件,而是指R的所有关系实例均要满足的约束条件
- 函数依赖是语义范畴的概念。只能根据数据的语义来确定函数依赖
- 数据库设计者可以对现实世界作强制的规定
- 若X → Y ,则X称为这个函数依赖的决定属性组,也称为决定因素
- 若X → Y,Y → X,则记作X ← → Y
- 若Y不函数依赖于X,则记作X ↛ Y
-
X → Y,但Y ⊈ X则称X → Y是非平凡的函数依赖
-
X → Y,但Y ⊆ X 则称X → Y是平凡的函数依赖
对于任一关系模式,平凡函数依赖都是必然成立的
- 在R(U)中,如果X → Y,并且对于X的任何一个真子集X ’, 都有 X ’ ↛ Y,则称Y对X完全函数依赖(X的真子集不能决定Y).否则,若X → Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖
在R(U)中,如果X → Y ( Y ⊈ X ) , Y ↛ X , Y → Z , Z ⊈ Y, 则称Z对X传递函数依赖
注: 如果Y → X, 即X ← → Y,则Z***直接***依赖于X,而不是传递函数依赖
6.2.2 码通常专指候选码
(1)候选码与超码- 设K为R中的属性或属性组合。若U完全函数依赖K,则K称为R的一个候选码
- 如果U部分函数依赖于K,则K称为超码
- 若关系模式R有多个候选码,则选定其中的一个做为主码
- 主属性:包含在任何一个候选码中的属性
- 非主属性/非码属性:不包含在任何候选码中的属性
- 全码:整个属性组是码
- 每一个分量(所有的属性)都是不可分的数据项
-
若关系模式R ∈ 1 N F R∈1NFR∈1N**F,并且每一个非主属性都完全函数依赖于任何一个候选码,则R ∈ 2 N F R∈2NFR∈2N**F
-
1 N F → 2 N F 1NF→2NF1N**F→2N**F:消除了非主属性对码的部分函数依赖
- 设关系模式R ∈ 1 N F R∈1NFR∈1N**F,若R中不存在这样的码X、属性组Y及非主属性Z ( Y ⊈ Z ) Z(Y ⊈ Z)Z(Y⊈Z),
使得X → Y , Y → Z 成 立 , Y ↛ X X→Y,Y→Z成立,Y ↛ XX→Y,Y→Z成立,Y↛X不成立,则称R ∈ 3 N F R ∈ 3NFR∈3N**F - 若R ∈ 3 N F R∈3NFR∈3N**F,则每一个非主属性既不部分依赖于码也不传递依赖于码
- 2 N F → 3 N F 2NF→3NF2N**F→3N**F:消除了非主属性对码的传递函数依赖
-
设关系模式R ∈ 1 N F,若X → Y 且 Y ⊈ X 时X必含有码,则R ∈ B C N F
(候选键存在多个属性时,多个主属性直接要消除传递依赖关系)
(不能存在决定因素没有包含码的情况)
-
若R是全码,则R∈BCNF范式
- 所有非主属性都完全函数依赖于每个候选码
- 所有主属性都完全函数依赖于每个不包含它的候选码
- 没有任何属性完全函数依赖于非码的任何一组属性
-
如果关系模式R ∈ B C N F R∈BCNFR∈BCN**F,必定有R ∈ 3 N F R∈3NFR∈3N**F
-
如果R ∈ 3 N F ,且R只有一个候选码,则R必属于BCNF
3 N F → B C N F:消除了主属性对码的部分和传递函数依赖
设R(U)是属性集U上的一个关系模式。X,Y,Z是U的子集,并且Z = U − X − Y Z=U-X-YZ=U−X−Y。关系模式R ( U ) R(U)R(U)中多值依赖X → → Y X→→YX→→Y成立,当且仅当对R ( U ) R(U)R(U)的任一关系r,给定的一对(x,z)值,有一组Y的值与之对应,这组值仅仅决定于x值而与z值无关
X → → Y X→→YX→→Y:Y YY多值依赖于X XX
平凡多值依赖和非平凡的多值依赖- 若 X → → Y 若X→→Y若X→→Y,而Z = Ф Z=ФZ=Ф,即Z ZZ为空,则称X → → Y X→→YX→→Y为平凡的多值依赖$
- 否则称X → → Y X→→YX→→Y为非平凡的多值依赖
- 多值依赖具有对称性
- 多值依赖具有传递性
- 函数依赖是多值依赖的特殊情况
-
关系模式R ∈ 1 N F R∈1NFR∈1N**F,如果对于R的每个非平凡多值依赖X → → Y ( Y ⊈ X ) X→→Y(Y ⊈X)X→→Y(Y⊈X),X XX都含有码,则R ∈ 4 N F R∈4NFR∈4N**F
(一个表的主键只对应一个多值,要求把同一表内的多对多关系删除)
Armstrong公理系统是有效的、完备的
1. 逻辑蕴含- 对于满足一组函数依赖F的关系模式R,其任何一个关系r,若函数依赖X → Y X→YX→Y都成立(即r中任意两元组t、s,若t [ X ] = s [ X ] t[X]=s[X]t[X]=s[X],则t [ Y ] = s [ Y ] t[Y]=s[Y]t[Y]=s[Y]),则称F逻辑蕴涵X → Y X →YX→Y
- 用途:
- 求给定关系模式的码
- 从一组函数依赖求得蕴涵的函数依赖
- Armstrong公理系统 设U为属性集总体,F是U上的一组函数依赖, 于是有关系模式R 。对R
来说有以下的推理规则:- A1 自反律:若Y ⊆ X ⊆ U ,则$X →Y $为F所蕴涵
- A2 增广律:若X → Y为F所蕴涵,且Z ⊆ U,则X Z → Y Z为F所蕴涵
- A3 传递律:若X → Y及Y → Z为F所蕴涵,则X → Z为F所蕴涵
- 自反律所得到的函数依赖均是平凡的函数依赖
- 自反律的使用并不依赖于F
- 合并规则:( A 2 , A 3 ) 由 X → Y , X → Z , 有 X → Y Z
- 伪传递规则:( A 2 , A 3 ) 由 X → Y , W Y → Z , 有 X W → Z
- 分解规则:( A 1 , A 3 ) 由 X → Y 及 Z ⊆ Y , 有 X → Z
- 在关系模式R中为F所逻辑蕴涵的函数依赖的全体叫作F的闭包,记为F +
- 设F为属性集U上的一组函数依赖,X 、 Y ⊆ U , X F + = { A ∣ X → A 能 由 F 根 据 A r m s t r o n g 公 理 导 出 },X F +称为属性集X关于函数依赖集F的闭包
- 设F为属性集U上的一组函数依赖,X 、 Y ⊆ U能由F根据Armstrong公理导出的充分必要条件是Y ⊆ X F +
- 用途:判定X → Y是否能由F根据Armstrong公理导出的问题,就转化为求出X F +,判定Y是否为X F + 子集的问题
闭包就是由一个属性直接或间接推导出的所有属性的集合
- 第一步:设最终将成为闭包的属性集是Y,把Y初始化为X;
- 第二步:检查F中的每一个函数依赖A→B,如果属性集A⊆Y,而B中有的属性不在Y中,则将其加入到Y中;
- 第三步:重复第二步,直到没有属性可以添加到属性集Y中为止。 最后得到的Y就是X+
已知关系模式R,其 中 U = { A , B , C , D , E } ; F = { A B → C , B → D , C → E , E C → B , A C → B } 。 求 ( A B ) F + 其中U={A, B, C, D, E};F={AB→C, B→D, C→E, EC→B, AC→B}。求(AB)F^+其中U={A,B,C,D,E};F={A**B→C,B→D,C→E,E**C→B,A**C→B}。求(A**B)F+
- X ( 0 ) = A B X(0)=ABX(0)=A**B
- X ( 1 ) = X ( 0 ) ∪ C D ( ∵ A B → C , B → D ) = A B C D X(1)=X(0)∪CD(∵AB→C, B→D)=ABCDX(1)=X(0)∪C**D(∵A**B→C,B→D)=ABC**D
- X ( 2 ) = X ( 1 ) ∪ E B ( ∵ C → E , A C → B ) = A B C D E X(2)=X(1)∪EB(∵C→E,AC→B)=ABCDEX(2)=X(1)∪E**B(∵C→E,A**C→B)=ABCDE
- ∵ X ( 2 ) 已 等 于 全 部 属 性 集 合 , ∴ ( A B ) F + = A B C D E ∵X(2)已等于全部属性集合,∴(AB)F+ = ABCDE∵X(2)已等于全部属性集合,∴(A**B)F+=ABCDE
对于给定的关系模式R ( A 1 , A 2 , … , A n )和函数依赖集F
- R的属性分为四类:
- L类:仅出现在函数依赖左部的属性
- R类:仅出现在函数依赖右部的属性
- N类:在函数依赖的左部和右部均不出现的属性
- LR类:在函数依赖的左部和右部均出现的属性。
- 过程:
- 找出L、R、N、LR类属性
- 若存在L类属性,查看该属性的闭包是否包括全部属性
- 若有,则是关系模式中唯一的候选码;
- 若无,则L类的属性必然在任一候选码中
- 查看LR类属性,他们必有部分或者全部在某个候选码中。依次与L类属性结合,求闭包
- 若X是L类属性,则X一定包含在关系模式R的任何一个候选码中;若X + X^+*X*+包含了R的全部属性,则X为关系模式R的唯一候选码
- 若X是R类属性,则X不包含在关系模式R的任何一个候选码中
- 若X是N类属性,则X一定包含在关系模式R的任何一个候选码中。若L类N类属性组闭包包含了R的全部属性,则L类N类属性组为关系模式R的唯一候选码(L、N的闭包组合为U,则是唯一的候选码)
- 若X是LR类属性,则X可能包含在关系模式R的某个候选码中
如果函数依赖集F满足下列条件,则称F为一个极小函数依赖集,亦称为最小依赖集或最小覆盖。
最高可达 BCNF范式
- F中任一函数依赖的右部仅含有一个属性。
- F中不存在这样的函数依赖X → A,使得F 与 F − { X → A }等价。
- X → A是多余的
- F中不存在这样的函数依赖X → A,X有真子集Z使得F − { X → A } ∪ { Z → A }与F等价
- A非单属性
注意:最小依赖集并不是唯一的。
极小化过程-
(1)逐一检查F中各函数依赖FDi:X→Y,若Y=A1 A2 …Ak, k > 2,则用 { X→Aj |j=1, 2,…, k} 来取代 X→Y。
-
(2)逐一检查F中各函数依赖FDi:X→A,令G=F-{X→A}, 若A∈XG +, 则从F中去掉此函数依赖。
-
(3)逐一取出F中各函数依赖FDi:X→A,设X=B1 B2 …Bm, 逐一考查Bi (i=1,2,…,m),
若A ∈(X-Bi )F + , 则以X-Bi 取代X。
- 将较低等级的关系模式分解为若干个较高等级的关系模式过程称为模式分解。模式分解的方法并不是唯一的。
- 只有能够保证分解后的关系模式与原关系模式等价,分解方法才有意义。
-
分解具有无损连接性
-
分解要保持函数依赖
-
分解既要保持函数依赖,又要具有无损连接性
-
定义6.16 关系模式R的一个分解: ρ={ R1,R2,…,Rn }
U= ∪Ui ,且不存在 Ui ∈ Uj ,Fi 为 F在 Ui 上的投影
-
定义6.17 函数依赖集合{X→Y | X→Y ∈ F+ ∧ XY⊆Ui} 的 一个覆盖 Fi 叫作 F 在属性 Ui 上的投影
- 若要求分解具有无损连接性,模式分解一定可以达到4NF(在函数依赖范畴,一定可达到BCNF)。
- 若要求分解保持函数依赖,模式分解一定可以达到3NF,但不一定能够达到BCNF。
- 若要求分解既要保持函数依赖,又具有无损连接性,模式分解一定可以达到3NF,但不一定能够达到BCNF
数据库设计是指对于一个给定的应用环境,构造(设计)优化的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效地存储和管理数据满足各种用户的应用需求,包括信息管理要求和数据操作要求。
7.1.1 数据库设计的特点三分技术,七分管理,十二分基础数据
7.1.3 设计的基本步骤-
需求分析
需求分析是整个设计过程的基础 - 概念结构设计
通过对用户需求进行综合、归纳与抽象,形成一个独立于具体数据库管理系统的概念模型(E-R图)
-
逻辑结构设计
将概念结构转换为某个数据库管理系统所支持的数据模型,并对其进行优化
-
物理结构设计
为逻辑数据结构选取一个最适合应用环境的物理结构
-
数据库实施
根据逻辑设计和物理设计的结果构建数据库,编写与调试应用程序,组织数据入库并进行试运行
-
数据库运行和维护
经过试运行后即可投入正式运行,在运行过程中必须不断对其进行评估、调整与修改
- 需求分析就是分析用户的要求
- 详细调查现实世界要处理的对象(组织、部门、企业等)
- 充分了解原系统(手工系统或计算机系统)工作概况
- 明确用户的各种需求
- 在此基础上确定新系统的功能
- 调查的重点是“数据”和“处理”,获得用户对数据库的要求
- 信息要求
- 处理要求
- 安全性与完整性要求
- 调查组织机构情况
- 调查各部门的业务活动情况
- 协助用户明确对新系统的各种要求,包括信息要求、处理要求、完全性与完整性要求
- 确定新系统的边界
- 跟班作业
- 开调查会
- 请专人介绍
- 询问
- 设计调查表请用户填写
- 查阅记录
调查了解用户需求以后, 还需要进一步分析和表达用户的需求。在众多分析方法中,结构化分析(Structured Analysis, SA)方法是一种简单实用的方法。SA方法从最上层的系统组织机构入手,采用自顶向下、逐层分解的方式分析系统。
7.2.3 数据字典- 数据字典的内容
- 数据项
- 数据结构
- 数据流
- 数据存储
- 处理过程
- 数据项是数据的最小组成单位
- 若干个数据项可以组成一个数据结构
- 数据字典通过对数据项和数据结构的定义来描述数据流、数据存储的逻辑内容
将需求分析得到的用户需求抽象为信息结构(即概念模型)的过程就是概念结构设计
7.3.2 E-R模型 1. 实体之间的联系- 两个实体型之间的联系:
- 一对一联系(1∶1)
- 一对多联系(1∶n)
- 多对多联系(m∶n)
- 两个以上的实体型之间的联系
- 单个实体型内的联系
- 联系的度:参与联系的实体型的数目
- 2个实体型之间的联系度为2,也称为二元联系;
- 3个实体型之间的联系度为3,称为三元联系;
- N个实体型之间的联系度为N,也称为N元联系
- 实体型:用矩形表示,矩形框内写明实体名
- 属性:用椭圆形表示,并用无向边将其与相应的实体型连接起来
- 联系:用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体型连接起来,同时在无向边旁标上联系的类型(1∶1,1∶n或m∶n)
- 联系本身也是一种实体型,也可以有属性
为了简化E-R图的处置,现实世界的事物能作为属性对待的,尽量作为属性对待
两条准则- 作为属性,不能再具有需要描述的性质。属性必须是不可分的数据项,不能包含其他属性。
- 属性不能与其他实体具有直接联系,即E-R图中所表示的联系是实体之间的联系
自顶向下进行需求分析,自底向上地设计概念模型
两步-
合并。解决各部分E-R图之间的冲突,将分E-R图合并起来生成初步E-R图
- 属性冲突
- 属性域冲突:属性的类型、取值范围或取值集合不同。
- 属性取值单位冲突
- 命名冲突
- 同名异义
- 异名同义
- 结构冲突
- 同一对象在不同应用中具有不同的抽象
- 同一实体在不同分E-R图中所包含的属性个数和属性排列次序不完全相同
- 实体间的联系在不同的E-R图中为不同的类型
- 属性冲突
-
修改和重构。消除不必要的冗余,设计基本E-R图
- 冗余的数据是指可由基本数据导出的数据
- 冗余的联系是指可由其他联系导出的联系
消除冗余主要采用分析方法,即以数据字典和数据流图为依据,根据数据字典中关于数据项之间逻辑关系的说明来消除冗余。
但并不是所有的冗余数据与冗余联系都必须加以消除,有时为了提高效率,不得不以冗余信息作为代价。
- 确定所有的实体集合;
- 选择实体集应包含的属性;
- 确定实体集之间的联系;
- 确定实体集的关键字,用下划线在属性上表明关键字的属性组合;
- 确定联系的类型,在用线将表示联系的菱形框联系到实体集时,在线旁注明是1或n(多)来表示联系的类型
把基本E-R图转为逻辑结构
7.4.1 E-R图向关系模型的转换 1. 转换内容- E-R图由实体型、实体的属性和实体型之间的联系三个要素组成
- 关系模型的逻辑结构是一组关系模式的集合
- 将E-R图转换为关系模型:将实体型、实体的属性和实体型之间的联系转化为关系模式,并确定这些关系模式的码和属性
- 关系的属性:实体的属性
- 关系的码:实体的码
- 一个1:1联系:可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并
- ① 转换为一个独立的关系模式
- 关系的属性:与该联系相连的各实体的码以及联系本身的属性
- 关系的候选码:每个实体的码均是该关系的候选码
- ②与某一端实体对应的关系模式合并
- 合并后关系的属性:加入对应关系的码和联系本身的属性
- 合并后关系的码:不变
- ① 转换为一个独立的关系模式
- 一个1:n联系:可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并
- ①转换为一个独立的关系模式
- 关系的属性:与该联系相连的各实体的码以及联系本身的属性
- 关系的码:n端实体的码
- ②与n端对应的关系模式合并
- 合并后关系的属性:在n端关系中加入1端关系的码和联系本身的属性
- 合并后关系的码:不变
- ①转换为一个独立的关系模式
- 一个m:n联系转换为一个关系模式
- 关系的属性:与该联系相连的各实体的码以及联系本身的属性
- 关系的码:各实体码的组合
- 三个或三个以上实体间的一个多元联系转换为一个关系模式
- 关系的属性:与该多元联系相连的各实体的码以及联系本身的属性
- 关系的码:各实体码的组合
- 具有相同码的关系模式可合并
- 目的:减少系统中的关系个数
- 合并方法:
- ①将其中一个关系模式的全部属性加入到另一个关系模式中
- ②然后去掉其中的同义属性(可能同名也可能不同名)
- ③适当调整属性的次序
关系数据模型的优化通常以规范化理论为指导
优化数据模型的方法-
确定数据依赖
-
对于各个关系模式之间的数据依赖进行极小化处理,消除冗余的联系
-
按照数据依赖的理论对关系模式进行分析,考察是否存在部分函数依赖、传递函数依赖、多值依赖等,确定各关系模式分别属于第几范式
-
按照需求分析阶段得到的各种应用对数据处理的要求,分析对于这样的应用环境这些模式是否合适,确定是否要对它们进行合并或分解
-
对关系模式进行必要分解,提高数据操作效率和存储空间的利用率
-
常用分解方法:
-
水平分解
把(基本)关系的元组分为若干子集合,定义每个子集合为一个子关系
-
垂直分解
把关系模式R的属性分解为若干子集合,形成若干子关系模式
-
-
定义用户外模式时应该更注重考虑用户的习惯与方便。包括三个方面:
- 使用更符合用户习惯的别名
- 针对不同级别的用户定义不同的视图,以保证系统的安全性
- 简化用户对系统的使用
为逻辑模型选定最适合应用要求的物理模型的过程1数据库物理设计的步骤
-
确定数据库的物理结构
在关系数据库中主要指存取方法和存储结构
-
对物理结构进行评价
评价的重点是时间和空间效率
常用存取方法
- B+树索引存取方法
- Hash索引存取方法
- 聚簇存取方法
- 数据库的转储和恢复
- 数据库的安全性、完整性控制
- 数据库性能的监督、分析和改进
- 数据库的重组织与重构造
- 目标:提高系统性能
- 重组织
- 重新安排存储位置
- 回收垃圾
- 减少指针链
- 重构造:修改数据库的模式和内模式
- 增加新的数据项
- 改变数据项的类型
- 改变数据库的容量
- 增加或删除索引
- 修改完整性约束条件
数据库各级模式的形成
- 需求分析阶段:综合各个用户的应用需求(现实世界的需求)。
- 概念设计阶段:概念模式(信息世界模型),用E-R图来描述。
- 逻辑设计阶段:逻辑模式、外模式。
- 物理设计阶段:内模式
另外:
- 在逻辑设计阶段将E-R图转换成具体的数据库产品支持的数据模型如关系模型,形成数据库逻辑模式。
- 然后根据用户处理的要求,安全性的考虑,在基本表的基础上再建立必要的视图,形成数据的外模式
- 在物理设计阶段根据DBMS特点和处理的需要,进行物理存储安排,设计索引,形成数据库内模式
事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。
事务的ACID特性 事务具有4 个特性:原子性(Atomicity)、一致性(Consistency)、 隔离性(Isolation)和持续性(Durability). 这4个特性简称为ACID特性(ACID properties)。
保证事务ACID特性是事务管理的重要任务。事务ACID特性可能遭到破坏的因素有:
(1)多个事务并行运行时,不同事务的操作交叉执行;
(2)事务在运行过程中被强行停止。
建立冗余数据最常用的技术是数据转储和登记日志文件
10.4.1 数据转储P298
10.4.2 登记日志文件P299
第十一章 并发控制 11.1 并发控制概述- 事务是并发控制的基本单位
- 封锁
- 时间戳
- 乐观控制法
- 多版本并发控制
基本封锁类型:排他锁(写锁)X和共享锁(读锁)S
11.5 并发调度的可串行性 11.5.1 可串行化调度多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同,称这种调度策略可串行化(serializable) 调度。
可串行性(serializability)是并发事务正确调度的准则。
11.5.2 冲突可串行化调度冲突操作是指不同事务对同一个数据的读写操作和写写操作
冲突可串行化调度是可串行化调度的充分不必要条件
寻找等价串行调度的方法:因图中无回路,必有一入度为零的结点,将这些结点及其边从图中移去存放于 一个队列中,对所剩图作同样处理,不过,移去的结点要放在队列中已存结点的后面,如此继续下去,直 到所有结点移入队列中。按队中结点次序串行排列各 事务操作,即可得到一个等价的串行调度
11.7封锁粒度封锁对象的大小称为封锁粒度
11.7.2 意向锁


