数据库范式

2022/7/23 2:24:12

本文主要是介绍数据库范式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

数据库范式是为了规范数据库表结构设计,使结构更合理,消除存储异常,使数据冗余尽量小。便于插入、删除和更新。

第一范式:列不可再拆分

列指的字段或者叫属性,所有的字段都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。
例如:

商品编码 商品款码 售价
#001 A001 100
#002 A001 200

每个字段的含义是明确的,但事实上在某些情况会违反这一原则,称之为反模式,例如加一个扩展字段,该字段内容是个json,可以动态添加一些非常用的字段,比如{"产地":"XX","生产批次":"XXXX"},好处是当不是每一条记录都必然会出现的字段需要存储时,不用额外增加字段,可以随意插入,坏处就是万一用到扩展字段作为搜索查询条件,将无法满足查询的需求。

第二范式:非主属性完全依赖于主键

数据库里的每个字段都应该和主键相关联,并完全依赖于主键,

商品编码 商品款码 商品名称 售价 销售属性
#001 A001 大码女款上衣 100 红色;XL
#002 A001 大码女款上衣 100 红色;XXL

通过商品编码可以找到商品款码
通过商品编码可以找到商品名称
通过商品编码可以找到商品售价
通过商品编码可以找到商品销售属性

第三范式:消除传递依赖(任何非主属性不依赖于其它非主属性)

商品编码 商品款码 商品名称 售价 销售属性
#001 A001 大码女款上衣 100 红色;XL
#002 A001 大码女款上衣 100 红色;XXL

在这张表里 商品名称其实可以依赖于商品款码,可以将商品的款作为单独的表,将上述表拆成两部分。
SKU表

商品编码 商品款码 售价 销售属性
#001 A001 100 红色;XL
#002 A001 100 红色;XXL

Item表

商品款码 商品名称
A001 大码女款上衣

如果严格按照范式设计数据库,更新数据时影响的范围会比较小,比如更新商品款式的名称时只需要更新Item表的一条记录就行了,不需要更新所有SKU表记录内容,但是查询的时候就需要联表查询,如果数据表的数据量很大就会造成查询性能下降,有时候需要适当的冗余数据列来提高查询性能。



这篇关于数据库范式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程