根据上述的语义规定,可以看出: CNO)属性的组 合能唯一标识一个元组,所以(SNO 是该关系模式 的主码。 对图5.3所示的进行数据库的操作时,会出现以下几方 面的问题: 1.数据冗余。 每个系名和系主任的名字存储的次数等于该系的学生人数乘以每个学生 选修的课程门数,同时学生的姓名、年龄也都要重复存储多次,数据的 冗余度很天,浪费了存储空间。 2.插入异常 如果某个新系没有招生,尚无学生时,则系名和系主任的信息无法插入 到数据库中。 因为在这个关系模式中,(SN,CNO)是主码。根据关系的实体完整性 约束主码的值不能为空,而这时没有学生,SN和CN均无值,因 此不能进行插入操作。 另外,当某个学生尚未选课,即cNQ未知,实体完整性约束还规定, 主码的值不能部分为空,同样不能进行插入操作。 UA++
11 ➢ 根据上述的语义规定,可以看出:(SNO,CNO)属性的组 合能唯一标识一个元组,所以(SNO,CNO)是该关系模式 的主码。 ➢ 对图5.3所示的进行数据库的操作时,会出现以下几方 面的问题: 1. 数据冗余。 每个系名和系主任的名字存储的次数等于该系的学生人数乘以每个学生 选修的课程门数,同时学生的姓名、年龄也都要重复存储多次,数据的 冗余度很大,浪费了存储空间。 2. 插入异常。 如果某个新系没有招生,尚无学生时,则系名和系主任的信息无法插入 到数据库中。 • 因为在这个关系模式中,(SNO,CNO)是主码。根据关系的实体完整性 约束,主码的值不能为空,而这时没有学生,SNO和CNO均无值,因 此不能进行插入操作。 • 另外,当某个学生尚未选课,即CNO未知,实体完整性约束还规定, 主码的值不能部分为空,同样不能进行插入操作
3.删除异常。 某系学生全部毕业且还没有招生时,删除全部学生的记录 则系名、系主任也随之删除,而这个系依然存在,在数据 库中却无法找到该系的信息。 另外,如果学生s4不再选修C1课程,本应该只删去C1,但 C1是主码的一部分,为保证实体完整性,必须将整个元组 起删掉,这样,有关该学生的其它信息也随之丢失。见 图5.3所示。 4.更新异常。 如果学生改名,则该学生的所有记录都要逐一修改SN; 又如某系更换系主任,则属于该系的学生记录都要修改MN 的内容,稍有不慎,就有可能漏改某些记录,这就会造成 数据的不一致性,破坏了数据的完整性。 UA++
12 3. 删除异常。 • 某系学生全部毕业且还没有招生时,删除全部学生的记录 则系名、系主任也随之删除,而这个系依然存在,在数据 库中却无法找到该系的信息。 • 另外,如果学生s4不再选修C1课程,本应该只删去C1,但 C1是主码的一部分,为保证实体完整性,必须将整个元组 一起删掉,这样,有关该学生的其它信息也随之丢失。见 图5.3所示。 4. 更新异常。 • 如果学生改名,则该学生的所有记录都要逐一修改SN; • 又如某系更换系主任,则属于该系的学生记录都要修改MN 的内容,稍有不慎,就有可能漏改某些记录,这就会造成 数据的不一致性,破坏了数据的完整性
产生上述间题的原因是因为关系中“包罗万象”, 容太杂。所以认为它不是一个好的数据库。那么,怎 样才能得到一个好的关系模式呢? 我们把关系模式SCD分解为下面三个结构简单的关系模 式,如图5.4所示: 学生关系S(SNO,SN,AGE,DEPT) 选课关系SC(SNO,CNO, SCORE) 系关系D(DEPT,MN) UA++
13 ➢ 产生上述问题的原因是因为关系中“包罗万象” ,内 容太杂。所以认为它不是一个好的数据库。那么,怎 样才能得到一个好的关系模式呢? ➢ 我们把关系模式SCD分解为下面三个结构简单的关系模 式,如图5.4所示: • 学生关系S(SNO,SN,AGE,DEPT) • 选课关系SC(SNO,CNO,SCORE) • 系关系D(DEPT,MN)
SC SNO SN AGE DEPT SNO CNO SCORE S1赵亦17计算机 S1C1 90 S2钱尔18信息 C2 85 s3孙珊20信息 S2C5 57 S4李思21自动化 S2 C6 80 S2C7 S2C5 70 D S3C1 0 DEPT MN 「计算机刘伟 S3 C2 70 S3C4 85 信息王平 自动化刘伟 S4 C1 93 图5.4分解后的关系模式 UA++ 返回原处
14 S SC 图5.4 分解后的关系模式 SNO SN AGE DEPT S1 赵亦 17 计算机 S2 钱尔 18 信息 S3 孙珊 20 信息 S4 李思 21 自动化 DEPT MN 计算机 刘伟 信息 王平 自动化 刘伟 D SNO CNO SCORE S1 C1 90 S1 C2 85 S2 C5 57 S2 C6 80 S2 C7 S2 C5 70 S3 C1 0 S3 C2 70 S3 C4 85 S4 C1 93 返回原处
在以上三个关系模式中,实现了信息的某种程度的分 离 S中存储学生基本信息,与所选课程及系主任无关;当某个学 生尚未选课,只要在关系S中添加一条学生记录,避免了插入 异常。 D中存储系的有关信息,与学生无关;当一个系的学生全部毕 业时,只需在S中删除该系的全部学生记录,而关系D中有关 该系的信息仍然保留,从而不会引起删除异常。 SC中存储学生选课的信息,而与所学生及系的有关信息无关。 由于数据冗余度的降低,数据没有重复存储,也不会引起更 新异常。 UA++
15 ➢ 在以上三个关系模式中,实现了信息的某种程度的分 离, • S中存储学生基本信息,与所选课程及系主任无关;当某个学 生尚未选课,只要在关系S中添加一条学生记录,避免了插入 异常。 • D中存储系的有关信息,与学生无关;当一个系的学生全部毕 业时,只需在S中删除该系的全部学生记录,而关系D中有关 该系的信息仍然保留,从而不会引起删除异常。 • SC中存储学生选课的信息,而与所学生及系的有关信息无关。 • 由于数据冗余度的降低,数据没有重复存储,也不会引起更 新异常