数据字典
数据库系统中存放三层结构定义的数据库称为数据字典(DD),
对数据库的操作都要通过DD才能实现。
DD系统中还存放数据库运行是的统计信息。
管理DD的系统称为DD系统
DBMS
是指数据库系统中对数据进行管理的软件系统,它是数据库系统
的核心组成部分。对DB的一切操作,包括定义、查询、更新及控制,
都是通过DBMS进行的。
DBMS的主要功能
- DDL
- DML
- 数据库保护功能:4个数据控制子系统
- 数据库的维护功能:各个实用程序构成
- 数据字典:DD子系统
DBS的组成
- 数据库
- 硬件
- 软件
- 数据库管理员
数据库
全部数据的集合。DB分为两类,一类是应用数据集合,称为物理数据库,
它是数据库的主体;另一类是各级数据结构的描述,称为描述数据库,由DD系统管理。
软件
包括DBMS、OS、各种主语言和应用开发支撑软件等程序。
DBA数据库管理员
- 定义模式
- 定义内模式
- 与用户联络
- 定义安全性规则
- 定义完整性规则
- 数据库的转存与恢复工作
三层模式两级映像
- 外模式 用户与数据库的接口
- 逻辑模式 数据库中全部数据的整体逻辑结构的描述。
- 内模式
高度的数据独立性
应用程序和数据库的数据结构之间相互独立。其分为两类,一是物理数据独立性;二是逻辑数据独立性。
目的是为了保存外模式和应用程序不受影响。
关系模型基本概念
字段 、 属性 、 列
字段值 、 属性值
记录类型、 关系模式
记录 元组、 行
属性相同的元组集合、 关系、 表
属性个数、 元数
元组个数、 基数
域 值得集合、 属性值的取值范围
元组数目无限、 无限关系、 计算机研究有限关系
关系模式的3类完整性规则
实体完整性、 主键不为空
参照完整性、 外键是否为空视具体而定
备注:1外键的值必须参照相应主键的表中的主键值,或者可以为空。
2主键和外键可以在同一个关系模式中
用户自定义完整性、 具体的数据约束
关系模式的3层体系结构
关系模式、 记录类型、 逻辑模式
子模式、 用户描述、 外模式
存储模式、 描述如何物理存储、 内模式
关系模式的形式定义和优点
数据结构、 简明精确
数据操作、 独立于数据存储
数据完整性规则
关系查询语言和关系演算
DML、 查询 更新
关系查询语言: 关系代数、 关系演算、 关系逻辑
关系代数
5基本操作: 并 差 笛卡尔积 投影 选择
4组合操作: 交 连接 自然连接 除法
7扩充操作: 改名 广义投影 赋值 外连接 外部并 半连接 聚集操作
等值连接、 笛卡尔积+等值
自然连接、 等值连接+去除重复等值属性列
否定的操作、 差操作
检索不学C2课的学生
错误方式 πSNAME,AGE(σCNO≠‘C2’(S⋈SC))
一定要用“差”的形式:
πSNAME,AGE(S)-πSNAME,AGE(σCNO=‘C2’(S⋈SC))
全部特征、 除法操作
πSNO,CNO(SC)÷πCNO(C)
SQL基本概念
基本表、 本身独立的表、 一个关系一个基本表、 一个基本表一个存储文件 一个表诺干索引
视图、 一个以上基本表导出的表
复习题库
数据库操纵功能、 DML、 查询更新
数据库控制功能、 DCL、 revoke commint等
函数依赖
FD(Function Dependency)、 形为x->Y的命题 、 函数依赖
F、 函数依赖集
被F逻辑蕴涵的函数依赖、 F |=X->Y
函数依赖集(F)的闭包、 F+、 被(F)逻辑蕴涵的函数依赖的集合
FD和关键码联系、 超键、 候选码
属性集X的闭包、 X+ = {属性A|F|=X->A}
FD推理规则完备性、 函数依赖集推出的X->Y都在其闭包中
FD集的最小依赖集、 (超键之于候选键)
- 每个FD左边不冗余
- FD间不冗余
- 每个FD右边单属性
候选码的求法
首先来看候选键的定义:若关系中的某一属性组的值能唯一地标识一个元组。
若W是候选键,则必须满足两个条件:W的闭包是U;W没有冗余。
设关系模式R中U=ABC.......等N个属性,U中的属性在FD中的情况:
- 只在左部出现; 一定存在于某候选码当中
- 不在左右出现; 一定存在于所有候选码中
- 只在右部出现; 一定不在候选码中
- 左右出现; 与候选码组合,满足属性集闭包是U,确定候选码。
关系模式的分解
模式分解、 计算机中数据存储、 不在泛关系r、 在数据库模式中
无损分解、 损失分解、 投影连接能否恢复、 寄生元组
泛关系假设、 先存在r泛关系再讨论分解、 无假设之与悬挂元组(自然连接被丢失的)
模式分解优点、 消除冗余操作异常、 分解的数据库可以存储悬挂元组存储泛关系中无法存储的信息
模式分解缺点、 检索需连接、 有泛关系可能寄生元组、 无泛关系可能悬挂元组
无损分解测试
建立表格
- 属性Aj做列、 模式Ri做行;
- 行列有交叉填aj、 行列无交叉填bij。
追踪Chase - 根据依赖集F|=X->Y;
- 两行X相同则修改使两行Y也相同
- 两行Y、 aj > 下标小的bij
有一个行全aj 是无损分解
无损分解充分必要定理:
- Ri是关系模式R的一个分解
- (R1交R2)->(R1-R2)或(R2-R1) 注释:即推导属于FD,在依赖集中
保持函数依赖FD的分解特性
- 1验证F中的每个FD是否被任意数据库模式逻辑蕴涵
- 2 关系模式函数依赖闭包F+ = 全部的数据库模式函数依赖闭包
- 无损分解特性与保持函数依赖分解特性无关、 结合模式分解的优缺点
- 模式分解与模式等价、 数据等价+语义等价
- 数据等价、 不会丢失信息,无损分解特性
- 语义等价、 数据库模式有相同的依赖集闭包,保持FD分解特性
分解特性举例、 两个特性
关系模式R(ABC),ρ={AB,AC},分析在F1={A->B},
F2={A->C,B->C},F3={B->A},F4-{C->B},B->A}下的分解特性?
1分析无损分解:R1交R2=A 、 AB-AC=B 、 AC-AB=C;
即满足A->B或者A->C依赖的是无损分解:F1、F2。
2分析保持FD分解:关系模式函数依赖闭包 = 全部数据库模式函数依赖闭包;
即:F1满足;F2不满足,丢失B->C;F3满足; F4不满足,丢失C->B;
关系模式的范式、 (1NF、 2NF)过时、 3NF、 BCNF
- 1NF、 关系r的属性值不可再分
- 2NF、 1NF+每个非主属性完全函数依赖于候选键
- 3NF、 1NF+每个非主属性都不传递依赖与R的候选键。(如果有,分解后,这便是外键的由来)
- DCNF、 1NF+每个属性都不传递依赖于R的候选键
- 平凡FD: 类似 A ->AB ;ABC->ABC等无价值的FD
- 主属性:包含候选码的属性组
- 传递依赖:类似A->C,C->B;
定理:满足BCDF->满足3NF
- BCNF、 无损分解、 不一定保持FD分解
- 关系模式R优先BCDF分解,如果BCDF不满足保持FD,则分解为3NF
3NF分解算法
关系模式R(U),主键W,R上还有FD X->Z。并且Z是非主属性(Z不属于X),
X不是候选键,这样W->Z就是一个传递依赖。此时需要R分解为2个模式
R1(XZ),主键X;
R2(Y),其中Y=U-Z,主键仍然W,外键X(参照R1)。
如果R1、R2还不是3NF,那么在重复上述,直到数据库模式为3NF。
BCNF分解算法
和3NF分解算法很像,只是FD X->Z,其中Z也可以是主属性。
总结3NF BCNF分解算法: 消除传递依赖,产生外键
分解成3NF模式集的合成算法?
- 求F的最小依赖集,把左部相同的FD合并性
- 对每个最小依赖集中的FD X->Y 去构成一个模式XY
- 构成的模式集中,如果每个模式都不包含R的候选键,那么把候选键单独作为一个模式。
分解3NF举例
关系模式R(ABCDE),R的最小依赖集{A->B,C->D}。
从依赖集可知R的候选码为ACE。
先根据最小依赖集 生成ρ{AB,CD}模式,不包含候选码ACE
加入候选码的模式,得到 ρ{AB,CD,ACE}
局部依赖和传递依赖是模式产生冗余和异常的两个重要原因,
由于3NF只消除了非主属性对候选键的局部依赖和传递依赖,
虽然性能已经很好了,但仍然还可能有小部分存储异常。
模式设计方法
- ρ是BCNF或3NF模式集
- 无损分解
- 保持函数依赖集
错题集
数据库系统的核心是( D )
A) 编译系统 B)数据库 C)操作系统 D)数据库管理系统表达用户使用观点的数据库局部逻辑结构的模型是( C )
A) 概念模型 B)逻辑模型 C)外部模型 D)内部模型
备注: 概念模型;表达用户使用观点的数据库全局逻辑结构的模型3.对关系数据库来讲,下面( C )说法是错误的
A)外键和相应的主键可以不同名,只要定义在相同值域上即可
B)不同的属性可对应于同一值域
C)行的顺序可以任意交换,但列的顺序不能任意交换
D) 关系中的任意两个元组不能完全相同注释
1 外键的值必须参照相应主键的表中的主键值,或者可以为空。
2 主键和外键可以在同一个关系模式中4.数据库系统生存期分七个阶段:规划、需求分析、概念设计、逻辑设计、物理设计、实现、运行维护。
5.下面有关模式分解的叙述中,不正确的是(D )
A) 若一个模式分解保持函数依赖,则该分解一定具有无损连接性。
B) 若要求分解保持函数依赖,那么模式分解可以达到3NF,但不一定能达到BCNF
C) 若要求分解既具有无损连接性,又保持函数依赖,则模式分解可以达到3NF,但不一定能达到BCNF
D) 若要求分解具有无损连接性,那么模式分解一定可以达到BCNF注释
A选项,保持FD—>无损分解,不能逆推
B选项,BCNF->3NF,不能逆推
C选项, BCNF 满足无损分解,不一定满足保持FD分解;所以优先采用BCNF分解,如果不行才选用3NF分解。3.下述哪一条不是由于关系模式设计不当而引起的(B )
A) 数据冗余 B) 丢失修改 C) 插入异常 D) 修改异常1.任何一个二元关系在函数依赖的范畴内必能达到( D )
A) 1NF B)2NF C)3NF D)BCNF备注 二元关系
设关系模式R(ABCD),F是R上成立的FD集,F={AB→CD,A→D}。
1)试说明R不是2NF模式的理由。
2)试把R分解成2NF模式集。注释:
1 R的候选键是AB,则非主属性为C和D,并且AB→D成立。而已知A→D,因此AB→D为非主属性D对候选键的局部依赖。
2 R分解为:R1(AD)主键是A;
R2(ABC)主键是AB,外键是A。
对于3NF的判断:是否?非主属性传递依赖于候选键
SQL模式定义
SQL模式、 模式名和模式拥有者的账户、 包含每个元素定义(基本表、视图、索引等);
一个模式 、 一个存储空间、 基本表的集合;模式建立 : Creat Schema <模式名> Authorization 用户名;
模式撤销、 Drop Schema STU [Cascade(级联)|Restrict(约束)];
Cascade级联销毁全部元素、 Restrict约束。习惯性采用DATABASE替换Schema词, 语句为 Create DATABASE 。
SQL语句不区分大小写。
基本表
基本表创建
Create Table <表名> (<列名 类型>,<完整性约束>);
Creat Table T (t# char(4),tname char(8) Not NULL, Primary Key(t#),Foreign Key(tname)References T2(tname2#));
完整性约束了t#为主键,tname为外键且非空且指定了对应T2表中tname2的参照完整性
基本表修改
Alter(改变成分)、 Add、 Drop、 Modify(修改)
- 新列 Alter Table <表名> Add <列名> <类型>
- 删列 Alter Table <表名> Drop <列名> [Cascade|Restrict]
- 修改原有列的类型\宽度 Alter Table <表名> Modify <列名> <类型>
基本表撤销
Drop Table <表名> [Cascade|restrict]
索引 : 功能仅限查询、 起到主键的作用
- 创建索引 Create [Unique] Index <索引名> On <表名>(<列名>)
- 撤销索引 Drop Index <索引名>
SQL数据查询
句型 Select - From - Where -;
Where 子句、 条件表达式
- 算术运算符
- 逻辑运算符 and 、 or 、 not
- 集合成员资格运算符 in 、 not in
- 谓词 exists、 all、 some、 unique(唯一)
- 聚合函数 avg、min 、 max 、 sum 、 count
- 子句的运算对象可以是另一个select子句,即嵌套select语句
where s# in (select语句)
where exists (select语句)
Select子句
- 聚合函数 count(*) count|sum|avg|max|min(<列名>)
select Count(*),Avg(age)
select count(distinct s#) form sc 因为可以选修多门,加了distinct,说明统计选课的人数,而不是上选修课的人次树
select完整句法
where行条件子句、 group分组子句、 having组条件子句、 order排序子句
select<列名序列或列表达式序列>
from<表和(或)视图序列>
[where<行条件表达式>]
[group by<列名序列>
[having<组条件表达式>]]
[order by <列名[asc|desc]>,...]
select句法执行过程:
- 读取form子句表、视图的数据,执行笛卡尔积操作
- 选取满足where子句中条件表达式的元组
- 按group子句指定列的值分组,同时提取满足having子句中组条件表达式的那些组
- 按select子句中给出的列名或列表达式求值输出
- order子句对输出的目标进行排序,升序排列Asc或者降序排列Desc。
(1)使用带有EXISTS谓词的子查询:查询所有选修了1号课程的学生姓名。
select sname from student where
exists (select sno from sc where sno=student.sno and cno='1')
> (2)查询选修了全部课程的学生姓名。
>> ```
1.
select Sname from student where Sno IN
(select Sno from SC
group by Sno
having count(*) = (select count(*) from course ))
select Sname from student S,
(select Sno from SC
group by Sno
having count() = (select count() from course )) C
where S.sno=C.sno
>> ```
3.
select sname from student
where not exists ( select * from course where not exists (select * from sc where sc.sno=student.sno and sc.cno=course.cno))
(3)使用带有EXISTS谓词的子查询:查询所有选修了1号课程的学生姓名
select sname from student where
exists (select sno from sc where sno=student.sno and cno='1)
Unique和distinct
> Unique是约束完整性的一种,distinct用于查询
####SQL更新 insert into 、 update set 、delect from
> 数据插入格式:
(1)单元组的插入
```INSERT INTO 基本表名 [(列名表)] VALUES(元组值)```
(2)子查询结果的插入
``` INSERT INTO 基本表名 [(列名表)]<SELECT查询语句>```
数据修改格式:
```UPDATE 基本表名
SET 列名=值表达式[,列名=值表达式…]
[WHERE 条件表达式]```
数据删除格式:
```DELETE FROM基本表名
[WHERE 条件表达式]```
>>将一个新学生记录(学号:95020;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中。
insert into student values('95020','陈冬','男','18','IS')
>>Student_1表的内容插入到Student表
insert into Student1
select * from student
>>将学生95001的年龄改为22岁
update student set sage=22 where sno='95001'
>>将计算机科学系全体学生的成绩置零。
UPDATE SC
SET grade=0
WHERE 'CS'=(select Sdept FROM Student WHERE Student.Sno = SC.Sno)
>>删除计算机科学系所有学生的选课记录。
delete FROM sc where 'CS'= (select sdept from student where student.sno=sc.sno)
####视图 ( CREATE、DROP 、 INSERT、UPDATE、DELETE)
>
CREATE VIEW <视图名>(列表序列)
AS <SELECT 查询语句>
CREATE VIEW STUDENT_GRADE as
select STUDENT.Sno,SNAME,CNAME,GRADE from STUDENT,sc,course where STUDENT.sno=sc.sno and sc.cno=course.cno
DROP VIEW 视图名
更新同表,但是更新有条件?
1. 行列子集视图(从单个基本表选择、投影导出的,且包含主键)
2. 允许更新的视图在定义时必须加上"with check option"
网友评论