数据库范式
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表记录内容,但是查询的时候就需要联表查询,如果数据表的数据量很大就会造成查询性能下降,有时候需要适当的冗余数据列来提高查询性能。
这篇关于数据库范式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?