分页:
上一页 1 2 3 4 5 [6] 7 8 9 10 下一页
(1).数据存在大量冗余。例如:(至少给出1项)
S#,SNAME,SD要重复“每个学生选修的课程数”
C#,CNAME,TEACHER要重复“学生选修这门课的人数”
(2).更新异常。由于数据存在大量冗余,容易引起更新异常。例如,当更新某门课程的教师时,由于数据存在大量冗余,可能造成与这门课程有关的元组中,一部分元组的TEACHER的值被更新,而另一部分元组的TEACHER的值未被更新。
(3).插入异常。显然,这个关系的主键是S#和C#。由于主键属性值不能为空值,当登记学生信息时,由于该学生尚未选课,C#未确定,该学生的其他信息也无法登入,这不是我们的意愿。
(4).删除异常。如果某些课程因故删除了,则只选修这些课程的学生信息也被删除了,这往往也不是我们的本意,我们并不希望删除这些学生的信息。
对方案二:如果根据属性之间存在的联系或相关性,建立了三个关系,则方案一中存在的异常现象被消除了。(得5分)
但对诸如“查找张三的数据库技术课程的成绩”之类的问题时,这需要连接这三个关系才能完成,这个查询代价高而且会影响效率。(得2.5分)
相比之下,第一个方案则可直接投影、选择就可以完成这类查询,不需要连接操作,显然代价低而且效率高。(得2.5分)
比较这两种设计方案:本人认为第二种设计方案虽然对某些查询问题连接操作较多,但它仍比第一种方案“好”,因为它不存在上述异常问题。(得4分)
6.(2003年)在"学生-选课-课程"数据库中有三个关系:S(S#,SNAME,SEX,AGE,SD),SC(S#,C#,GRADE),C(C#,CNAME,TEACHER)。它们的主码分别是S#,(S#,C#),C#,并且其他属性都允许为空值(NULL)。用下面的SQL语句创建了两个视图:
createviewCS_SasselectS#,SNAME,AGEfromS
whereSD=’计算机系’;
createviewS_G(S#,GAVG)asselectS#,avg(GRADE)
fromSCgroupbyS#;
若用下面的SQL语句对上述视图进行修改,它们能被成功执行吗?为什么?
(1)updateCS_SsetSNAME=’WANGPING’whereS#=’200301001’;
(这里假定在表S中存在学生号S#=’200301001’的行。)
(2)insertintoCS_Svalues(’200302189’,’YANGXIN’,21);
(这里假定在表S中不存在学生号S#=’200302189’的行。)
分页:
上一页 1 2 3 4 5 [6] 7 8 9 10 下一页