设有一教学管理数据库,其属性为:学号(S#),课程号(C#),成绩(G),任课老师(TN), 教师所在的系(D)。这些数据有下列语义: • 学号和课程号分别与其代表的学生和课程一一对应; • 一个学生所选的每⻔课程都有一个成绩; • 每⻔课程只有一位任课教师,单每位教师可以教多⻔课程; • 教师中没有重名,每个教师只属于一个系。 (1) 试根据上述语义确定函数依赖集。 (2) 如果用上面所有属性组成一个关系模式,那么该关系模式为何模式?并举例说 明进行增、删操作时的异常现象。 (3) 分解为具有保持函数依赖和无损连接的 3NF。
时间: 2024-03-01 12:49:21 浏览: 59
(1) 根据语义,可以确定以下函数依赖集:
- {S#, C#} → G
- {C#} → TN
- {TN} → D
解释:
- 学号和课程号决定了成绩,因此{S#, C#} → G。
- 课程号决定了任课老师,因此{C#} → TN。
- 任课老师决定了所在的系,因此{TN} → D。
(2) 用所有属性组成的关系模式为 R(S#, C#, G, TN, D)。
举例说明增、删操作时的异常现象:
- 插入一条记录时,如果插入的学生或课程在学生表或课程表中不存在,就会违反了{S#, C#} → G的函数依赖。
- 删除某个学生时,如果该学生选修了某门课程,那么会导致课程表中的该门课程没有对应的教师,违反了{C#} → TN的函数依赖。
(3) 3NF 分解:
首先,我们将原始关系模式 R 转化为关系模式 R1(S#, C#, G) 和关系模式 R2(C#, TN),然后根据函数依赖集将其分解为 3NF。
R1(S#, C#, G) 中只有一组函数依赖 {S#, C#} → G,已经是 3NF 的。R2(C#, TN) 中只有一组函数依赖 {C#} → TN,也已经是 3NF 的。
因此,该关系模式已经是具有保持函数依赖和无损连接的 3NF。
相关问题
创建一个选修了数据库的学生成绩视图DB_G,其属性包括学号,课程号,成绩
好的,您可以按照以下SQL语句创建DB_G视图:
```SQL
CREATE VIEW DB_G AS
SELECT S.SID, C.CID, SC.Grade
FROM Student S, Course C, SC
WHERE S.SID = SC.SID AND C.CID = SC.CID AND C.CName = '数据库';
```
该视图将会显示选修了数据库课程的学生成绩,包括学号、课程号和成绩。请注意,该视图基于学生表(Student)、课程表(Course)和选课表(SC)的关联查询而创建,在查询中使用了条件C.CName = '数据库'来筛选出选修了数据库课程的学生信息。
学习成绩视图GRADE_T,其中属性包括:学号(S#)、姓名(SNAME)、课程号(C#)、课程名(CNAME)、学时(CLASSH)、成绩(GRADE)、任课教员编号(T#)、任课教员名称(TNAME)。用sql语句回答
好的,以下是一些常见的问题及其对应的 SQL 语句:
1. 查询某个学生的所有成绩
```
SELECT * FROM GRADE_T WHERE S# = '学生学号';
```
2. 查询某门课程的所有学生成绩
```
SELECT * FROM GRADE_T WHERE C# = '课程编号';
```
3. 查询某个教师的所有教授课程及其学生的成绩
```
SELECT * FROM GRADE_T WHERE T# = '教师编号';
```
4. 查询某个学生在某个教师的所有课程中的成绩
```
SELECT * FROM GRADE_T WHERE S# = '学生学号' AND T# = '教师编号';
```
5. 查询某个课程的平均成绩
```
SELECT AVG(GRADE) FROM GRADE_T WHERE C# = '课程编号';
```
6. 查询某个学生的平均成绩
```
SELECT AVG(GRADE) FROM GRADE_T WHERE S# = '学生学号';
```
7. 查询某个教师所教授的所有课程的平均成绩
```
SELECT C#, CNAME, AVG(GRADE) FROM GRADE_T WHERE T# = '教师编号' GROUP BY C#, CNAME;
```
以上是一些常见的问题和对应的 SQL 语句,您可以根据实际情况进行修改和调整。