实体完整性:指表中行的完整性,要求每一个表中的主键字段都不能为空或者重复的值。参照完整性:是相关联的两个表之间的约束,具体的说,就是从表中每条记录外键的值必须是主表中存在的,因此如果在两个表之间建立了关联关系,则对一个关系进行的操作要影响到另一个表中的记录。数据模型是对客观事物及联系的数据描述,是概念模型的数据化,及数据模型提供表示和组织数据的方法。数据模型通常由数据结构、数据操作和数据的完整性约束三要素组成。数据库系统的三级模式结构:是指数据库是由外模式、模式和内模式三级构成,通过二级映像功能将三个模式联系起来。数据库的恢复:是指当数据库系统发生故障时,通过一些技术使数据库从被破坏、不正确的状态恢复到最近一个正确的状态。日志文件:是暂存放数据的文件。4.要建立关于系、学生、班级、研究会等信息的一个关系数据库。规定:一个系有若干专业、每个专业每年只招一个班,每个班有若干学生,一个系的学生住在同一个宿舍区。每个学生可参加若干研究会,每个研究会有若干学生。学生参加某研究会,有一个入会年份。描述学生的属性有:学号、姓名、出生年月、系名、班号、宿舍区。描述班级的属性有:班号、专业名、系名、人数、入校年份。描述系的属性有:系号、系名、系办公室地点、人数。描述研究会的属性有:研究会名、成立年份、地点、人数。试给出上述数据库的关系模式;写出每个关系的基本的函数依赖集;指出是否存在传递函数依赖,指出各关系的主码和外码。答:关系模式:学生(学号,姓名,出生年月,系号,班号,宿舍区)班级(班号,专业名,系号,人数,入校年份)系(系号,系名,系办公室地点,人数)研究会(研究会名,成立年份,地点,人数)参加研究会(学号,研究会名,入会年份)学生关系的基本函数依赖集:学号→(姓名,出生年月,系号,班号),系名→宿舍区班级关系的基本函数依赖集:班号→(专业名,系号,人数,入校年份)系关系的基本函数依赖集:系名→(系号,系办公室地点,人数)研究会关系的基本函数依赖集:研究会名→(成立年份,地点,人数)参加研究会关系的基本函数依赖集:(学号,研究会名)→入会年份5.设有关系模式R(运动员编号,姓名,性别,班级,班主任,项目号,项目名,成绩)如果规定:每名运动员只能代表一个班级参加比赛,每个班级只能有一个班主任;每名运动员可参加多个项目,每个比赛项目也可由多名运动员参加;每个项目只能有一个项目名;每名运动员参加一个项目只能有一个成绩。根据上述语义,回答下列问题:(1)写出关系模式R的主关键字;(2)分析R最高属于第几范式,说明理由。(3)若R不是3NF,将其分解为3NF。答:(1)关系模式R的主关键字是{运动员编号,项目号}。(2)R最高属于第一范式。因为存在着姓名,性别,班级和项目名对主关键字{运动员编号,项目号}的部分函数依赖,没有达到2NF。(3)首先分解为2NF:R1(运动员编号,姓名,性别,班级,班主任),R2(项目号,项目名),R3(运动员编号,项目号,成绩)因为R1存在班主任对运动员编号的传递函数依赖,所以没有达到3NF,再分解为3NF:R1分解为R1(运动员编号,姓名,性别,班级)和R4(班级,班主任)6.设有关系模式:R(职工号,日期,日营业额,部门名,部门经理)如果规定:每个职工每天只有一个营业额,每个职工只在一个部门工作,每个部门只有一个经理。(1)根据上述规定,写出模式R主关键字。(2)分析R最高属于第几范式,说明理由。(3)若R不是3NF,将其分解为3NF。答:(1)关系模式R的主关键字是(职工号,日期)。(2)R最高属于第一范式。因为存在着部门名对主关键字(职工号,日期)的部分函数依赖,没有达到2NF。(3)首先分解为2NF:R1(职工号,部门名,部门经理),R2(职工号,日期,日营业额)因为R1存在部门经理对职工号的传递函数依赖,所以没有达到3NF,再分解为3NF:R1分解为R1(职工号,部门名)和R3(部门名,部门经理)7.将图1学生信息数据库系统的E-R图转换为关系模型。图1习题7图答:课程(课程号,课程名,学分)学生(学号,姓名,性别,年龄,班级名)班级(班级名,班主任)选修(学号,课程号,成绩)8.一个图书馆理系统中有如下信息:图书:书号、书名、数量、位置借书人:借书证号、姓名、单位出版社:出版社名、邮编、地址、电话、E-mail其中约定:任何人都可以借多种书,任何一种书可以被多个人借,借书和还书时,要登记相应的借书日期和还书日期;一个出版社可以出版多种书籍,同一本书仅为一个出版社所出版,出版社名具有唯一性。根据以上情况,完成如下设计:(1)设计系统的E-R图;将E-R图转换为关系模式;(3)指出转换后的每个关系模式的主码。答:(1)E-R图1NNM课程学生选修姓名性别年龄课程号课程名学分成绩学号班级属于班主任班级名(2)和(3)关系模式图书(书号,书名,数量,位置,出版社名)借书人(借书证号,姓名,单位)出版社(出版社名,邮编,地址,电话,E-mail)借阅(书号,借书证号,借书日期,还书日期)2.试用SQL的查询语句实现下列查询:(1)统计有学生选修的课程门数。答:SELECTCOUNT(DISTINCT课程号)FROM选课(2)求选修C004课程的学生的平均年龄。答:SELECTAVG(年龄)FROM学生,选课WHERE学生.学生号=选课.学生号and课程号=’C004’(3)求学分为3的每门课程的学生平均成绩。答:SELECT课程.课程号,AVG(成绩)FROM课程,选课WHERE课程.课程号=选课.课程号and学分=3GROUPBY课程.课程号(4)统计每门课程的学生选修人数,超过3人的课程才统计。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。答:SELECT课程号,COUNT(*)FROM选课GROUPBY课程号HAVINGCOUNT(*)3ORDERBYCOUNT(*)DESC,课程号(5)检索学号比王非同学大,而年龄比他小的学生姓名。答:SELECT姓名FROM学生WHERE学生号(SELECT学生号FROM学生WHERE姓名=’王非’)and年龄(SELECT年龄FROM学生WHERE姓名=’王非’)(6)检索姓名以王打头的所有学生的姓名和年龄。答:SELECT姓名,年龄FROM学生WHERE姓名LIKE‘王%’(7)在选课表中检索成绩为空值的学生学号和课程号。答:SELECT学生号,课程号FROM选课WHERE成绩ISNULL(8)求年龄大于女同学平均年龄的男学生姓名和年龄。答:SELECT姓名,年龄FROM学生1MNM借书人图书借阅书名数量位置借书证号姓名单位借书日期书号出版社出版E-mail电话出版社名邮编地址还书日期WHERE性别=’男’and年龄(SELECTAVG(年龄)FROM学生WHERE性别=’女’)(9)求年龄大于所有女同学年龄的男学生姓名和年龄。答:SELECT姓名,年龄FROM学生WHERE性别=’男’and年龄all(SELECT年龄FROM学生WHERE性别=’女’)(10)检索所有比王华年龄大的学生姓名、年龄和性别。答:SELECT姓名,年龄,性别FROM学生WHERE年龄(SELECT年龄FROM学生WHERE姓名=’王华’)(11)检索选修课程C002的学生中成绩最高的学生的学号。答:SELECT学生号FROM选课WHERE课程号=’C002’and成绩=(SELECTMAX(成绩)FROM选课WHERE课程号=’C002’)(12)检索学生姓名及其所选修课程的课程号和成绩。答:SELECT姓名,课程号,成绩FROM学生,选课WHERE学生.学生号=选课.学生号(13)检索选修4门以上课程的学生总成绩(不统计不及格的课程),并要求按总成绩的降序排列出来。答:SELECT学生号,SUM(成绩)FROM选课WHERE成绩=60GROUPBY学生号HAVINGCOUNT(*)=4ORDERBYSUM(成绩)DESC3.利用控制流语句,查询学号为0101001的学生的各科成绩,如果没有这个学生的成绩,就显示“此学生无成绩”。答:IFEXISTS(SELECT*FROM选课WHERE学号='0101001')SELECT课程号,成绩FROM选课WHERE学号='0101001'ELSEPRINT'此学生无成绩'