设有关系模式: 选修(姓名,专业,课程,任课教师,成绩)
假设:每个学生在一个专业学习;每门课程有一个任课教师;每个学生选修的每门课程只有一个成绩;姓名、课程无重名。
- 请写出选修关系中存在的基本函数依赖集和关系候选码
- 分析关系模式属于第几范式?为什么?
- 如果经常对该模式的关系进行增、删、改操作,会存在什么问题
- 请将选修关系模式分解为第3NF模式集
设有关系模式: 选修(姓名,专业,课程,任课教师,成绩)
假设:每个学生在一个专业学习;每门课程有一个任课教师;每个学生选修的每门课程只有一个成绩;姓名、课程无重名。
关注引自免费微信小程序:皆我百晓生
当然,我们可以逐步解决这些问题。
1. 基本函数依赖集和关系候选码
在这个关系模式中,我们可以通过业务规则推断出一些基本函数依赖(FD):
姓名 -> 专业 (因为每个学生在专业上是唯一的)姓名, 课程 -> 成绩 (因为每个学生对每门课程的成绩是唯一的)课程 -> 任课教师 (因为每门课程只有一个任课教师)因此,基本函数依赖集可以表示为:
F = { (姓名, 专业), (姓名, 课程) -> 成绩, (课程) -> 任课教师 }
候选键(Candidate Key)是指一个能唯一确定记录的属性集合。在这个关系中,可能的候选键有:
(姓名, 课程): 因为每个学生在每门课程上的组合是唯一的。(专业, 课程): 如果我们假设每个专业的学生不会重复选择同一门课程,那么这个组合也是唯一的。2. 关系模式的范式分析
根据给定的条件,我们可以判断此关系模式是否满足各范式:
(姓名, 课程) 和 (专业, 课程)。对于这两个候选键,所有非主属性都完全依赖,所以满足2NF。所以,这个关系模式属于 BCNF 范式。
3. 对增、删、改操作的问题
尽管这个关系模式已经达到了较高的范式,但在实际应用中可能会遇到一些问题:
4. 分解为第三范式模式集
为了减少上述问题,我们可以考虑将关系模式分解为更小的、满足3NF的子模式。一种可能的分解方式是:
这样,学生和课程表各自存储它们的信息,而选修表只存储选修关系。这样做的好处是,当修改学生或课程信息时,不会影响到选修表中的成绩,而且可以独立地插入、删除和更新各个表中的记录。
这是对原始关系模式的分解,它确保了每个子模式都满足3NF。注意,这样的分解并不是唯一的,可以根据具体需求进行调整。