数据库三大范式

        讲真!【三大范式】我一直不太想了解,因为学的时候只记得很绕口,导致脑子根本跟不上,现在也就只是知道有这个东西,有没有用过不太知道【三大范式:感觉有被冒犯到】好了!不抹黑自己了。

        同志们【三大范式】还是很重要的,不要提到三大范式就只想到第一范式、第二范式、第三范式,不然我可是会提问:什么是第一范式、第二范式、第三范式?记不起来了?那就不要拒绝我,继续往下看吧!

第一范式:数据表中的每一列(也就是每个字段)都不可以再拆分。

这句话其实是个问句:什么叫不可再拆分?

举个例子:

idaddress
1中国广东
2中国广西

上面有一个用户表,表中address【一般我们会存 中国广东 这样子】但是,按照第一范式我们还可以拆分成国家、省份,所以原本的一个字段要拆成两个字段

idcountryprovince
1中国广东
2中国广西

不要吐槽麻烦(我们还年轻,我们不怕麻烦)其实这样也有好处,比如说刚刚的用户地址,当你只是单纯的展示地址,那么一个字段就非常nice啦!但是,如果后期有国家省份筛选统计怎么办?所以遵循第一范式,规范的设计表结构很有必要!

第二范式:在满足第一范式的基础上,非主键列完全依赖于主键,而不能只依赖于主键的一部分。

第三范式:在满足第二范式的基础上,非主键只依赖于主键,而不依赖于其他非主键。

说实话,这个是我可以看懂的吗?个人建议小盆友尽量不要记这些绕口的话术

下面建个订单表来举个例子:

idcommodity_namecommodity_priceaddresscreate_time
1衣服9.9中国广东2022-08-23
2衣服9.9中国广西2022-08-23

这个表就不满足范式规则(大家不要学哈!)遵循三大范式,我们需要设计联合主键:

商品表

idcommodity_namecommodity_price
1衣服9.9
2裤子19.9

用户表

idaddress
1中国广东
2中国广西

订单表

idcommodity_iduser_idcreate_time
1112022-08-23
2122022-08-23

大概就是这样:把每个字段拆分到极简,让每张表只描述一件事情,减少数据冗余,节省空间,避免增删改异常【上面的表就简单举个例子,有些粗糙的,大家不要学】当然,这样的设计表还是有点问题的,我们查询时就会增加复杂度,查询性能也会降低。所以实际上,一般互联网公司的设计都是反范式的,通过冗余一些数据,避免跨表跨库,利用空间换时间,提高性能【感觉讲了个寂寞~】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ZBY52031

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

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

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

打赏作者

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

抵扣说明:

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

余额充值