软件设计师培训
历年考试对本章内容的考查情况 本章的重点程度:★★★★ 考次 2004 2005 2006 2007 2008 2009 5月 11月 分值 22 21 比重 4% 13.3% 14.7% 14% 本章的重点程度:★★★★
2.数据库技术基础知识 大纲要求: 数据库管理系统的功能和特征 数据库体系结构(概念模式、外模式、内模式) 数据模型,ER图,第一范式、第二范式、第三范式 数据操作(集合运算和关系运算) 数据库语言(SQL) 数据库的控制功能(并发控制、恢复、安全性、完整性) 数据仓库和分布式数据库基础知识
2.1 数据库系统的基本概念 DB、DBMS和DBS的定义 DB (数据库) 是长期存储在计算机内、有组织的、统一管 理的相关数据的集合。 系统。位于用户与操作系统之间的一层管理软件。 DBS(数据库管理系统)在计算机系统中引入数据库后的 系统。是数据库、硬件、软件、数据库管理员及用户的集 合。
DBMS提供数据定义语言(DDL)定义数据库的三级结构 数据库管理系统的功能 数据库的定义功能 DBMS提供数据定义语言(DDL)定义数据库的三级结构 两级映象,定义数据的完整性、安全控制约束。 数据库的操作 DBMS提供数据操作语言(DML)实现对数据库中数据的操 作。基本数据操作有:检索(查询)、和更新(插入、删除、 修改)。
数据库的保护功能 DBMS对数据的保护主要通过四个方面实现,因而 DBMS中包括四个子系统。 数据库恢复 数据库的并发控制 数据库的完整性控制 数据库的安全性控制
DBMS的存储管理子系统提供了数据库中数据和应用程 数据库存储管理 DBMS的存储管理子系统提供了数据库中数据和应用程 序的一个界面,DBMS存储管理子系统的职责是把各种DML 语句转换成底层的与磁盘中数据打交道的操作系统的文件 系统命令,起到数据的存储、检索和更新的作用。
5.数据库的维护功能 数据装载程序 备份程序 文件重组织程序 性能监控程序 6. 数据字典(DD) 数据库系统中存放三级结构定义的数据库称为数据字典。对数据库的操作都要通过访问DD才能实现。DD中还存放数据库运行的统计信息,例如记录个数、访问次数等。
【软件设计师考试2007年11月上午试题51】 在数据库系统中,数据的完整性约束的建立需要 通过数据库管理系统提供的(51) 语言来实现。 (51)A. 数据定义 B. 数据操作 C. 数据查询 D. 数据控制 A
2.2 数据库系统的体系结构—三级结构两级映象 三级结构:外模式、概念模式、内模式 两级映象:外模式/模式映象、模式/内模式映象
三级结构: 外模式:单个用户使用到的那部分数据的描述。 概念模式:是用户定义的数据库中全部数据逻辑结构的描述。 内模式:是数据库在物理存储方面的描述,接近于物理存储设备,涉及到实际数据存储的结构。
两级映象 模式/内模式映象:存在于概念级和内部级之间,用于定义概念模式和内模式之间的对应性。 外模式/模式映象:存在于外部级和概念级之间,用于定义外模式和概念模式之间的对应性。
两级数据独立性 数据独立性是指应用程序和数据库的数据结构之间相互 独立,不受影响。 数据独立性分成物理数据独立性和逻辑数据独立性两个 级别。 物理数据独立性:数据的内模式修改,模式/内模式也 要进行相应的修改,但概念模式尽可能保持不变。 逻辑数据独立性:数据的概念模式修改,外模式/模式 也要进行相应的修改,但外模式尽可能保持不变。
数据模型:表示实体类型及实体间联系的模型. 根据模型应用的不同目的可以将模型化分为概念 数据模型和结构数据模型 按用户的观点对 数据和信息建模的 2.3 数据模型 数据模型:表示实体类型及实体间联系的模型. 根据模型应用的不同目的可以将模型化分为概念 数据模型和结构数据模型 概念模型 — ER模型(实体联系模型) 结构数据模型 层次模型、网状模型、关系模型 按计算机的观点对 数据建模的,直接 面向数据库的结构
概念模型 结构数据模型 现实世界 信息世界 机器世界
概念模型— ER模型(实体联系模型) 实体间的联系:实体集内部以及实体集的联 系。包括一对一的联系、一对多的联系、多对 多的联系。 描述实体间联系的模型称为实体联系模型 简称ER模型。
学生 课程 选修 学号 姓名 性别 课程号 课程名 学分 年龄 m n
1 n n 1 1 1 n n n 1 1 n 1 m n n
数据结构模型 数据库领域中常用的数据结构模型: 层次模型 网状模型 关系模型
【软件设计师考试2009年5月上午试题51】 采用二维表格结构表达实体类型及实体间联系的数据模 型是 (51) 。 (51)A. 层次模型 B. 网状模型 C. 关系模型 D. 面向对象模型
特点: 层次模型: 用树型结构表示实体类型及实体间联系的数据模型。 1.有且只有一个结点无父结点; 2.其它结点有且只有一个父结点; R1 R2 R3 R4 R5 R6 R7 特点: 1.有且只有一个结点无父结点; 2.其它结点有且只有一个父结点; 3.适用于一对多的实体联系。
层次模型的实例 系编号 办公地点 系名 系 教研室编号 教研室 学 号 成绩 姓名 学生 研究方向 职工号 教师
特点: 网状模型: 用有向图表示实体类型及实体间联系的数据模型. 1.任何一个结点可以有一个或一个以 上的父结点; 2.任何一个结点可以没有父结点; 3.适用于多对多的实体联系。 R1 R2 R3 R4
网状模型的实例 学号 姓名 系别 学生 课程 课程号 课程名 学分 选课
用二维表格结构表达实体间的联系的数据模型 关系模型: 用二维表格结构表达实体间的联系的数据模型 学号 姓名 性别 出生日期 籍贯 所在系 相片 2007842501 张三 男 1985.9.4 山西 信息工程 1.jpg 2007842502 李四 女 1984.11.26 江苏 财务管理 2.jpg 2007842503 王五 1985.4.20 河北 电子商务 3.jpg ……
关系:二维的数据表,它描述了实体之间的联系。 元组(实体):数据表中的每一行表示一个实体。 属性(字段):数据表中的每一列。 关系模型中的基本术语: 关系:二维的数据表,它描述了实体之间的联系。 元组(实体):数据表中的每一行表示一个实体。 属性(字段):数据表中的每一列。 域:属性的取值范围。 关系模式:对关系的描述称为关系模式。 关系名(属性名1,属性名2,……,属性名n) 例:学生(学号,姓名,性别,出生日期,籍贯,所在系)
超键(超码):在关系模式中,能唯一标识元组的属性集。这 个属性集可能含有多余的属性。 候选键(候选码):能唯一标识元组,且又不含有多余的属性 一个属性集,即超键中删除多余属性剩下的属性集。 主键(主码):从候选键中选择一个作为关系模式中用户使 用的候选键称为主键。 例如:在关系模式(工号,姓名,年龄,性别,工资) (工号,姓名)是关系的一个超键; (工号)是候选键; (工号)是主键。
主属性:包含在任何候选键中的属性称为主属性。不包含 在任何候选键中的属性称为非主属性。 外键(外码):当关系R中的某个属性(或属性组)虽然不 是该关系的码,但却是另一个关系S的码,称该属性(或属 性组)为R关系的外键。 全键(全码):关系模型中所有属性都是这个关系的关键字 例:R(教师,课程,学生)
系(系号,系名,系主任) 例2:选课(学号,课程号,成绩) 学生(学号, 姓名, 性别) 课程(课程号,课程名,学分) 例1:学生(学号,姓名,性别,年龄,系号) 系(系号,系名,系主任) 例2:选课(学号,课程号,成绩) 学生(学号, 姓名, 性别) 课程(课程号,课程名,学分) 外键 外键
【软件设计师考试2004年5月上午试题17、18】 D D 已知关系R如下表所示,关系R的主属性为(17) ,候 选关键字分别为 (18) 。 (17) A.ABC B.ABD C.ACD D.ABCD (18) A.ABC B.AB 、AD C.AC、AD和CD D.AB、AD、BD的CD D D
A D C 【软件设计师考试2004年11月上午试题42-44】 假定每一车次具有唯一的始发站和终点站。如果实体 “列车时刻表”属性为车次、始发站、发车时间、终点站、 到达时间,该实体的主键是 (42) ;如果实体“列车运行 表”属性为车次、日期、发车时间、到达时间,该实体的主 键是(43) 。通常情况下,上述“列车时刻表”和“列车 运行表”两实体间 (44) 联系。 (42)A.车次 B.始发站 C.发车时间 D.车次,始发站 (43)A.车次 B.始发站 C.发车时间 D.车次,日期 (44)A.不存在 B.存在一对一 C.存在一对多 D.存在多对多 A D C
关系模型的完整性约束(数据完整性) 数据完整性是用来确保数据库中数据的正确性和可靠性。 数据完整性包括: 实体完整性:主键的取值必须唯一,并且不能为空。 域完整性:保证数据的取值在有效的范围内。 参照完整性:参照完整性是通过主键和外键来保证相 关联的表间数据保持一致,避免因一个表的数据修 改,而导致关联生效。
【软件设计师考试2006年5月上午试题48】 某数据库中有: 员工关系E(员工编号,姓名,部门) 产品关系P(产品编号,产品名称,型号,尺寸,颜色); 仓库关系W(仓库编号,仓库名称,地址,负责人编号); 库存关系I(仓库编号,产品编号和产品数量) 若要求仓库关系的负责人引用员工关系的员工编号, 员工关系E的员工编号、仓库关系W的仓库编号和产品关系P 的产品编号不能为空且惟一标识一个记录,并且仓库的地址 不能为空,则依次要满足的完整性约束是 (48) 。
(48) A. 实体完整性、参照完整性、用户定义完整性 B. 参照完整性、实体完整性、用户定义完整性 C. 用户定义完整性、实体完整性、参照完整性 D. 实体完整性、用户定义完整性、参照完整性
【软件设计师考试2006年5月上午试题48】 在数据库系统中,数据的完整性约束的建立需要通过 数据库管理系统提供的(51) 语言来实现。 (51)A. 数据定义 B. 数据操作 C. 数据查询 D. 数据控制
2.4 数据操作 关系数据库的数据操作语言(DML)的语句分成查询语句 和更新语句两大类。查询语句用于描述用户的各种检索要 求;更新语句用于描述用户进行插入、删除、修改等操作。 关于查询的理论称为“关系运算理论”。 关系查询语言根据其理论基础的不同分成两大类: 关系代数语言:查询操作是以集合操作为基础的DML语言。 关系演算语言:查询操作是以谓词演算为基础的DML语言。
关系代数 关系代数的五个基本操作 关系代数的四个组合操作 —— 交、联接、自然连接、除法 关系演算 元组关系演算 域关系演算 —— 并、差、笛卡尔积、投影、选择 关系代数的四个组合操作 —— 交、联接、自然连接、除法 关系演算 元组关系演算 域关系演算
关系代数 关系代数的五个基本操作 (1)并(Union) 设关系R和S具有相同的关系模式,R和S的并是由属于R 形式定义如下: R∪S≡{t | t∈R ∨ t∈S}, t是元组变量,R和S的元数相同。
R S
(2)差(Difference) 设关系R和S具有相同的关系模式,R和S的差是由属于R 但不属于S的元组构成的集合,记为R-S。 形式定义如下: R-S≡{ t | t∈R ∧ t∈S},R和S的元数相同。
R S
(3)笛卡尔积 设关系R和S的元数分别为r和s。定义R和S的笛卡尔积是一个(r+s)元的元组集合,每个元组的前r个分量(属性值)来自R的一个元组,后s个分量来自R的一个元组,记为R×S。 形式定义如下: R×S≡{ t |t=<tr,ts>∧tr∈R∧ts∈S} 若R有m个元组,S有n个元组,则R×S有m×n个元组。
R S
(4)投影(Projection) 这个操作是对一个关系进行垂直分割,消去某些列,并重新安排列的顺序。 设关系R是k元关系,R在其分量Ai1,…,Aim(m≤k,i1,…,im为1到k间的整数)上的投影用πi1,…,im(R)表示,它是一个m元元组集合, 形式定义如下: πi1,…,im(R)≡{ t| t=〈ti1,…,tim〉∧〈t1,…,tk〉∈R }
例如,π3,1(R)表示关系R中取第1、3列,组成新 处也可以用属性名表示。例如,关系R(A,B,C), 那么πC,A(R)与π3,1(R)是等价的。
R S
(5)选择(Selection) 选择操作是根据某些条件对关系做水平分割,即选取 符合条件的元组。条件可用命题公式(即计算机语言中的条 件表达式)F表示。 F中有两种成分:运算对象和运算符 形式定义如下: σF(R)={ t | t∈R ∧ F(t)= true } σ为选择运算符,σF(R)表示从R中挑选满足公式F为 真的元组所构成的关系。
例如,σ2>ˊ3ˊ(R)表示从R中挑选第2个分量值 大于3的元组所构成的关系。 常量用引号括起来,而属性序号或属性名不要用 引号括起来。
R S
关系代数的四个组合操作 (1)交(intersection) 关系R和S的交是由属于R又属于S的元组构成的集合,记 形式定义如下: R∩S≡{t︱t∈R ∧ t∈S},R和S的元数相同。
θ连接是从关系R和S的笛卡儿积中选取属性间满足某一θ操作的元组, (2)连接(join) 连接有两种:θ连接和F连接 ① θ连接 (θ是算术比较符) θ连接是从关系R和S的笛卡儿积中选取属性间满足某一θ操作的元组, R ⋈ S≡{t︱t=<tr,ts>∧tr∈R∧ts∈S∧triθ tsj } 因此,θ连接由笛卡尔积和选择操作组合而成。 R ⋈ S≡ σiθ(r+j) (R×S) iθj iθj
② F连接 (F是公式) F连接是从关系R和S的笛卡儿积中选取属性间满足某一公式F的元组, 这里F是形为F1∧F2∧…∧Fn的公式,每个FP是形为iθj的式子,而i和j分别为关系R和S的第i、第j个分量的序号。
(3) 自然连接(natural join) 两个关系R和S的自然连接操作具体计算过程如下: ① 计算R×S ; ② 设R和S的公共属性是A1,…,AK,挑选R×S中满足 R.A1=S.A1,…,R.AK=S.AK的那些元组; ③去掉S.A1,…,S.AK这些列。 形式定义如下: R⋈S ≡ πi1,…,im (σR.A1=S.A1∧... ∧R.AK=S.AK (R×S)), 其中i1,…,im为R和S的全部属性,但公共属性只出现一次。 自然连接就是等值连接去掉重复列。
【软件设计师考试2007年11月上午试题543、55】 (54)A. π,σ和× B. -,σ和× C. ∩,σ和× D. π,σ和∩ 关系R、S如下图所示,R⋈S可由 (54) 基本的关系运 算组成,R⋈S = (55) 。 (54)A. π,σ和× B. -,σ和× C. ∩,σ和× D. π,σ和∩ A D
(4)除法(division) 设关系R和S的元数分别为r和s(设r>s>0),那么R÷S是一个(r-s)元的元组的集合。(R÷S)是满足下列条件的最大关系:其中每个元组t与S中每个元组u组成的新元组<t,u>必在关系R中。 R÷S≡π1,2,…,r-s(R)-π1,2,,,r-s((π1,2,…,r-s(R)×S)-R)
R S R÷S A B C D a b c d e f C D c d e f A B a b e d ① 先列出R-S的属性 ② 属性值A、B同时满足S中(c,d)和(e,f)的元组。
例:选修了所有课程的学生的学号和姓名。 C# s1 s1 s3 选修表 s2 课程 选修表÷课程 s3 s4 S# C# c1 c2 c1
例:检索所学课程包含学生s1所学课程的学生学号。 选修表 课程 S# C# Grade s1 c1 90 c2 85 s2 c4 76 s3 68 65 s4 70 c3 86 C# Cname c1 数据库 c2 英语 c3 高数 c4 体育 S# s1 s3 πs#,c#(选修表)÷ πc# (σs#=ˊs1ˊ (选修表))
在关系代数运算中,关系 S、SP和R如下表所示。若 先 ___(33)___ ,则可以从 S 和 SP 获得 R 。其对应的 【软件设计师考试2005年11月上午试题33、34】 在关系代数运算中,关系 S、SP和R如下表所示。若 先 ___(33)___ ,则可以从 S 和 SP 获得 R 。其对应的 关系表达式为 ___(34)___ 。 SP R S 部门号 商品号 销售量 010 01020210 500 01020211 780 01020212 990 021 02110200 580 025 02520100 1290 035 03530311 4680 部门名 商品号 销售量 家电部 01020210 500 01020211 780 01020212 990 部门号 部门名 010 家电部 021 百货部 030 食品部 035 五金部
(33)A.对 S 进行选择运算,再与 S 进行自然连接运算 B.对 S 进行选择运算,再与 SP 进行自然连接运算,最 后进行投影运算 C.对 S 和 SP 进行笛卡尔积运算,再对运算结果进行投 影运算 D.分别对 S 和 SP 进行投影运算,再对运算结果进行 笛卡尔积运算
如下的 SQL 语句可以查询销售总量大于 1000 的部门号。 Select 部门名 From S Where 部门号 in (Select 部门号 From SP Group by ___(35)___) (35) A. 部门号 where sum( 销售量 )>1000 B. 部门号 having sum( 销售量 )>1000 C. 商品号 where sum( 销售量 )>1000 D. 商品号 having sum( 销售量 )>1000
【软件设计师考试2006年5月上午试题47】 设有关系R、S如下所示,则关系代数表达式R÷S的结果 集为(47) 。 C R S
关系演算 元组关系演算 在元组关系演算中,元组关系演算表达式简称为元组表 达式,其一般形式为: { t|P(t)} 公式,在数理逻辑中也称为谓词,也就是计算机语言中的条 件表达式。{ t|P(t)}表示满足公式P的所有元组t的集 合。
在元组表达式中,公式由原子公式组成。 原子公式(Atoms)有下列三种形式: ① R(s) :s是R的一个元组。 ② s[i]θu[j] :元组 s的第i个分量与元组u的第j个分量之间 满足θ关系。 ③ s[i]θa或aθu[j]:a是常量。 在定义关系演算操作时,要用到“自由” 和“约束”变量概 念。在一个公式中,如果元组变量未用存在量词∃或全称量 词符号定义,那么称为自由元组变量,否则称为约束元组 变量。
例:已知关系R,S,给出R1-R5五个关系的元 组关系演算表达式。 R1 = { t | S(t)∧t[1]>2 }
R2 = { t | R(t)∧┐S(t)}
R3 = { t |(u)(S(t)∧R(u)∧t[3]<u[2]}}
R4 = { t |(u)(R(t)∧ S(u)∧t[3]>u[1])}
R5 = { t |(u)(v)(R(u)∧ S(v)∧u[1]>v[2]∧t[1]=u[2]∧t[2]=v[3]∧t[3]=u[1])}
关系代数表达式到元组表达式的转换: R∪S 可用{ t | R(t)∨S(t)}表示; R×S可用{ t |(u)(v)(R(u)∧S(v) ∧t[1]=u[1] ∧t[2]=u[2]∧t[3]=u[3]∧t[4]=v[1]∧t[5]=v[2] ∧t[6]=v[3])} 表示。 投影操作是π2,3(R),那么元组表达式可写成: { t |(u)(R(u)∧t[l]=u[2]∧t[2]=u[3])} σF(R)可用{ t |R(t)∧F‘}表示,F’是F的等价表示形式。 例如σ2='d'(R)可写成{ t |(R(t)∧t[2]='d')。
【软件设计师考试2005年5月上午试题36、37】 某数据库中有供应商关系S和零件关系P,其中;供应商 关系模式S(Sno,Sname,Szip,City),零件关系模式 P(Pno,Pname,Color,Weight,City),供应模式 SP(Sno,Pno, Status,Qty),要求一个供应商可以供应多 种零件,而一种零件可由多个供应商供应。 查询供应了“红”色零件的供应商名、零件号和数量的 元组演算表达式为: {t|(u)(v)(w)( (36) ∧u[1]=v[1]∧v[2]=w[1]∧w[3]=' 红'∧ (37) )}
(36) A. S(u)∧SP(v)∧P(w) B. SP(u)∧S(v)∧P(w) C. P(u)∧SP(v)∧S(w) D. S(u)∧P(v)∧SP(w) (37) A.t[1]=u[1]∧t[2]=w[2]∧t[3]=v[4] B. t[1]=v[1]∧t[2]=u[2]∧t[3]=u[4] C. t[1]=w[1]∧t[2]=u[2]∧t[3]=v[4] D. t[1]=u[2]∧t[2]=v[2]∧t[3]=v[4]
关系数据库SQL语言 SQL的数据定义 SQL的数据查询 SQL的数据更新
【软件设计师考试2005年11月上午试题33、34】 关系R,S如下图所示,元组演算表达式 {t|(u)(R(t)∧S(u)∧t[3]﹥u[1])}的结果为 (47)
SQL的数据定义——创建表 CREATE TABLE <表名> ( <列名1> <数据类型> <完整性约束条件1>, <列名2> <数据类型> <完整性约束条件2>, ………… , <列名n> <数据类型> <完整性约束条件n> )
涉及相应属性列的完整性约束条件: 主键约束:PRIMARY KEY 检查约束:CHECK 外键约束:FOREIGN KEY 唯一性约束: UNIQUE 是否为空值约束: NULL / NOT NULL 默认值: DEFAULT
例:使用T-SQL语言创建Student 表 Student(Sno , Sname, Ssex ) CREATE TABLE Student (sno CHAR(10) PRIMARY KEY , sname CHAR(8) NOT NULL UNIQUE, ssex CHAR(2) DEFAULT ('男') )
例:使用T-SQL语言创建Crouse表 Crouse (cno,cname, credit ) CREATE TABLE Course ( cno char(10) PRIMARY KEY, cname char (8) NOT NULL UNIQUE, credit int )
例:使用T-SQL语言创建SC表 SC ( sno,cno,score) 主键表名 CREATE TABLE SC ( sno CHAR(10) FOREIGN KEY REFERENCES Student (sno), cno CHAR(10) FOREIGN KEY REFERENCES Course (cno) , score INT CHECK (score BETWEEN 0 AND 100) , PRIMARY KEY (sno, cno) ) 主键
CREATE TABLE SC ( sno CHAR(10), cno CHAR(10), score INT, PRIMARY KEY (sno, cno), FOREIGN KEY (sno) REFERENCES Student (sno), FOREIGN KEY (cno) REFERENCES Course (cno) , CHECK (score BETWEEN 0 AND 100) )
某数据库中有供应商关系S和零件关系P,其中;供应商 关系模式S(Sno,Sname,Szip,City)零件关系模式 P(Pno,Pname,Color,Weight,City)要求一个供应 商可以供应多种零件,而一种零件可由多个供应商供应。 请将下面的SQL语句空缺部分补充完整。 CREATE TABLE SP(Sno CHAR(5), Pno CHAR(6), Status CHAR(8), Qty NUMERIC(9), __(33)__(Sno,Pno), __(34)__(Sno), __(35)__(Pno));
供选择的答案: (33)-(35) A.FOREIGN KEY B.PRIMARY KEY C.FOREIGN KEY(Sno)REFERENCES S D.FOREIGN KEY(Pno)PEFERENCES P (33)A (33)C (35)D
SQL的数据查询 数据查询语句基本格式如下: SELECT <查询项的列表> FROM <表名> WHERE <条件表达式>
6个聚合函数: SUM(列名):求某一列的总和(此列的值必须是数值型) AVG(列名):求某一列的平均值(此列的值必须是数值型) MIN(列名):求某一列中的最小值 MAX(列名):求某一列中的最大值 COUNT(列名):传回一列中的非NULL值的个数 COUNT(*):传回符合查询条件的元组的个数
例:查询男生的总人数,以及他们的平均年龄。 SELECT COUNT(*), AVG(年龄) FROM 学生 WHERE 性别=‘男’
例:查询财管1班的所有学生的英语总成绩和均分。 SELECT SUM(c1), AVG(c1) FROM 成绩 WHERE c#=‘c1’
ORDER BY子句——对查询的结果进行排序 SELECT语句中可以使用ORDER BY子句对查询 的结果进行排序,带ASC参数时为升序,带DESC参数 时为降序,不待任何参数时为默认方式——升序。 SELECT <查询项的列表> FROM <表名> WHERE <条件表达式> ORDER BY <排序表达式> [ASC | DESC]
例:查询全体学生的姓名和年龄,年龄按降序排列 显示。 例:查询全体学生的姓名和年龄,年龄按降序排列 显示。 SELECT 姓名, 年龄 FROM 学生 ORDER BY 年龄 DESC
GROUP BY 子句、 HAVING 子句 ——按条件分类统计 在SELECT语句中可以使用GROUP BY子句进 行分类统计。 GROUP BY子句可以将表达式的值相 同的记录归为同一组,从而进行统计。 语法格式如下: GROUP BY <分组表达式>
HAVING <组条件表达式> 和SELECT语句一起使用,通常和GROUP BY连用。 语法格式如下: HAVING <组条件表达式>
例:查询女生每一年龄组有多少人。 SELECT 年龄, count(*) FROM 学生 WHERE 性别='女' GROUP BY 年龄
例:查询女生每一年龄组超过10人的年龄。 SELECT 年龄, FROM 学生 WHERE 性别='女' GROUP BY 年龄 HAVING COUNT(*)>10
例:查询平均成绩低于60分的课程。 SELECT 课程号, AVG (成绩) FROM 成绩 GROUP BY 课程号 HAVING AVG (成绩) <60
例:下面给一个关系模式 R(TNAME,ADDRESS,C#,CNAME) 关系模式中的属性一次表示教师姓名,教师地址,课 程编号,课程名。分析该模式存在的问题。 TNAME ADDRESS C# CNAME t1 a1 c1 n1 c2 n2 c3 n3 t2 a2 c4 n4 c5 t3 a3 c6
有现实世界中的事实可知: 一个教师只有一个地址(户籍所在地); 一个教师可教若干门课程; 每门课程只有一个教师任教。 即:TNAME → ADDRESS C# → CNAME C# → TNAME 于是关系模式R的主键是 C#
虽然这个模式只有四个属性,但在使用过程中明显存 在下列问题。 数据冗余。在上述关系中,如一名教师教多门课程, 那么这位教师的地址就要重复多次。 (2)更新异常。由于数据的冗余,在数据更新时会出现问 题,例如:一个教师教三门课程,在关系中就会有三个元 组,如果他的地址改变了,这三个元组中的地址都要改 变,若有一个元组中的地址没有更改,就造成这个教师的 地址不惟一,产生错误的信息。
(3)插入异常。在关系方法中,每个关系必须用键值区分关系 中的不同元组。如果新增加一名教师,尚未分配教学任务,那 么要存储该教师的姓名和地址到关系中去时,在属性C#和 CNAME上就没有值,在本例中C#是主键的一部分,键值为空的 元组违反了实体完整性约束。 (4)删除异常。与插入异常相反,删除操作会引起一些信息的 丢失。如一个教师原来有教学任务,目前没有安排那么要把这 个教师的所有元组都要删去,这样就把这个教师的姓名和地址 信息也从数据库中删去了,这也是一种不合理的现象。
对于上述模式中存在的问题可采用分解的方法,将 其分解成两个模式: R1(TNAME,ADDRESS) R2(TNAME,C#,CNAME) 那么分解后的关系模式的好坏,用什么标准来衡量 呢? —— 范式:满足特定要求得关系模式。
设有关系模式R(U),X和Y是属性集U的子 集, r是R任一具体关系,如果对r的任意两个元组 t1和 t2,都有t1[X]= t2[X]导致t1[Y]= t2[Y], 那么称X函数决定Y或Y函数依赖X,记为X→Y, X→Y为模式R的一个函数依赖。
第一范式 如果关系模式R的每个关系r的属性值都是不可分的原子 值,那么称R是第一范式(first normal form,简记为1NF)的 模式。 满足1NF的关系称为规范化的关系,否则称为非规范化的关 系。关系数据库研究的关系都是规范化的关系。例如关系模式R (NAME,ADDRESS,PHONE),如果一个人有两个电话号码 (PHONE),那么在关系中至少要出现两个元组,以便存储这两 个号码。 1NF是关系模式应具备的最起码的条件。在建立关系数据模 型时,必须将非规范化形式规范化,
第一范式
第二范式 如果关系模式R是1NF,且每个非主属性完全函数依赖 于候选键,那么称R是第二范式(2NF)模式。如果数据库 模式中每个关系模式都是2NF,则称数据库模式为2NF的数 据库模式。 对于函数依赖W→A,如果存在X⊂W有X→A成立,那么 称W→A是局部依赖(A局部依赖于W);否则称W→A是完 全依赖。
例:现在分析以下关系,它符合第一范式。假定职工号 是每个职工的唯一标识,而工资完全由级别所确定。毕 业时间由职工号和学历确定。 这表明:姓名、级别、工资等的取值依赖于职工号, 而毕业时间要由职工号和学历两个属性才能唯一确定。
那么,在这个表中各个属性之间表示的相互依赖关系如图。 存在(姓名,级别,工资)对(职工号,学历)的局部依赖
因此,可以拆开原来关系为以下两个关系,使之成 为第二范式。
第三范式 如果关系模式R是1NF,且每个非主属性都不 传递依赖于R的候选键,那么称R是第三范式 (3NF)的模式。如果数据库模式中每个关系模 式都是3NF,则称其为3NF的数据库模式。 如果X→Y,Y→A,且Y→X和 A∈Y,那么称 X→A是传递依赖(A传递依赖于X)。
由以上关系可以看到实际上可能很多人的级别都是技6级 的,那么他们的工资都是1500元,如果把技6级的工资改为 1800元,则所有技6级的工资都要改,只要一个人改错了, 就会造成同一级工资不一样的错误。 原因就在于这些属性间存在着传递依赖关系: 职工号→级别,级别→工资 从而使:职工号→级别→工资
进一步的规范化就是要消去非主属性对主关键字的传递 依赖性,变为第三范式。 现在只要把第二范式的关系恰当拆开为几个关系即可达 目的。
【软件设计师考试2004年11月上午试题45、46】 建立一个供应商、零件数据库。其中“供应商”表S(Sno,Sname,Zip,City)分别表示:供应商代码、供应商名、供应商邮编、供应商所在城市,其函数依赖为:Sno→(Sname,Zip,City ),Zip→City。“供应商”表S属于 (53) 。 (53)A. 1NF B. 2NF C. 3NF D. BCNF B
数据库模式设计原则 : 关系模式R相对于函数依赖集分解成数据库模式ρ={R1, R2,。。。Rk },一般应具有下面四项特性。 (1) Ρ中每个关系模式 上应有某种分时性质(3NF或 BCNF) (2)无损联接。 (3)保持函数的依赖集。
无损联接 设R是一个关系模式,F是R上的一个函数依赖 集。R分解成数据库模式ρ={ R1,…,Rk }。 如果对R中满足F的每一个关系r,都有 r=πR1(r)⋈πR2(r)⋈ … ⋈πRk(r) 那么称分解ρ相对于F是“无损联接分解” 简称 为“无损分解”,否则称为“损失分解”。
无损联接测试: 设ρ={ R1,R2 }是关系模式R的一个分 解,F是R上成立的FD集,那么分解ρ相对于F 是无损分解的充分必要条件是: (R1∩R2)→(R1-R2) 或 (R1∩R2)→(R2-R1)。
保持函数的依赖集 保持关系模式一个分解是等价的另一个重要条 件是关系模式的函数依赖集在分解后仍在数据库模 式中保持不变。 设ρ={ R1,…,Rk }是R的一个分解,F是R 上的函数依赖,如果有 ∪πRi(F)=F,那么称分 解ρ保持函数依赖集F。
【软件设计师考试2004年11月上午试题45、46】 A C 关系模式R(U,F),其中U={W,X,Y,Z},F={WX→Y,W→X, X→Z,Y→W}。关系模式R的候选建是 (45) 、 (46) 是无损 连接并保持函数依赖的分解。 (45)A.W和Y B. WY C.WX D.WZ (46)A.p={R1(WY),R2(XZ)} B.p={R1(WZ),R2(XY)} C.p={R1(WXY),R2(XZ)} D.p={R1(WX),R2(YZ)} A C
U={W,X,Y,Z},F={WX→Y,W→X, X→Z,Y→W} 求属性集U关于函数依赖F的属性闭包U+。 设 W+=W 找到左边被W包含的函数依赖关系:W→X, 将 W+= W∪X =WX 同理:找到左边被WX包含的函数依赖关系:WX→Y, X→Z 将 W+= WX∪Y∪Z =WXYZ 所以W+=WXYZ,即W能决定多有的属性,W为候选键
U={W,X,Y,Z},F={WX→Y,W→X, X→Z,Y→W}