文档库 最新最全的文档下载
当前位置:文档库 › 数据库ER图练习题

数据库ER图练习题

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的学生学号与姓名

(σ CNO='C2'(S SC))

π

由于这个查询涉及到两个关系S和SC,因此先对这两个关系进行自然连接,同一位学生的有关的信息,然后再执行选择投影操作。

此查询亦可等价地写成:

πSNO,SNAME(S)(πSNO(σ CNO='C2'(SC)))

这个表达式中自然连接的右分量为"学了C2课的学生学号的集合"。这个表达式比前一

个表达式优化,执行起来要省时间,省空间。

(3)检索选修课程名为MATHS的学生学号与姓名。

(σ CNAME='MATHS'(S SC C))

π

(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'(S SC))

这个表达式用了差运算,差运算的左分量为"全体学生的姓名和年龄",右分量为"学了

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,可以用自然连结和投影操作组合而成:

(S (πSNO,CNO(SC)÷πCNO(C)))

π

这就是最后得到的关系代数表达式。

(8)检索所学课程包含S3所学课程的学生学号。

注意:学生S3可能学多门课程,所以要用到除法操作来表达此查询语句。

学生选课情况可用操作πSNO,CNO(SC)表示;

所学课程包含学生S3所学课程的学生学号,可以用除法操作求得:

πSNO,CNO(SC)÷ πCNO(σ SNO='S3'(SC))

(9)将新课程元组('C10','PHYSICS','YU')插入到关系C中

(C∪('C10','PHYSICS','YU'))

(10)将学号S4选修课程号为C4的成绩改为85分。

(SC-('S4','C4',?)∪('S4','C4',85))

修改操作用代数表示分两步实现:先删去原元组,再插入新元组。题目中未给出原先的成绩,所以用"?"代替,检索时可忽略。

要求:

(4)是否达到BCNF及原因。

3.考虑如下所定义的学生-教师-课程信息数据库(其中加下划线的是主码),试完成下列各小题:

Student(Sno,Sname,Sage,Ssex,Class)(学生信息表)

Teacher(Tno,Tname,Tsex,Tage,Tprof,Tdept)(教师信息表)

Course(Cno,Cname,Tno)(课程信息表)

SC(Sno,Cno,Grade)(选课表)

试用关系代数表示下列查询语句:

(1)查询年龄不大于22岁的女学生的姓名和学号;

(2)查询选修了“李军”老师所授的课程名为“数据库”的学生学号和姓名;

(3)查询至少选修了教师编号(Tno)为826的老师所授全部课程的学生学号。

(4)是否达到BCNF及原因。

相关文档