数据库系统原理部分
一、简答题(共 2 小题,每小题 5 分,共 10 分)
1、请简述两段锁协议的内容。
答:数据库的两段锁协议是指所有事务必须分两个阶段对数据项进行加锁和解锁。1)扩展阶段:在对任何
数据项的读、写之前,要申请并获得该数据项的封锁。2)收缩阶段:每个事务中,所有的封锁请求必须先
于解锁请求。
2、设有如下图所示的关系 R 和 S,计算:R1 = R S
S
C
2
3
B
b
c
R
A B
1
a
b
1
b
2
c
2
3
c
C
2
2
2
3
3
答:
A
1
2
2
3
B
b
b
c
c
C
2
2
3
3
二、SQL(共 4 小题,每小题 5 分,共 20 分)
设某公司的信息管理系统中有三个基本表:
职工表 E(E#,ENAME,AGE,SEX, ECITY),其属性是职工编号、姓名、年龄、
性别和籍贯。
部门表 C(C#,CNAM E,TELE),其属性是部门编号、部门名称和电话号码
工作表 W(E#,C#,SALARY),其属性是职工编号、部门编号和工资。
备注:
表示主码,
表示外码。
用 SQL 语言完成如下查询:(20 分)
(1) 用 SQL 语言建立 W 表,要求满足以下完整性约束条件的定义:
① 定义关系的主码,② 定义参照完整性,③ SALARY1000。
(2) 查询年龄大于 25 岁的女职工的职工编号。
(3) 为每个部门中超过 50 岁的女职工加薪 1000 元。
(4) 请为女职工信息建立一个视图 E_W,属性包括职工编号 E#, 职工姓名 ENAME,
所在部门编号 C#,所在部门名称 CNAME,工资 SALARY。
答:(1)CREATE TABLE W
(E# CHAR(4) NOT NULL,
C# CHAR(4) NOT NULL,
SALARY SMALLINT,
CONSTRAINT C1 CHECK (SALARY>=1000),
PRIMARY KEY(E#,C#),
FOREIGN KEY(E#) REFERENCES E(E#),
FOREIGN KEY(C#) REFERENCES C(C#),
)
(2) SELECT E#,ENAME
FROM E
到达了第二范式 因为(学号,课程号)→成绩
WHERE AGE>25 AND SEX = ‘F’
(3) UPDATE WORKS
SET SALARY = SALARY+1000
WHERE E# IN (SELECT E# FROM E WHERE AGE>50 AND SEX = ‘F’)
(4) CREATE VIEW E_W
AS SELECE E.E#,E.ENAME,C.C#,
CNAME,SALARY
FROM E,W,C
WHERE E.E#=W.E#
AND W.C#=C.C# AND SEX = ‘F’
三、分析题(共 5 个问题,每个问题 2 分,共 10 分)
设有关系模式 R(学号,课程号,学习期限,成绩,奖学金),该模式用于统计学生选
课、成绩和奖学金情况。
如果规定:每门课都有一定的学习期限,每个学生选修每门课程都有一个成绩,根据成
绩评定奖学金。
请回答下列问题:
(1) 根据上述规定,写出模式 R 的基本函数依赖集 F。(2 分)
答:模式 R 的基本函数依赖集 F
(课程号)→学习期限
(学号,课程号)→成绩
(成绩)→奖学金
(2) 请计算(学号)关于 F 的闭包。(2 分)
答:令 X(0)=学号,因为(学号)→成绩;
则 X(1)=学号∪成绩=(学号,成绩), 因为成绩→奖学金,
则 X(2)=(学号,成绩)∪奖学金=(学号,成绩,奖学金),因为 A→D,E→C,
即(学号)+=(学号,成绩,奖学金)
(3) 确定关系模式 R 的候选码。(2 分)
答:R 的候选码(学号,课程号)
(5) 关系模式 R 最高已经达到第几范式?为什么?(4 分)
答:
(成绩)→奖学金 由此可得 存在传递函数依赖 不能达到第三范式要求
四、设计题(共 2 小题,每小题 5 分,共 10 分)
设某集团数据库中有 3 个实体集,分别为部门,属性有部门号,部门名,办公地点;职
工,属性有职工号,姓名,性别,年龄;产品,属性有产品号,产品名,产品类型,单价。
每个部门可以聘用多名职工,每名职工只受聘于一个部门,每个部门聘用每名职工时保存聘
用期限和聘用日期。每个部门生产多种产品,每种产品可以在不同的部门生产,每个部门生
产每种产品都有一个生产量。每种产品由一名职工负责,每个职工最多负责一种产品。
请根据上面的描述完成如下题目:
(1) 根据需求分析,用 E-R 图画出该公司的部门、职工、产品的概念模型,要求给出实体、
联系的属性。(5 分)
答:
部门号
部门名
办公地点
m
部门
1
聘用期限
聘用
聘用日期
1
1
产品
负责
n
职工
年龄
职工号
性别
姓名
生产量
产品号
产品名
单价
生产
n
产品类型
(2) 将第(1)步得到的 E-R 图转换成关系模型,并注明明主码和外码。(5 分)
答:
部门(部门号,部门名,办公地点)
产品(产品号,产品名,产品类型,单价)
职工(职工号,姓名,性别,年龄,聘用日期,聘用期限)
生产(部门号,产品号,生产量)
程序设计基础部分:
一、选择题(共 15 分,每题 3 分)。
1(B)
2(D)
3(C)
4(C)
5(A)
二、编写 C 语言程序完成以下功能。
1、编程实现输入三角形的边长 a,b,c,求三角形的面积 area。(10 分)
答:#include
#include
int main()
{
float a,b,c,s,area;
printf("依次输入 a,b,c(空格识别一个数):");
scanf("%f%f%f,",&a,&b,&c);
s=(float)0.5*(a+b+c);
area = (float)sqrt(s*(s-a)*(s-b)*(s-c));
printf("面积为:%f",area);
}
2、编程打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等
于该数本身。例如:153 是一个“水仙花数”,因为 153=13+53+33。 (12 分)
答:#include "stdio.h"
int main()
{
int i,j,k,num;
printf("水仙花数为:");
for(num=100;num<1000;num++)
{
i=num/100;//取百位数字
j=num/10%10;//取十位数字
k=num%10;//取个位数字
if(num==i*i*i+j*j*j+k*k*k)
{
}
}
printf("%-5d",num);
printf("\n");
return 0;
}
3、判断 s1 字符串中是否包含 s2 字符串。如:"china123"包含"na12",但不包含"abc"。(13
分)
答:#include
int strstr(char *s1,char*s2)
{
char *p1=s1,*p2=s2;
while(*p1)
{
if(*p1==*p2)
{
while(*p1&&*p2)
{
if(*p1==*p2)
{//相等则继续比较
p1++;
p2++;
}
else
{//不相等,回退后继续比较
p1=p1-(p2-s2)+1;
p2=s2;
break;
}
}
if(!*p2)
{//比较完子串,完全相等
return 1;
}
}
p1++;
}
return 0;//不包含
}
int main()
{
char s1[100],s2[100];
printf("Input 2 strings:\n");
scanf("%s",s1);
scanf("%s",s2);
if(strstr(s1,s2))
{
printf("s1 include s2!\n");
}
else
{
printf("s1 don't include s2!\n");
}
}