问答题

[说明]
一个描述学校的部分关系模式的结果描述如下:
1.一个系有若干学生,但一个学生只能在一个系;
2.一个系只有一名主任;
3.一个学生可以选修多门课程,每门课程有若干学生选修;
4.每个学生所学的每门课程都有一个成绩;
5.“学生”和“课程表”及“选课表”的关系示例分别如表1、表2、表3所示。
Student(学生表)的字段按顺序为学号(Sno)、姓名(Sname)、性别(Ssex)、年龄(Sage)、所属院系(Sdept)、系主任(Smaster);
Course(课程表)的字段按顺序为课程编号(Cno)、课程名(Cname)、先行课程(Cpno)、课程学分 (Ccredit);
SC(选课表)的字段按顺序为学号(Sno)、课程号(Cno)、成绩(Grade)。
各表的记录如下:
表1 Student
Sno Sname Ssex Sage Sdept Smaster
95001 李勇 20 CS 王平
95002 刘晨 19 IS 周言
95003 王明 18 MA 展评
95004 张立 19 IS 周言

                                       表2 Course
Cno Cname Cpno Ceredit
1  数据库 5 4
2  数学 2
3  信息系统 1 4
4  操作系统 6 3
5  数据结构 7 4
6  数据处理 2
7  PASCAL 6 4
                                       表3 SC
 Sno  Cno  Grade
 95001  1  92
 95001  2  85
 95001  3  88
 95002  2  90
 95003  3  80

[问题1]
试分析该关系模式中的函数依赖,并指出关系模式的候地选码。

【参考答案】

在该关系模式中,存在以下函数依赖:
学号→姓名 学号→所在系 所在系→系主任
(学号,课程名)→......

(↓↓↓ 点击下方‘点击查看答案’看完整答案、解析 ↓↓↓)
热门 试题

问答题
阅读下列程序说明和C程序,将应填入 (n) 处的字句写在答卷纸的对应栏内。 【程序说明】 该程序定义了两个子函数strsort和strmerge。它们分别实现了将一个字符串按字母顺序排序和将两个字符串合并排序,并删去相同字符。在主函数里,先输入两个字符串s1和s2,然后调用strsort函数对它们分别排序,然后调用strmerge函数将s1和s2合并,将合并后的字符串赋给字符串s3,最后输出字符串s3。 【程序】 #include <stdio.h> void strmerge(char *a,char *b,char *c) 将字符串a,b合并到字符串c char t,*w; W=c; while( (1) ) 找到字符串a,b当前字符中较小的字符 if(*a<*b) t=-*a, (2) else if(*a>*b) t=*b; (3) else 字符串a,b 当前字符相等 t=-*a; a-H-; b-H-; if( (4) ) 开始,可直接赋值 *w=t; else if(t!=*w) 如果a,b中较小的当前字符与c中当前字符不相等,才赋值 (5) if(*a!=’ O’) 如果字符串a还没有结束,则将a的剩余部分赋给c while(*a!=’ 0’) if(*a!=*w) *(++w)=*a; a++; else (6) if(*b!= ,’ 0’) 如果字符串b 还没有结束,则将 b 的剩余部分赋给 c while(*b !=’ 0’) if(*b!=*w) *(++w)=*b; b++; else b++; (7) void strsort(char *s) 将字符串 s 中的字符排序 int i,j,n; char t,*w; w=s; for(n=O;*w!=’ O’;n++) 得到字符串长度 n w++; for(i=O;i<n-1;i++) 对字符串 s 进行排序,按字母先后顺序 forO=i+ 1 ;j<n;j++) if( (8) t=s[i]; s[i]=s[j]; (9) void mainO char s1 [100],s2[100],s3[100]; prinff( nlPlease input the first string: ); scanfC( % s ,s1 ); prinff( nPlease input the second string: ); scanf( %s ,s2); strsort(s1); 将字符串s1 排序 strson(s2); 将字符串 s2 排序 prinff( %s n’,s1); printfC % sW’,s2); s3[0]=’ O’; 字符串 s3 的第一个字符先置’ 0’结束标志 (10) ; 将s1和s2合并,按照字母顺序排列, prinff( %s ,s3);