数据库设计之三范式

第一范式(1NF)

列具有原子性,设计列要做到列不再拆分。

id contry
1 中国上海
2 美国纽约

以上的表设计就不满足第一范式,因为contry对应的值可以拆分

so,满足第一范式的设计如下:

id contry city
1 中国 上海
2 美国 纽约

第二范式(2NF)

在满足第一范式的基础上、满足一张表只能描述一件事情下面这张表既包含了学生信息又包含了课程信息所以不满足第二范式,正确的是把学生和课程拆开用分别用学生和课程表存储对应的信息。

id name sex course source
1 tom male Java 100
2 lucy female Python 800

第三范式(3NF)

在满足第二范式的基础上,满足消除传递依赖(表中的数据如果能被推导出来,就不要设计一个字段单独存储)

id name number price totalprice
1 牙膏 20 50 1000
2 袜子 30 60 1800

三范式就是一个空间最省原则。

反三范式

通过增加冗余或者重复数据 来提高数据库的读性能

浪费存储空间,节省查询时间

冗余字段:某一个字段属于一张表,但是它又在另外一张表中

总结

1.尽量根据三范式规则去设计数据库

2.可以合理的加入冗余字段减少join操作让数据库执行的更快。

相关推荐
深鱼~30 分钟前
【Redis】缓存|缓存的更新策略|内存淘汰策略|缓存预热、缓存穿透、缓存雪崩和缓存击穿
数据库·redis·缓存
nicepainkiller31 分钟前
redis高阶2 高性能
数据库·redis·缓存
Algorithm157632 分钟前
Redis的ZSet对象底层原理——跳表
数据库·redis·缓存
IT北辰39 分钟前
Python数据处理:文件的自动化重命名与整合
数据库·python·自动化
猫头虎1 小时前
数据库中DDL、DML、DCL的区别是什么?
数据库·数据仓库·sql·oracle·database·时序数据库·big data
傻小胖1 小时前
mongoose的介绍,连接数据库
数据库·mongodb
一个天蝎座 白勺 程序猿1 小时前
Python爬虫(10)Python数据存储实战:基于pymongo的MongoDB开发深度指南
数据库·爬虫·mongodb
听闻风很好吃2 小时前
Redis性能优化终极指南:从原理到实战的深度调优策略
数据库·redis·性能优化
别致的影分身2 小时前
etcd 的安装及使用
数据库·etcd
剑哥在胡说3 小时前
Python三大Web框架对比:Django、Flask、Tornado的异步实现方式详解
数据库·python·django·flask·tornado