1. 对于学生选课关系,其关系模式为: 学生(学号,姓名,年龄,所在系); 课程(课程名,课程号,先行课); 选课(学号,课程号, 成绩)。 课堂练习:
1、查询学生95001的姓名和所在系。 2、查询至少选修了两门课程的学生学号。 3、查询选修了1号课程的学生姓名。 4、查询没有选修数据库课程的学生姓名。
5、查询至少选修了1号课程和3号课程的学生学号。 用关系代数完成如下查询。
1)求学过数据库课程的学生的姓名和学号。 2)求学过数据库和数据结构的学生姓名和学号。 3)求没学过数据库课程的学生学号。 4)求学过数据库的先行课的学生学号。
5)求数据库最高、最低成绩学生的姓名。 6)有相同成绩学生的学号。
2. 设有一个SPJ数据库,包括Suppliers,Parts,Projects,SPJ四个关系模式: Suppliers(SNO,SNAME,STATUS,SCITY); Parts(PNO,PNAME,COLOR,WEIGHT); Projects(JNO,JNANE,JCITY); SPJ(SNO,PNO,JNO,QTY)。
其中:供应商表Suppliers由供应商代码(SNO)、供应商姓名(SNAME)、供应商状态(STATUS)、供应商所在城市(SCITY)组成;零件表Parts由零件代码 (PNO)、零件名(PNAME)、颜色(COLOR)、重量(WEIGHT)组成;工程项目表Projects由工程项目代码(JNO)、工程项目名(JNAME)、工程项目所在城市(CITY)组成;供应情况表SPJ由供应商代码(SNO)、零件代码 (PNO)、工程项目代码(JNO)、供应数量组成(QTY)组成,表示某供应商供应某种零件给某工程项目的数量为QTY。 试用关系代数完成如下查询:
1)求供应工程J1 零件的供应商号码SNO。 2)求供应工程J1 零件P1的供应商号码SNO。 3)求供应工程J1 零件为红色的供应商号码SNO。 4)求没有使用天津供应商生产的红色零件的工程号。 5)求至少用了供应商S1所供应的全部零件的工程号。
课堂练习:
(1)求上海的所有供应商的信息。 (2)求位于郑州的所有工程的信息 (3)求数量在100-150之间的供应 (4)求工程J1提供零件的供应商号。 (5)求供应工程J1红色零件的供应商号 (6)求不供应零件P2的供应商名称
(7)求没有使用天津供应商生产的红色零件的工程号
(8)求使用了本地供应商提供的零件的工程号和工程名称 (9)求未使用本地供应商提供的零件的工程号和工程名称 (10)求至少用了供应商号为02所供应的全部零件的工程号
1、已知关系R(A,B,C,D)的函数依赖为A→B,B→C和D→B,回答如下问题:
(1) 求出R的码; A D
(2)R是BCNF范式吗?为什么?如果不是,把它分解成BCNF范式。 R1(A,B) R2(B,C) R3(D,B) R4(A,D)
2、已知关系R(A,B,C,D)的函数依赖为A→B,B→C,A→D和D→C,回答如下问题:
(1) 求出R的码.A
(2) R是第三范式吗?为什么?如果不是,把它分解成第三范式 R1(A,B,D) R2( B,C) R3(D,C)
3.设有关系框架R(A,B,C,D,E,P)及其上的函数相关性集合F={A→B,C→P,E→A,CE→D}:
(1)求出R的所有候选关键字。(2)将R无损连接分解到BCNF。
课堂练习:
现有如下关系模式:
R(A#,B#,C,D,E) 其中:A#B#组合为码
R上存在的函数依赖有A#B#→E,B#→C,C→D (1)该关系模式满足2NF吗?为什么? (2)如果将关系模式R分解为:
指出关系模式R2的码,并说明该关系模式最高满足第几范式?(在1NF~BCNF之内)。
(3)将关系模式R分解到BCNF。
课后作业:
1.设教学数据库中有3个关系: 学生关系 S(SNO,SNAME,AGE,SEX) 学习关系 SC(SNO,CNO,GRADE) 课程关系 C(CNO,CNAME,TEACHER) 下面用关系代数表达式表达每个查询语句。 (1) 检索学习课程号为C2的学生学号与成绩。 (2) 检索学习课程号为C2的学生学号与姓名
(3) 检索选修课程名为MATHS的学生学号与姓名。 (4) 检索选修课程号为C2或C4的学生学号。
(5) 检索至少选修课程号为C2和C4的学生学号。 (6) 检索不学C2课的学生姓名与年龄。 (7) 检索学习全部课程的学生姓名。
(6)检索至少选修两门课程的学生学号。 πS#(σ1=4∧2≠5(SC×SC))
用关系代数表示数据查询的典型例子
[例]设教学数据库中有3个关系: 学生关系S(SNO,SNAME,AGE,SEX) 学习关系SC(SNO,CNO,GRADE) 课程关系C(CNO,CNAME,TEACHER) 下面用关系代数表达式表达每个查询语句。
(1) 检索学习课程号为C2的学生学号与成绩。 πSNO,GRADE(σ CNO='C2'(SC))
(2) 检索学习课程号为C2的学生学号与姓名 πSNO,SNAME(σ CNO='C2'(SSC))
由于这个查询涉及到两个关系S和SC,因此先对这两个关系进行自然连接,同一位学生的有关的信息,然后再执行选择投影操作。 此查询亦可等价地写成:
πSNO,SNAME(S)(πSNO(σ CNO='C2'(SC)))
这个表达式中自然连接的右分量为\学了C2课的学生学号的集合\。这个表达式比前一
个表达式优化,执行起来要省时间,省空间。
(3)检索选修课程名为MATHS的学生学号与姓名。 πSNO,SANME(σ CNAME='MATHS'(SSCC))
(4)检索选修课程号为C2或C4的学生学号。 πSNO(σ CNO='C2'∨CNO='C4'(SC))
(5) 检索至少选修课程号为C2或C4的学生学号。 π1(σ1=4∧2='C2'∧5='C4'(SC×SC))
这里(SC×SC)表示关系SC自身相乘的乘积操作,其中数字1,2,4,5都为它的结果关系中的属性序号。
比较这一题与上一题的差别。
(6) 检索不学C2课的学生姓名与年龄。
πSNAME,AGE(S)-πSNAME,AGE(σ CNO='C2'(SSC))
这个表达式用了差运算,差运算的左分量为\全体学生的姓名和年龄\,右分量为\学了C2课的学生姓名与年龄\。
(7)检索学习全部课程的学生姓名。 编写这个查询语句的关系代数过程如下: (a) 学生选课情况可用πSNO,CNO(SC)表示; (b) 全部课程可用πCNO(C)表示;
(c) 学了全部课程的学生学号可用除法操作表示。
操作结果为学号SNO的集合,该集合中每个学生(对应SNO)与C中任一门课程号CNO配在一起都在πSCO,CNO(SC) 中出现(即SC中出现),所以结果中每个学生都学了全部的课程(这是\除法\操作的含义): πSNO,CNO(SC)÷πCNO(C)
(d) 从SNO求学生姓名SNAME,可以用自然连结和投影操作组合而成: πSNAME(S
(πSNO,CNO(SC)÷πCNO(C)))
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库数据库ER图练习题在线全文阅读。
相关推荐: