数据库设计之三范式

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

相关推荐
混乱意志1 小时前
dgraph example数据导入
数据库·后端
Web极客码1 小时前
WordPress 站点漏洞利用:数据库恶意注入与多重感染的案例分析
数据库·wordpress·网站安全·数据库注入·wordpress漏洞·wordpress安全插件
刺客xs1 小时前
MySQL数据库----DML语句
数据库·mysql
嘉讯科技HIS系统2 小时前
嘉讯科技:医疗信息化、数字化、智能化三者之间的关系和区别
大数据·数据库·人工智能·科技·智慧医疗
爱上语文3 小时前
Redis基础(4):Set类型和SortedSet类型
java·数据库·redis·后端
lifallen3 小时前
Paimon vs. HBase:全链路开销对比
java·大数据·数据结构·数据库·算法·flink·hbase
Brookty4 小时前
【MySQL】JDBC编程
java·数据库·后端·学习·mysql·jdbc
先做个垃圾出来………4 小时前
SQL的底层逻辑解析
数据库·sql
码不停蹄的玄黓5 小时前
深入拆解MySQL InnoDB可重复读(RR)隔离级别:MVCC+临键锁如何「锁」住一致性?
数据库·mysql·可重复读
paopaokaka_luck5 小时前
基于SpringBoot+Vue的酒类仓储管理系统
数据库·vue.js·spring boot·后端·小程序