对以下的关系模式, 分别写出:
(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,问题解决