网站导航:首页 -> Oracle认证 -> Oracle认证行业信息 -> 深入浅出:数据库设计模式范例(2)

深入浅出:数据库设计模式范例(2)

 
bcnf:如果关系模式r(u,f)的所有属性(包括主属性和非主属性)都不传递依赖于r的任何候选关键字,那么称关系r是属于bcnf的。或是关系模式r,如果每个决定因素都包含关键字(而不是被关键字所包含),则rcnf的关系模式。
例:配件管理关系模式 wpe(wno,pno,eno,qnt)分别表仓库号,配件号,职工号,数量。有以下条件
a.一个仓库有多个职工。
b.一个职工仅在一个仓库工作。
c.每个仓库里一种型号的配件由专人负责,但一个人可以管理几种配件。
d.同一种型号的配件可以分放在几个仓库中。
分析:由以上得 pno 不能确定qnt,由组合属性(wno,pno)来决定,存在函数依赖(wno,pno) -> eno。由于每个仓库里的一种配件由专人负责,而一个人可以管理几种配件,所以有组合属性(wno,pno)才能确定负责人,有(wno,pno)-> eno。因为一个职工仅在一个仓库工作,有eno -> wno。由于每个仓库里的一种配件由专人负责,而一个职工仅在一个仓库工作,有(eno,pno)-> qnt。
找一下候选关键字,因为(wno,pno) -> qnt,(wno,pno)-> eno ,因此(wno,pno)可以决定整个元组,是一个候选关键字。根据eno->wno,(eno,pno)->qnt,故(eno,pno)也能决定整个元组,为另一个候选关键字。属性eno,wno,pno 均为主属性,只有一个非主属性qnt。它对任何一个候选关键字都是完全函数依赖的,并且是直接依赖,所以该关系模式是3nf。
分析一下主属性。因为eno->wno,主属性eno是wno的决定因素,但是它本身不是关键字,只是组合关键字的一部分。这就造成主属性wno对另外一个候选关键字(eno,pno)的部分依赖,因为(eno,pno)-> eno但反过来不成立,而p->wno,故(eno,pno)-> wno 也是传递依赖。
虽然没有非主属性对候选关键辽的传递依赖,但存在主属性对候选关键字的传递依赖,同样也会带来麻烦。如一个新职工分配到仓库工作,但暂时处于实习阶段,没有独立负责对某些配件的管理任务。由于缺少关键字的一部分pno而无法插入到该关系中去。又如某个人改成不管配件了去负责安全,则在删除配件的同时该职工也会被删除。
解决办法:分成管理ep(eno,pno,qnt),关键字是(eno,pno)工作ew(eno,wno)其关键字是eno
缺点:分解后函数依赖的保持性较差。如此例中,由于分解,函数依赖(wno,pno)-> eno 丢失了, 因而对原来的语义有所破坏。没有体现出每个仓库里一种部件由专人负责。有可能出现一部件由两个人或两个以上的人来同时管理。因此,分解之后的关系模式降低了部分完整性约束。