数据库原理 ----- ER图,关系模型,FD,BCNF,3NF

1.    ER图

每个实体集里面都有至少一个关键属性(可能是多个属性组成的集合),在此属性下每个实体各不相同。

键是一组最小的属性集合,它们的值能够唯一地确定实体集中的每个实体。

候选键:可以作为key属性的最简形态(缺一不可)可以存在多个候选键

主键:候选键中选出一个最主要的key属性 ,用来唯一确定实体

超码:所有能成为key属性的属性及其集合

(可以有冗余属性,可能删掉其中一两个属性还是能成为关键属性)

外键:另外一个实体集的主键,用来建立两个表格之间关系的约束。这种关系一般都涉及一个表格里的主键字段,与另外一个表格里相连的字段。这些相连的字段就是外键。

超码 > 候选键> 主键

超码唯一标识实体,候选码为超码的最简形态(缺一个就不可以唯一标识实体)


 

弱实体集:一个实体对于另一个实体(一般为强实体,也可以是依赖于其他强实体的弱实体)具有很强的依赖联系,而且该实体主键的一部分或全部从其强实体(或者对应的弱实体依赖的强实体)中获得,则称该实体为弱实体。

强实体集的Key都是弱实体集的外键。

弱实体集和强实体集之间的支撑联系必须是多对唯一的。

如果实体集E对F 是一对一(或多),且E的属性互斥,就可以删除E,把E的属性加入F

 

2.    关系模型

弱实体集转换为表格:对应强实体集的关键字和弱实体集的关键字组合成表格关键字

弱实体集里的属性即为表格中属性

联系转为表格:

①多对多:双方的主键为主键

②多对一:多的主键为主键(唯一时还要限定其非空,以一的主键为外键)

③多路联系:联系里的属性即为关联的表格的主键

弱实体集和对应唯一确定的强实体集间的弱联系不需要变成表格,加上此弱实体集对应唯一确定的强实体集的关键字。

例如:A是弱实体集,B是对应唯一确定的实体集,R是联系

变成表格时实体集B一张表,弱实体集A和B的主键一张表,一共两张表。

如果A、B都不是弱实体集,那么就是A、B、R三张表。

④一对一:其中一方的主键

合并有相同关键字的表格。多对多的一般不合并,否则表格中可能出现重复冗余。

 

3.    函数依赖

属性A函数决定属性B(A->B):对于任意两行,如果A相同,则对应的B也相同

(就是说一个自变量只能对应一个因变量,候选码可以函数决定其余所有属性!)

判断A->B:只取A和B的列观察,如果A相同,B也要相同

 

组合FD:

传递性(A-> B, B -> C 可推出 A -> C)

结合性(A-> {B1, B2} 可推出 A -> B1 && A -> B2)

自反性(A可以函数决定其本身和它的子集)

增广率(A -> B 可推出 {A, C} -> {B, C})

平凡(trivial):B为A的子集

非平凡(nontrivial):B中有属性不为A的子集

完全非平凡:B中全部属性均不为A的子集

找出最小函数依赖:增广去除,尽量完全非平凡

 

闭包:A的闭包(记为A+)为A所有可以决定的属性的集合

判断属性闭包的方法:

反复将A可以决定的属性放进A集合里面直至A集合不变,此时的A集合即为A的闭包

如果一个集合A的闭包(A+)为所有属性的集合,那么集合A就是超码(关键字)

如果一个集合A的闭包(A+)为所有属性的最小集合,那么集合A就是候选码

 

4.    BCNF, 3NF

分解法:将表格中可由某些子属性所决定的属性拆出来成为新表

投影法(将子属性拆分)+ 去重

要求:属性不丢失,两张表要有公共属性, 分解后两张表的公共属性要是关键字

检查:分解后通过连接操作如果可以还原回原表格,即可说明分解有效

无损分解:只需要分解后有一个表,左边的属性能函数决定右边。

在函数依赖中,如果某个属性没有在右边出现过,那么它一定是主键的一部分。

 

范式

1NF:所有属性原子性

2NF:除主键外其他属性只依赖于主键的整体,不能只依赖于主键的一部分。

BCNF:如果A-> B是非平凡(nontrivial)的函数决定,那么A就是关键字(super key)       

     (左边只能是superkey。左边一定可以决定其它所有属性)

问题:BC范式可能导致函数决定的丢失(即使得原本有效的函数决定无效化)

3NF:对所有非平凡的A->B,A是关键字(super key)或者B是候选键的一部分.

(注意:整个B是候选键的一部分,而不是B的一部分)

问题:可能存在一定的重复项

 

判断BCNF:1.X->A且A属于X,即这是个平凡函数依赖。或2.X->A且X是超键。

判断3NF:1.X->A且A属于X,即这是个平凡函数依赖。

2.X->A且X是超键(Super key)。  3.A是某候选键的一部分。

BCNF分解:将左边变成超码,一直分解到符合(分解结果可能不唯一)一张表只包含违反规则的属性,让左边变成超码,另一张表包含了该超码和其它所有属性。

3NF分解算法:找最小函数决定覆盖,将最小函数决定覆盖里的每一条规则分别对应一张表格,找到其中是否存在一张表格完整包含了原表格所有的候选键,否则需要另外一张表格包含原表格所有的候选键

(注意需要一张表包含所有候选键,其它表如果可以的话就可以合并)

 

最小函数决定覆盖

第一步:先将右边都化为单一元素,用A -> B1和A -> B2表示A -> {B1, B2}

第二步:去除左边的冗余属性,看是否有函数依赖左边的属性可以去掉当A1 -> B或A2 -> B时用A1 -> B或A2 -> B表示{A1,A2} -> B(比如A+= AC,那么AB –> C左边就可以去掉B)

第三步:去掉所有的冗余依赖关系,看是否可以去掉某个函数依赖先去除某个依赖关系X -> Y,然后在剩余依赖关系中求X的闭包X+,若Y在X+里面则说明依赖关系X -> Y冗余,需要删除


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值