## 关系数据库 关系模型 #### 关系模式-规范化理论 R(U,D,DOM,F) 1. R 关系名 2. U为一组属性 3. D为属性组U中得属性所来自得域 4. DOM为属性到域得映射 5. F为属性组U上的一组数据依赖 关系模式可能存在的问题 数据冗余 更新异常 插入异常 删除异常 所以要做规范化 根据属性间的依赖关系判定 ##### 数据依赖 1.数据依赖是一个关系内部属性与属性之间的一种约束关系,这种约束关系是通过属性间值得相等与否体现出来得数据间得相关联系。 2. 数据依赖的重要两种类型 函数依赖与多值依赖 ###### 函数依赖 设R(U)是属性集U上的关系模式,X,Y是U上的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数决定Y或Y函数依赖于X. 掌握完全函数依赖,部分函数依赖,传递函数依赖,这是规范化的基础。 定义6.2 在R(U)中,如果X→Y,并且对于X的任何一个真子集X’, 都有 X’ ↛ Y, 则称Y对X完全函数依赖,记作X → Y。 若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作X → Y 定义6.3 在R(U)中,如果X→Y(Y⊈X),Y↛X,Y→Z,Z⊈Y, 则称Z对X传递函数依赖(transitive functional dependency)。记为:X → Z。 分清候选码 主码 主属性 非主属性 候选码:若关系中的某艺术性组的值能唯一的标识一个元组,而其子集不能,则称该属性组为候选码。若一个关系中有多个候选码,则选定其中一个为主码。 候选码的诸属性称为主属性,不包含在任何候选码中的属性称为非主属性或非码属性。 ##### 范式 范式:关系模式的规范化形式,衡量关系模式好坏的标准。 规范化:将一个给定的关系模式转化为某种范式的过程称为关系模式的规范化过程,简称规范化。 规范化一般采用分解的办法,将低级别范式向高级别范式转化,使关系的语义单纯化。 1NF 定义 设R是一个关系模式。如果R中每个属性的值域,都是不可分的原子值,则称R是第一范式,记作1NF。 1NF是关系模式具备的最起码的条件。 确保每一列的原子性,如果每列都是不可再分的数据单元,则满足第一范式。 2NF 定义6.6 若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于任何一个候选码,则R∈2NF 2NF的实质是不存在非主属性“部分函数依赖”于候选键的情况。(即每个表只描述一件事情) *转换规则* 非2NF关系或1NF关系向2NF的转换原则: 设关系模式R属性集合为U,主键是W,R上还存在函数依赖X→Z,且X是W的子集,Z是非主属性,那么W→Z就是一个部分函数依赖。此时应把R分解成两个关系模式: R1(XZ),主键是X; R2(Y),其中Y=U-Z,主键仍是W,外键是X。 如果R1和R2还不是2NF,则重复上述过程,一直到每个关系模式都是2NF为止。 3NF 定义6.7 设关系模式R∈1NF,若R中不存在这样的码X、属性组Y及非主属性Z(Z ⊇ Y), 使得X→Y,Y→Z成立,Y ↛ X成立,则称R ∈ 3NF。 如果关系模式R是2NF,而且R中所有非主属性对任何候选键都不存在传递函数依赖,则称R是第三范式,记作3NF。 3NF是从1NF消除非主属性对候选键的部分函数依赖,和从2NF消除传递函数依赖而得到的关系模式。 3NF需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关 *转换规则* 2NF关系向3NF转换的原则 设关系模式R属性集合为U,主键是W,R上还存在函数依赖X→Z,并且Z是非主属性,Z不包含于X,X不是候选键,这样W→Z就是一个传递依赖。此时应把R分解成两个关系模式: R1(XZ),主键是X; R2(Y),其中Y=U-Z,主键仍是W,外键是X。 如果R1和R2还不是3NF,则重复上述过程,一直到每个关系模式都是3NF为止。 BCNF 在关系模式R中,如果每一个决定属性集都包含候选码,则R∈BCNF。 3NF关系向BCNF转换的原则是消除主属性对候选键的部分和传递函数依赖,将3NF关系分解成多个BCNF关系模式。 BCNF的关系模式所具有的性质 所有非主属性都完全函数依赖于每个候选码 所有主属性都完全函数依赖于每个不包含它的候选码 没有任何属性完全函数依赖于非码的任何一组属性 如果一个关系数据库中的所有关系模式都属于BCNF,那么在函数依赖范畴内,它已实现了模式的彻底分解,达到了最高的规范化程度,消除了插入异常和删除异常。 **对于关系模式中只有一个候选码的情况,达到3NF即达到了BCNF** 练习题 PPT 73-74页 ppt 154-156 ### 关系操作 关系操作语言分为关系代数 关系演算 和SQL(结构化查询语言)语言。 ##### 关系代数 关系代数分为传统的集合运算和专门的关系运算两类。 传统的集合运算:并 差 交 笛卡儿积 专门的关系运算:选择 投影 连接 除运算等(必须掌握运算方式) 练习题 课本p71页 6题 ##### SQL(结构化查询语言) SQL是关系数据库语言,是高度非过程化语言 SQL功能 数据定义 create drop alter 数据查询 select 数据操纵 insert update delete 数据控制 grant revoke commit rollback 视图 **视图的作用** 1. 视图能够简化用户的操作 2. 视图使用户能以多种角度看待同一问题 3. 视图对重构数据库提供了一定程度的逻辑独立性 4. 视图能够对机密数据提供安全保护 5. 适当利用视图可以更清晰地表达查询 练习题 1.学校数据库中包括四个表,各属性的含义可由属性名体现,不再重复 学生表:S(Sno, Sname,Ssex,Sage, Sdept), 课程表:C(Cno, Cname,CTno, Ccredit) 学生选课表:SC(Sno,Cno,mid-exam, final-exam, Grade) 课程类别表CT(CTno,Type) 其中:CT由课程类别编码(CTno)、课程类别(Type)两个属性组成。 Type取值有:公共课、学科基础课、专业必修课、专业选修课、全校选修课等。 Grade是计算属性,由期中成绩(mid-exam)和期末成绩( final-exam)平均而得到。 用关系代数完成以下操作: (1)成绩为95分以上的学生成绩单,包括学号、姓名、课程名、成绩四个属性。 (2)选修了全部“专业选修课”的学生学号、姓名、所在系。 用SQ语言完成以下操作: (3)按系统计不同年龄的学生人数,输岀结果按照系名称的字母升序和学生的年龄降序。 (4)找出每个学生超过他自己所选修全部课程平均成绩的课程号、课程名称、成绩 (5)对选修数据库系统概论这门课的学生计算其该门课的总成绩,按照期中占40%,期末 占60%计算。 (6)査询没有选修过任何“全校选修课”的学生姓名及其所在系。 (7)统计每一门课程的选修人数及其平均成绩。要求每门课程都必须岀现在査询 结果中,不管有没有学生选修。 (8)按照总成绩从高到低的顺序输出学生名单(包括学号,姓名,总成绩),成绩相同时, 按照学号从小到大的顺序输出。 2. 有三个表,它们的记录行数分别是10行、2行和6行,三个表进行多表联合查询,结果集中共有( )行数据 A.18 B.26 C.不确定 D.120 3. 下列聚集函数中不忽略空值(null)的是( ) A.SUM(列名) B.MAX(列名) C. COUNT(*) D.AVG(列名) 4. 当关系R和S自然联接时,能够把R和S原该舍弃的元组放到结果关系中的操作是( ) A.左外连接 B.右外连 C.外部并 D.外连接 5. SQL语言是( )的语言,易学习。 A.过程化 B.非过程化 C.格式化 D.导航式 6. 关系数据库管理系统应能实现的专门关系运算包括( ) A. 排序、索引、统计 B.选择、投影、连接 C. 关联、更新、排序 D. 显示、打印、表 7. 在关系代数运算中,五种基本运算为( ) A. 并、差、选择、投影、自然连接 B. 并、差、交、选择、投影 C.并、差、选择、投影、乘积 D. 并、差、交、选择、乘积 8. SQL语言具有( ) 的功能。 A.关系规范化、数据操纵、数据控制 B. 数据定义、数据操纵、数据控制 C. 数据定义、关系规范化、数据控制 D. 数据定义、关系规范化、数据操纵 9. 1设学生课程数据库中有三个关系: 学生关系S(S#,SNAME,AGE,SEX) 学习关系SC(S#, C#,GRADE) 课程关系 C (C#, CNAME) 其中S#、C#、SNAME、AGE、SEX、GRADE、CNAME分别表示学号、课程号、姓名、年龄、性别、成绩 和课程名。 用SQL语句表达下列操作 (1)检索选修课程名称为“MATHS”的学生的学号与姓名 (2)检索年龄在18到20之间(含18和20)的女生的学号、姓名和年龄 (3)检索平均成绩超过80分的学生学号和平均成绩 (4)检索选修了三门课以上的学生的姓名 10.设学生-课程数据库中包括三个表: 学生表: Student(Sno,Sname,Sex,Sage, Sdept) 课程表:Course(Cno, Cname, Ccredit) 学生选课表: SC(Sno,Cno,Grade) 其中Sno、Sname、Sex、Sage、Sdept、Cno、Cname、Ccredit 、Grade分别表示学号、姓名、性别、年龄、所在系名、课程号、课程名、学分和成绩。 试用SQL语言完成下列项操作: (1)创建一个计科系学生信息视图S-CS-VIEW,包括Sno学号、Sname 姓名、Sex性别; (2)通过上面第 2 题创建的视图修改数据,把王平的名字改为王慧平 (3)创建一选修数据库课程信息的视图,视图名称为 datascore-view,包含学号、姓名、成绩。