数据库——关系数据库规范化习题

对以下的关系模式, 分别写出:
(1)码 ,主属性,非主属性?
(2)函数依赖?
(3)属于第几范式?为什么?
(4)有什么问题?
(5)如何分解?分解后能否达到几范式? 原问题是否解决?
ps(函数依赖的方法:

1.先找出码,再写出码函数依赖:码-〉其他属性

2.再写出其他非码的函数依赖

)

1 SCG(Sno, Sname, Sage, Cno, Grade) 
(1)码:(SNO,CNO) 主属性: SNO,CNO
   非主属性:SNAME,SAGE,GRADE
(2)函数依赖:(SNO,CNO)-〉SNAME,(SNO,CNO)-〉SAGE,(SNO,CNO)-〉GRADE
                    SNO-〉SNAME,SNO-〉SAGE
(3)属于第几范式,为什么?
存在非主属性sname部分函数依赖于码,是1范式
(4)有什么问题?
 问题⒈ 数据冗余大 每一个学生的姓名年龄重复出现 浪费大量的存储空间
 问题⒉ 修改困难 例:某学生要修改姓名或年龄,系统必须修改多次
 问题3.插入异常 假设某学生(新生)还未选课,因课号是主属性,按实体完整性约束,该学生的信息无法插入 ----该插入的不能插入
 问题4.删除异常 假定某个学生本来只选修了一门课。现在因身体不适,他连这门程也不选修了,要删除该选课。此操作将导致该学生信息也被删除 -----不该删的删了
 
(5)如何分解?分解后能否达到几范式? 原问题是否解决?
S(SNO,SNAME,SAGE)
SC(SNO,CNO,GRADE)
达到2NF,原问题解决
学生Sname,Sage不重复存储
Sname,Sage的修改只改一次
学生未选课,也能插入到S表
 一个学生选课全删除,学生信息还存在
 
2 SP(SNO, SNAME,SCITY, PNO, PNAME, QTY)
    供应商号,供应商名,供应商城市,零件号,零件名,数量

(1)码:(SNO,PNO) 主属性:SNO,PNO 非主属性:SNAME,SCITY,PNAME,QTY
(2)函数依赖:(SNO,PNO)->SNAME,(SNO,PNO)->SCITY,(SNO,PNO)->PNAME,(SNO,PNO)->QTY,

SNO->SNAME,SNO->SCITY,PNO->PNAME
(3)属于第几范式,为什么?存在非主属性SNAME部分函数依赖于码,是1范式
(4)有什么问题?数据冗余,修改困难,插入异常,删除异常
(5)如何分解?分解后能否达到几范式? 原问题是否解决?
S(SNO,SNAME,SCITY)
P(PNO,PNAME)
SP(SNO,PNO,QTY)
达到2NF,原问题解决

1 SL(SNO,SNAME,SDEPT,SLOC)
 学号, 姓名, 系名, 系住处 ,一个系的学生住处相同

 (1)码: SNO 主属性:SNO 非主属性:SNAME,SDEPT,SLOC
 (2)函数依赖:
 Sno→Sdept Sno→Sname Sno→Sloc Sdept→Sloc
 (3)属于第几范式,为什么?存在非主属性SLOC传递函数依赖于码,是2范式
 (4)有什么问题?
 数据冗余度大:每个系的学生都住在同一个地方,关于系的住处的信息却要重复存储与该系学生人数相同的次数。
 修改困难:当学校调整学生住处时,比如信息系的学生全部迁到另一个地方住,由于每个系住处的信息重复存储,修改时必须同时更新该系所有学生的Sloc
 插入异常:如果某个系刚成立,目前暂时没有在校学生,无法把系住处的信息存入数据库。
 删除异常:如果某个系的学生全部毕业了,在删除该系学生信息的同时,把这个系住处的信息也删除了。
 (5)如何分解?分解后能否达到几范式? 原问题是否解决?
 SD(Sno, Sname, Sdept)
 DL(Sdept, Sloc)
  原问题解决
 存储系住处信息不再冗余
 修改系住处容易
 新系成立可以插入
 删除一个系的所有学生,系的信息仍然存在

2职工(职工编号,姓名,基本工资,职务,职务工资 )
   职工编号不重复,每种职务有固定的职务工资

 (1)码: 职工编号 主属性:职工编号  非主属性: 姓名,基本工资,职务,职务工资
 (2)函数依赖:
 职工编号->姓名, 职工编号->基本工资, 职工编号->职务, 职工编号->职务工资
 职务->职务工资
 (3)属于第几范式,为什么?

存在非主属<职务工资>性传递函数依赖于码,是2范式
 (4)有什么问题?
 职务工资数据冗余,每个职务的工资会多次出现。
 修改职务工资困难,想要修改相应职务的工资需要修改多次。
 插入异常,如果有一个新职务,但没有职工获得这个职务,该职务便无法插入。
 删除异常,删除一个职务的所有职工会删除这个职务的信息。
 (5)如何分解?分解后能否达到几范式? 原问题是否解决?
 职工(职工编号,姓名,基本工资,职务 )
 职务(职务,职务工资 )
 原问题解决


3销售发票(发票号,商品号,商品名,数量,销售单价,日期)
   发票号不重复,每个商品号有一个商品名[10分]

 (1)码: 发票号 主属性: 发票号 非主属性:商品号,商品名,数量,销售单价,日期  
 (2)函数依赖:
 发票号->商品号,发票号->商品名,发票号->数量,发票号->销售单价,发票号->日期 
 商品号->商品名
 (3)属于第几范式,为什么?

存在非主属<商品名>性传递函数依赖于码,是2范式  
 (4)有什么问题?  
 商品名数据冗余,每个商品的商品名会多次出现。

修改商品名困难,要修改商品名要修改多次。

如有新商品,但没有卖出去开不出发票,商品名便无法插入。

删除一个商品名的所有发票会删除这个商品的信息
 (5)如何分解?分解后能否达到几范式? 原问题是否解决?  
 销售发票(发票号,商品号,数量,销售单价,日期)
 商品(商品号,商品名)
 原问题解决  


1 关系模式 STC(S,T,C)
           S学生,T教师,C课程。
(1)每一位教师仅教一门课,每门课有若干个教师教

(2)某个学生选定一门课后,就对应一个确定的教师(不能重复选同一门课)

(3)某个学生选定一个教师后,就对应一门确定的课程
 
 (1)码:(S,C),(S,T) 主属性:S,C,T,非主属性:无
  (2)函数依赖?
 T->C,(S,C)->T ,(S,T)->C
 (3)属于第几范式?为什么?
  函数依赖T->C左边不含有码,存在主属性对码的部分函数依赖,达不到BCNF, 但又不存在非主属性对码传递依赖和部分函数依赖,是3范式
 (4)有什么问题?
 数据仍有许多冗余。教师上课的信息与学生选此课的人数一样多。
 更新异常:某教师上课的信息要修改,要改多行。
 插入异常:当某门课本学期不开,自然就没有学生选修。没有学生选修,教师上该课程的信息就无法插入到数据库中。
 删除异常:当学生修完某课程,则把此学生记录删除的同时,也删除了教师开该课程的信息。
 (5)如何分解?分解后能否达到几范式? 原问题是否解决?
  ST(S,T)
  TC(T,C)
 达到BCNF,问题解决
 



 
 
 

posted @ 2019-06-29 16:39  王陸  阅读(4842)  评论(1编辑  收藏  举报