当前位置: 代码迷 >> Sql Server >> 【初学者】范式练习题
  详细解决方案

【初学者】范式练习题

热度:91   发布时间:2016-04-24 09:53:42.0
【菜鸟求助】范式练习题
本帖最后由 cde32 于 2014-10-13 22:49:29 编辑
设有一个记录商品采购信息的关系模式:
R(商品号,商品名,规格,采购日期,采购单价,采购数量,采购员编号,采购员姓名)
如果规定:每名采购员可负责多种商品的采购,但每种商品只能由一个人员负责采购;商品的采购单价随市场行情而定。
我有两个地方不明白:
1、答案是R最高达到第1范式。可我觉得已经是第二范式了——这里面有局部依赖吗?谁能写出第二范式?
2、将R规范到3NF的标准答案是:
R1(商品号,商品名,规格,采购员编号)
R2(采购员编号,采购员姓名)
R3(商品号,采购日期,采购单价,采购数量)
这是怎么来的?我认为只有一个传递依赖:商品号→采购员编号→采购员姓名。所以3NF为:
R1(采购员编号,采购员姓名)
R2(商品号,商品名,规格,采购日期,采购单价,采购数量,采购员编号)
请问错在哪里?另一个传递依赖是什么?
网上找不到解答,在此拜托各位赐教
------解决思路----------------------
1、第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性。
而这里面,商品名,规格只依赖商品号,而作为真正的采购信息 采购单价、采购数量 需要 商品号+采购日期才能唯一确定。
因此,你要求的第二范式,这里可以这么写,R1(采购员编号,采购员姓名),R2(商品号,采购日期,采购单价,采购数量,采购员编号,采购员姓名)
2、第三范式是连传递依赖都不能有~~因此在上面第二范式的情况下,取消传递依赖即成了,你贴出来的第三范式
这里面确实只有一个传递依赖:商品号→采购员编号→采购员姓名
------解决思路----------------------
引用:
因此,你要求的第二范式,这里可以这么写,R1(采购员编号,采购员姓名),R2(商品号,采购日期,采购单价,采购数量,采购员编号,采购员姓名)

修改如下:
因此,你要求的第二范式,这里可以这么写,R1(商品号,商品名,规格,采购员编号),R2(商品号,采购日期,采购单价,采购数量,采购员编号,采购员姓名)
------解决思路----------------------
想错了~~
第二范式:
R1(商品号,商品名,规格,采购员编号,采购员姓名),R2(商品号,采购日期,采购单价,采购数量) 
------解决思路----------------------
引用:
Quote: 引用:

想错了~~
第二范式:
R1(商品号,商品名,规格,采购员编号,采购员姓名),R2(商品号,采购日期,采购单价,采购数量) 

您好:
“真正的采购信息 采购单价、采购数量 需要 商品号+采购日期才能唯一确定。”您给出的这个R2依旧是第一范式吧?


引用:
1、第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性。
而这里面,商品名,规格只依赖商品号,而作为真正的采购信息 采购单价、采购数量 需要 商品号+采购日期才能唯一确定。
因此,你要求的第二范式,这里可以这么写,R1(采购员编号,采购员姓名),R2(商品号,采购日期,采购单价,采购数量,采购员编号,采购员姓名)
2、第三范式是连传递依赖都不能有~~因此在上面第二范式的情况下,取消传递依赖即成了,你贴出来的第三范式
这里面确实只有一个传递依赖:商品号→采购员编号→采购员姓名

请问我写的第三范式的另一个传递依赖是什么?错在哪里?

1、我#3写的那个只有传递依赖,已经是第二范式~
2、你写的那不存在传递依赖,就没有另一个传递依赖的说法,最后,你写的这个还存在部分依赖,也就是连第二范式都不是,更不是第三范式
------解决思路----------------------
引用:
感觉 这个应该连第一范式都没达到啊。

用R来表示关系表,作为DBMS的关系表,不存在不符合第一范式,至少是第一范式了
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

想错了~~
第二范式:
R1(商品号,商品名,规格,采购员编号,采购员姓名),R2(商品号,采购日期,采购单价,采购数量) 

您好:
“真正的采购信息 采购单价、采购数量 需要 商品号+采购日期才能唯一确定。”您给出的这个R2依旧是第一范式吧?


引用:
1、第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性。
而这里面,商品名,规格只依赖商品号,而作为真正的采购信息 采购单价、采购数量 需要 商品号+采购日期才能唯一确定。
因此,你要求的第二范式,这里可以这么写,R1(采购员编号,采购员姓名),R2(商品号,采购日期,采购单价,采购数量,采购员编号,采购员姓名)
2、第三范式是连传递依赖都不能有~~因此在上面第二范式的情况下,取消传递依赖即成了,你贴出来的第三范式
这里面确实只有一个传递依赖:商品号→采购员编号→采购员姓名

请问我写的第三范式的另一个传递依赖是什么?错在哪里?

1、我#3写的那个只有传递依赖,已经是第二范式~
2、你写的那不存在传递依赖,就没有另一个传递依赖的说法,最后,你写的这个还存在部分依赖,也就是连第二范式都不是,更不是第三范式

谢谢您的耐心解答。但是很不明白:
您#3写的:R2(商品号,采购日期,采购单价,采购数量),不是照样还有“而作为真正的采购信息 采购单价、采购数量 需要 商品号+采购日期才能唯一确定”的局部依赖吗?怎么就成了第二范式?

在关系R2(商品号,采购日期,采购单价,采购数量)中,商品号,采购日期是主键,每一个这样的组合确定了唯一的采购单价、采购数量
局部依赖要求,非主键信息只部分依赖主键,如果R2符合的话,那么意为着知道商品号就知道采购单价、采购数量,那显然不是,因为每天的同商品,他们的采购单价、采购数量都不一样,同理采购日期
------解决思路----------------------
不对,R(商品号,商品名,规格,采购日期,采购单价,采购数量,采购员编号,采购员姓名)中,主键是复合主键商品号+采购日期,商品名、规格、采购员编号、采购员姓名部分依赖商品号,采购员姓名依赖采购员编号且传递依赖商品号
R2(商品号,采购日期,采购单价,采购数量)的主键也是复合主键商品号+采购日期,只是没有以上的部分依赖了
------解决思路----------------------
是我说的有点乱,在R中,商品名、规格、采购员编号、采购员姓名是完全依赖商品号,但相对于R中的主键商品号+采购日期来说,商品名、规格、采购员编号、采购员姓名部分依赖R的主键中的商品号,也就是商品名、规格、采购员编号、采购员姓名部分依赖R的主键,这就是R中的部分依赖
------解决思路----------------------
第一范式;即每一个字段都不可再分,显然R(商品号,商品名,规格,采购日期,采购单价,采购数量,采购员编号,采购员姓名)
这重关系,该关系式满足的
第二范式:要求首先满足第一范式,然后每个非主属性都完全依赖于主键
商品号可以决定商品名,规格 但与采购日期和其他属性没有直接关系,显示不满足第二范式的定义

第二个问题:规范为第三范式
R1(商品号,商品名,规格,采购员编号)   其中个人认为(商品号,采购员编号)应该是组合主键吧
R2(采购员编号,采购员姓名)
R3(商品号,采购日期,采购单价,采购数量)
这样是可行的,


首先r1其实是从表,r2和r3对应的范式表才是主表
第三范式定义:第三范式要求在满足第二范式的基础上,非主属性都不传递依赖于主键

举个例子:
有关系模式s-l (sno,sname,ssex,sdept,sloc)
因为 sno->sdept,sdept->sloc
所以sno->sloc 这就存在传递依赖 不满足三范式

所以s-l需要进一步分解

s-d (sno,sname,ssex,sdept) 主键为sno   
s-l (sdept,sloc) 主键为sdept 

分解后s-d和s-l都没有传递依赖才为三范式
希望你帮助你理解





------解决思路----------------------
第二范式
R1(商品号,商品名,规格,采购员编号,采购员姓名)
R2(商品号,采购日期,采购单价,采购数量)

第三范式
R1(商品号,商品名,规格,采购员编号)
R2(商品号,采购日期,采购单价,采购数量)
R3(采购员编号,采购员姓名)

---
可以答案应该是这样的,但是我主为R2里面应该添加了个采购批号更为恰当。当然可以题中是以采购日期做了这个功能。
  相关解决方案