1. 设有一教学管理系统,其属性为:学号(S),课程号(C),成绩(G),任课教师(TN),教师所在系(D)。语义如下: (1) 学号和课程号分别与其代表的学生和课程一一对应; (2) 一个学生所修的每门课程都有一个成绩; (3) 每门课程只有一位任课教师,一位教师可以教多门课程; (4) 教师中没有重名,每个教师只属于一个系; 要求如下: (1) 试根据上述语义确定函数依赖集; (2) 如果用上面所有属性组成一个泛关系模式,那么该关系模式为何模式?并说明是否存在4种异常现象; (3) 将写出将该泛关系模式分解为3NF关系模式的过程。
时间: 2024-04-23 11:24:08 浏览: 255
1. 函数依赖集为:
- S -> TN, D
- C -> TN
- S, C -> G
2. 该关系模式为: R(S, C, G, TN, D)
存在4种异常现象:
- 插入异常:如果只想插入一门课程,需要重复输入某个学生的学号和教师所在系;
- 删除异常:如果删除了一门课程,也就意味着删除了某个教师和他所在的系;
- 修改异常:如果修改了一门课程的教师所在系,那么会同时修改该系下所有教师所教授的所有课程的系;
- 查询异常:如果查询某个系的所有教师和他们所教授的课程,需要同时查询学生的学号和成绩,会导致信息冗余和重复。
3. 分解过程如下:
- R1(S, TN, D)
- R2(C, TN)
- R3(S, C, G)
其中,R1和R2都满足BCNF,R3满足3NF。
相关问题
sql创建学生成绩表 其中属性有:课程号 学号 选课时间 平时成绩 平时成绩比重 考试成绩
在SQL中,你可以创建一个名为`StudentGrades`的表来存储学生的成绩信息。下面是一个基本的CREATE TABLE语句示例:
```sql
CREATE TABLE StudentGrades (
CourseID INT NOT NULL,
StudentID INT NOT NULL,
EnrollmentDate DATE,
RegularScore DECIMAL(5,2),
RegularScoreWeight FLOAT,
ExamScore DECIMAL(5,2) NOT NULL,
PRIMARY KEY (CourseID, StudentID),
FOREIGN KEY (CourseID) REFERENCES Courses(CourseID),
FOREIGN KEY (StudentID) REFERENCES Students(StudentID)
);
```
在这个例子中:
- `CourseID` 表示课程号,通常为主键的一部分,可以参考另一个名为`Courses`的表;
- `StudentID` 表示学号,也是一个主键,并引用了`Students`表;
- `EnrollmentDate` 学生选择该课程的时间;
- `RegularScore` 平时成绩,保留两位小数;
- `RegularScoreWeight` 平时成绩的比重,通常作为浮点数;
- `ExamScore` 考试成绩,同样保留两位小数,不能为空。
创建一个选修了数据库的学生成绩视图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 = '数据库'来筛选出选修了数据库课程的学生信息。
阅读全文