为学校中学生选课管理这个现实问题进行数据库模式设计。根据调查分析,确定它的属性集合为:
U={S,C,SNAME,CNAME,TEACHER,GRADE,SD}
下面给出两种确定的模式设计方案:
方案一:只有一个关系模式:
R(S,C,SNAME,CNAME,TEACHER,GRADE,S@D)@方案二:如果根据属性之间存在的联系或相关性,建立如下三个关系:
S(S,SNAME,S@D)@,C(C,CNAME,TEACHER),SC(S,C,GRADE)
1.试分析这两种模式设计方案各自的优缺点。
2.通常情况下你认为哪种方案更“好”些?请说明理由
答案说明:本题目答案来自网络整理或转载,最终答案请以官网为准。
答 案:1.数据存在大量冗余。例如:(至少给出一项)S#SNAMESD要重复“每个学生选修的课程数”C#CNAMETEACHER要重复“学生选修这门课的人数”2、更新异常。由于数据存在大量冗余容易引起更新异常。例如当更新某门课程的教师时由于数据存在大量冗余可能造成与这门课程有关的元组中一部分元组的TEACHER值被更新而另一部分元组的TEACHER值未被更新。3、插入异常。显然这个关系的主键是S#、C#。由于主键属性值不能为空当登记学生信息时由于该学生未选课C#未确定该学生的其他信息无法登入这不是我们的意愿。4、删除异常。如果这些课程因故删除了则只选修这些课程的学生信息也被删除了这往往也不是我们的本意我们并不希望删除这些学生的信息。对方案二:如果属性之间存在的联系或相关性建立了三个关系则方案一中存在的异常现象被消除可。但对诸如“查找张三的数据库技术课程的成绩”之类的问题时就需要连接三个关系才能完成这个查询代价高而且会影响效率。相比之下方案一则可直接投影、选择就可以完成这类查询不需要连接操作显然代价低而且效率高。2.比较这两种设计方案:本人认为第二钟设计方案虽然对某些查询问题连接操作较多但它仍比方案一“好”因为它不存在上述异常问题。
1.数据存在大量冗余。例如:(至少给出一项)S#,SNAME,SD要重复“每个学生选修的课程数”C#,CNAME,TEACHER要重复“学生选修这门课的人数”2、更新异常。由于数据存在大量冗余,容易引起更新异常。例如,当更新某门课程的教师时,由于数据存在大量冗余,可能造成与这门课程有关的元组中,一部分元组的TEACHER值被更新,而另一部分元组的TEACHER值未被更新。3、插入异常。显然,这个关系的主键是S#、C#。由于主键属性值不能为空,当登记学生信息时,由于该学生未选课,C#未确定,该学生的其他信息无法登入,这不是我们的意愿。4、删除异常。如果这些课程因故删除了,则只选修这些课程的学生信息也被删除了,这往往也不是我们的本意,我们并不希望删除这些学生的信息。对方案二:如果属性之间存在的联系或相关性,建立了三个关系,则方案一中存在的异常现象被消除可。但对诸如“查找张三的数据库技术课程的成绩”之类的问题时,就需要连接三个关系才能完成,这个查询代价高而且会影响效率。相比之下,方案一则可直接投影、选择就可以完成这类查询,不需要连接操作,显然代价低而且效率高。2.比较这两种设计方案:本人认为第二钟设计方案虽然对某些查询问题连接操作较多,但它仍比方案一“好”,因为它不存在上述异常问题。