【综合题】【数据库原理】
答案:令X=AEX(0)= AEX(1)=X(0)DC=AECDX(2)=X(1)G=AECDGX(3)=X(2)=AECDG所以(AE)+ =AECDG过程讲解:求(AE)+就是求:在题目的关系模式R中AE能函数确定的所有属性构成的集合。首先,令X=AE这种题要分几步来做 (即分别求(AE)(0),(AE)(1) , (AE)(2)…也就是求X(0),X(1) , X(2)…):(1)X(0)=
文章目录
一、属性集合的闭包计算
【例题】设有关系模式R(U,F),其中属性集U={A,B,C,D,E,G},函数依赖集F={ A→D,AB→E,BG→E,CD→G,E→C },计算 (AE)+ 。
答案:
令X=AE
X(0)= AE
X(1)=X(0)DC=AECD
X(2)=X(1)G=AECDG
X(3)=X(2)=AECDG
所以(AE)+ =AECDG
过程讲解:
求(AE)+就是求:在题目的关系模式R中AE能函数确定的所有属性构成的集合。
首先,令X=AE
这种题要分几步来做 (即分别求(AE)(0),(AE)(1) , (AE)(2)…也就是求X(0),X(1) , X(2)…):
(1)X(0)= AE (求谁的F+, X(0) 就等于谁 。)
(2)在F中找出箭头左边是上一步X(0)的结果AE或者AE的子集的函数依赖,分别是A→D,E→C,
所以 X(1)为上一步X(0)的结果AE 和找到的两个函数依赖中箭头右侧的属性D、C 的并集 即 X(1)=X(0)DC = AECD
(3)在F中未使用过的函数依赖里(A→D,E→C为使用过的),找出箭头左边是AECD或者是AECD任一子集的函数依赖,只有CD→G,
所以 X(2)为上一步X(1)的结果 AECD和找到的一个函数依赖中箭头右侧的属性G的并集,即X(2)=X(1)G=AECDG
(4)F中未用过的函数依赖(A→D,E→C,CD→G为使用过的)中箭头左边是上一步X(2)的结果AECDG或者AECDG的任一子集的函数依赖,已经没有了,所以不必再计算下去,即 X(3)=X(2)=AECDG
(5)所以(AE)+ =AECDG
结束的条件通常有2种:
(1)当计算到某一步时发现 X(i)的结果包含了全部属性( 即题中所给的U中的所有属性,本题中为A,B,C,D,E,G )。
(2)当计算到某一步时发现这一步的结果X(i+l)和上一步的结果X(i)相等(本例子就是这种情况。
二、确定候选码并进行范式级别的判断
【例题】设有关系模式R(U,F),其中属性集U={ A,B,C,D },函数依赖集F={ A→C,C→A,B→AC,D→AC }
(1)求出R的候选码。
(2)根据函数依赖关系,确定关系模式R属于第几范式。
答案:
(1)因为BD能函数确定U中所有属性,所以R的候选码为BD
(2)根据函数依赖集F可知非主属性不是完全函数依赖于主码BD,所以R不是二范式,R属于第一范式
2.1 确定候选码讲解
求R的所有候选码要根据题目中的函数依赖F来做。看看U中的4个属性A,B,C,D,属于L,R,LR,N中的哪一类。
确定候选码的准则如下:
准则1:如果某个属性A只在F中各个函数依赖的箭头左边出现,则A必是候选码中的属性。
准则2:如果某个属性A只在F中各个函数依赖的箭头右边出现,则A必不是候选码中的属性。
准则3:如果某个属性A在F中某个函数依赖的箭头右边出现,又在其他函数依赖的箭头左边也出现,则A有可能是候选码中的属性。
准则4:如果某个属性A不在F的各个函数依赖中出现,则A必是候选码中的属性。(这种情况比较少)
本题分析:
F={ A→C,C→A,B→AC,D→AC }
本题中只在函数依赖的箭头左边出现的属性:B、D
只在函数依赖的箭头右边出现的属性:没有
既在函数依赖的箭头右边出现,又在其他函数依赖的箭头左边出现的属性 :A、C
不在F的各个函数依赖中出现的属性:没有
所以, R的候选码肯定有属性BD,也有可能有A、C,到底有没有A、C需要计算(BD)+ ,如果(BD)+的结果= U,即ABCD,那就没有A、C。
因为本题(BD)+ =ABCD ,故R的候选码就是BD
2.2 范式级别的判断讲解
1NF定义:一般的关系模式都默认为1NF,不需要判定;
2NF定义:设R是一个关系模式,R属于第二范式当且仅当R是1NF,且每个非主属性都完全函数依赖于主码。
3NF定义:设R是一个关系模式,R属于第三范式当且仅当R是2NF,且每个非主属性都非传递函数依赖于主码。
本题R的候选码是BD,所以 B,D为主属性,A,C为非主属性,
题中F={A→C,C→A,B→AC,D→AC},从B→AC或D→AC 都可以看出:非主属性A、C不是完全函数依赖主码BD的,所以R不是2NF,只是1NF。
三、根据要求写SQL语句
1、数据查询
SELECT语句完整的句法:
SELECT <表的列名或列表达式序列>
FROM <基本表名和(或)视图序列>
[WHERE <行条件表达式>]
[GROUP BY <列名序列>
[HAVING <组条件表达式>]]
[ORDER BY <列名[ASC | DESC]>,…]
说明:
[]表示其中的内容根据需要可以省略。
|表示二选一。
SELECT:用于指定输出的内容;
FROM:用于指定要检索的数据的来源表;
WHERE:称为“行条件子句”,用于指定对元组的选取条件;
GROUP BY:称为“分组子句”,作用是指定对元组进行分类后再检索;
HAVING:称为“组条件子句”,用于指定对分类后的元组的选取条件;
ORDER BY:称为“排序子句”,作用是对检索到的元组进行排序。
2、数据更新
(1)数据插入
语法:INSERT INTO <基本表名> [(<列名序列>)] VALUES(<元组值>)
(2)数据删除
语法:DELETE FROM <基本表名> [WHERE <条件表达式>]
(3)数据修改
语法:UPDATE <基本表名>
SET <列名> = <值表达式> [,<列名>=<值表达式>…] [WHERE <条件表达式>]
【例题】教学数据库school中有如下三个关系模式,分别用SQL语句完成下列各题。
student(学号,姓名,性别,出生日期,班号)
course(课程号,课程名)
score(学号,课程号,分数)
(1)向student表中插入一个学生记录(‘100’,‘曾雷’,‘男’,‘2017-7-11’,‘1733’)。
(2)将student表中学号是‘100’的学生的性别修改为‘女’。
(3)删除学号为‘300’的学生记录。
(4)查询student表的所有学生的学号,姓名信息。
(5)查询score表中分数在70–80之间的所有记录。
答案:
(1) INSERT INTO Student VALUES('100','曾雷','男 ','2017-7-11','1733')
(2) UPDATE Student SET 性别='女' WHERE 学号='100'
(3) DELETE FROM Student WHERE 学号='300'
(4) SELECT 学号,姓名 FROM student
(5) SELECT * FROM score WHERE 分数 BETWEEN 70 AND 80
四、关系代数运算和画E-R图并进行关系模式转换
4.1 关系代数运算
设有关系R、S和T如下,计算下列各题。
传统集合运算:
连接运算:
投影:
4.2 E-R图向关系模式的转换
1.有商店和顾客两个实体,“商店”有属性商店编号、商店名、地址、电话,“顾客”有属性顾客编号、姓名、地址、年龄、性别。假设一个商店有多个顾客购物,一个顾客可以到多个商店购物,顾客每次去商店购物有一个消费金额和日期,而且规定每个顾客在每个商店里每天最多消费一次。
满足需求的E-R图如下所示,试将E-R图转换成等价的关系模型,要求每个关系模式的主码加下划线表示。
正确答案:
商店(商店编号 ,商店名,地址,电话)
顾客(顾客编号 ,姓名,地址,年龄,性别)
消费(商店编号,顾客编号 ,消费金额,日期)
一般实体以编号为主码(能唯一确定实体)
更多推荐
所有评论(0)