码迷,mamicode.com
首页 > 其他好文 > 详细

bcnf范式

时间:2014-10-11 14:27:25      阅读:289      评论:0      收藏:0      [点我收藏+]

标签:工作

       3.5范式——bcnf范式到底是什么呢?

对于bcnf范式,通过查阅资料,我的理解是——主键依赖的去除。比如说:一个仓库管理的表格,有以下属性(管理员编号,仓库号,货物编号,货物数量)其中每个管理员管理一个仓库,那么就会出现这样的情况:

1.仓库号和货物编号可以确定货物数量,仓库号和货物编号可以确定管理员编号。

bubuko.com,布布扣

2.管理员编号和货物编号可以确定仓库号,管理员编号和货物编号可以确定货物数量。

bubuko.com,布布扣

3.仓库号可以确定管理员编号。

bubuko.com,布布扣

4.管理员编号可以确定仓库号。

bubuko.com,布布扣

其中,仓库号、管理员编号和货物编号都是主属性,数量是非主属性,它们的关系符合三范式。但是它不是bcnf,因为在主属性中,仓库号可以推出管理员编号,管理员编号可以推出仓库号。他们之间存在传递依赖。这是不符合bcnf的。

         做法是,把表格拆分,得到如下结果:表一(仓库号,管理员编号);表二(管理员编号,货物编号,数量)。

         但是,有的bcnf范式会导致关系的丢失。比如:有个表示工厂工人计件的表格(车间号,工人编号,零件号,数量)其中的关系是:

1.      一个工人只能在一个车间工作,一个车间有多名工人。

bubuko.com,布布扣

2.      一个工人生产多种零件,一个车间内的零件没有重复。

bubuko.com,布布扣bubuko.com,布布扣

其中,车间号、工人工号和零件号都是主属性,数量是非主属性,它们的关系符合三范式。但是“车间号”+ “零件号”可以推出“工人工号”然后“工人工号”可以推出“车间号”,他们主属性之间有传递依赖,这样的话是不符合bcnf范式的。

分解的办法是:将表格拆分成两个表格——表一(职工号,零件号,数量);表二(职工号,车间号)。这样分解会将“车间号+零件号”推出“工人工号”的关系丢失。

bubuko.com,布布扣

3.5范式已经搞定,接下来就是第四范式。

bcnf范式

标签:工作

原文地址:http://blog.csdn.net/liyasong666888/article/details/39991973

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!