数据库设计之三范式

第一范式(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操作让数据库执行的更快。

相关推荐
DBA小马哥4 分钟前
从MongoDB迁移到金仓数据库:数据模型与业务连续性难题的保姆级指南
数据库·mongodb·dba
QZ1665609515938 分钟前
低误差率、高性能、符合审计要求的金融数据库审计和监测最佳实践指南
数据库·金融
愚公移码39 分钟前
蓝凌EKP产品:主文档权限机制浅析
java·前端·数据库·蓝凌
此生只爱蛋1 小时前
【Redis】持久化
数据库·redis
burning_maple2 小时前
redis笔记
数据库·redis·笔记
oh LAN2 小时前
提升性能:数据库与 Druid 连接池优化指南
数据库·mysql
砚边数影2 小时前
AI数学基础(一):线性代数核心,向量/矩阵运算的Java实现
java·数据库·人工智能·线性代数·矩阵·ai编程·金仓数据库
虹科网络安全2 小时前
艾体宝新闻 | Redis 月度更新速览:2025 年 12 月
数据库·redis·缓存
Linux-palpitate2 小时前
PostgreSQL单机部署
数据库·postgresql
engchina2 小时前
自然语言转 SQL 并不是“魔法”
数据库·人工智能·sql·text2sql·nl2sql·自然语言转sql