12-mysql优化之三范式

本文详细介绍了数据库设计中的三个主要范式:1NF、2NF和3NF的基本概念及应用原则。解释了如何确保数据表列的原子性、记录的唯一性,并探讨了消除冗余数据的重要性。此外,还讨论了在特定情况下对3NF规则的适当违背。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原则,首先满足1nf,2nf才能满足,其次3nf。如果1nf都不满足,2nf,3nf也不能满足了。

①1nf列具有原子性不可分割(如果是关系型数据库就满足一范式)不像mongoDB那样一个列是个集合就ok。

关系型数据库:mysql/oracle/db2/infomix/sysbase/sql server

非关系:mongoDB

②表中记录是唯一的

设置主键进行区分  主键不含业务逻辑、一般递增

③表中不要有冗余数据

如果一个表中的数据可以通过外键关联可以查询到,就不应该单独存放

例如:

user表

idnameclassidclasname
1aa 1bb
2cc1dd

班级表

classidclasnameclassNum
1bb302
2ff303

如上表,user表中的classname可以直接通过classid关联在班级表中查询到,所以这里算是冗余数据


④反3nf

一些特殊的情况,为了效率着想,3nf不成立

比如

相册表

idphotoidviews(所有照片的总浏览)
   
   
照片表

photoidnameviews(单个照片的浏览)
   
   

如上,views出现了冗余,因为它可以通过photoid可以进行查询到,但是如果查询,需要进行的操作是,先将相册全部查询出来,然后在到照片表里查询每张照片的views

然后进行相加计算,这样效率就不会变快,如果在相册表中添加了views字段,效率会更加的快。

所以一些情况还是需要特别的对待。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Muxiyale

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值