关系数据库——范式/反范式的利弊权衡和建议

【摘要】 范式(避免数据冗余和操作异常)
函数依赖
A->B  A和B是两个属性集,来自同一关系模式,对于同样的A属性值,B属性值也相同
平凡的函数依赖
X->Y,如果Y是X的子集
非平凡的函数依赖
X->Y,如果Y不是X的子集
部分函数依赖
X->Y,如果存在W->Y,且W⊂X
传递函数依赖
在R(U)中,如果X→Y(非平凡函数依赖,完全函数依赖),Y→Z, 则称…

范式(避免数据冗余和操作异常)

函数依赖

A->B A和B是两个属性集,来自同一关系模式,对于同样的A属性值,B属性值也相同

平凡的函数依赖

X->Y,如果Y是X的子集

非平凡的函数依赖

X->Y,如果Y不是X的子集

部分函数依赖

X->Y,如果存在W->Y,且W⊂X

传递函数依赖

R(U)中,如果X→Y(非平凡函数依赖,完全函数依赖)Y→Z 则称ZX传递函数依赖。

记为:X Z

super key&candidate key&primary key&主属性&非主属性

super key:在关系中能唯一标识元素的属性集

candidate key或key:不含有多余属性的super key

primary key:在candidate key 中任选一个

candidate key中X决定所有属性的函数依赖是完全函数依赖

包含在任何一个candidate key中的属性 ,称为主属性

不包含在candidate key中的属性称为非主属性

1NF 列不可分

列不可分

2NF 消除了非主属性对键的部分函数依赖

在关系T上有函数依赖集F,F+是F的闭包。

F满足2NF,当且仅当 每个非平凡的函数依赖X->A(F+),A是单个非主属性,要求X不是任何key的真子集(有可能是super key,也有可能是非key)。

3NF 消除了非主属性对键的传递函数依赖

F满足3NF,当且仅当 每个非平凡的函数依赖X->A(F+),A是单个非主属性,要求X是T的super key

BCNF 消除了主属性对键的部分函数依赖和传递函数依赖

F满足BCNF,当且仅当 每个非平凡的函数依赖X->A(F+),A是单个属性,要求X是T的super key

对于F+中 的任意一个X->A,如果A是单个属性,且A不在X中,那么X一定是T的super key。

反范式(减少连接,提高查询效率)

没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。具体做法是: 在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,减少了查询时的关联,提高查询效率,因为在数据库的操作中查询的比例要远远大于DML的比例。但是反范式化一定要适度,并且在原本已满足三范式的基础上再做调整的。

Pattern1:合并1对1关系

car_id

car_name

1

c1

2

c2

3

c3

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享