【数据库】数据库范式

数据库范式:

1NF.

原子性,属性不可再分,比如有一列是地址,地址这里可以再分分。

2NF.

非主属性对码完全依赖,不是部分依赖。,就是一个表中不应该包含两种信息,比如订单商品表:订单编号,商品编号是联合主键,这张表中既包含了商品信息,也包含了订单信息,关于订单的信息字段对码是部分依赖(依赖于订单编号),关于商品的信息字段对码是部分依赖(依赖于商品编号);解决:拆分出一个订单信息表、一个商品信息表、一个订单商品表。

3NF.

非主属性之间不互相依赖(消除非主属性传递依赖于码)(所有非主属性全部依赖于码)。比如一个订单客户表中:订单编号是主键,客户编号依赖于订单编号,客户名称依赖于非主键--客户编号。在这一张表中,我们只需要知道客户编号这一客户信息,就可以根据这个信息去查询客户表,得到我们需要的信息了,不需要存储冗余的数据客户名称了。

BCNF.

消除主属性对码的部分依赖。2NF,3NF分别是对非主属性动刀,BCNF开始对主属性动刀了。BCNF就是消除主属性对码的部分依赖。比如订单客户商品表:(订单号,商品号)、(订单号,客户编号)是主键。订单号、商品号、客户编号都是主属性,其中客户编号就与k订单编号互相依赖(一个客户只有一个订单编号);解决:拆分表,拆分成:客户商品表,订单商品表。

所以范式越高,就是数据库冗余度越低,但对我们的查询性能也会有所下降(多表连接)。因此需要在性能和冗余度之间做一个权衡:比如上面3NF举的栗子中,如果很多时候我们查看订单信息的时候,都需要知道客户名称,那么我们可以再订单客户表中增加这个冗余字段--客户名称,来减少多表连接,提高查询性能。

猜你喜欢

转载自blog.csdn.net/baidu_29894819/article/details/81358092