java三大范式是什么意思,数据库之三大范式详解!

数据库建表遵循三大范式能确保数据无冗余、减少数据异常。第一范式要求每个字段不可再分;第二范式是在第一范式基础上,确保所有非主键字段都完全依赖于主键;第三范式则是消除非主键字段之间的传递依赖。在实际操作中,根据业务需求平衡规范化和查询效率,可能需要适当反规范化。
摘要由CSDN通过智能技术生成

在数据库中建表原则上必须遵守三大范式!

1.首先我们得知道三大范式是干什么用的?

2.什么是三大范式?

如果有一张这样的表:

f4eae809f282a7c68ad3231e636cce56.png

我们该如何将它存入数据库?

如果产品名字字段同时存下两件商品那是典型的“非规范化”的建表!

因此我们需要将它拆分!

7aac28bcd735c25fb9921df5bccde7b6.png

eb5300b90c4842f621f9f6d93dc60f28.png

注意:这个时候表3的主键是订单号,而表4的主键是(订单号、产品编码)是一个复合主键!

这样拆分的话,一个表就只有一个值,那么这就是 “第一范式“!

但是我们思考一个问题,如果我们添加一个商品,比如说添加 ”蜡烛“ ,但是我们发现产品名称和单价并不依赖订单号,

因此我们没法将这根”蜡烛“加入到这张表中。

因此如果要有添加的操作就必须再拆分!

3110dec5a1342c0d8c70680df66096e5.png

e08c9b068826aab90551cf139137710d.png

图4.1还是复合主键,而图4.2则拆分出来了。

这种所有属性仅仅依赖于主键的情况就是第二范式!

图3本身就是第二范式了,但是我们这里发现 订单号能决定用户id,id决定用户的名称,这里就出现了依赖传递的现象:

订单号>用户id>用户名称,这里的用户信息无法单独管理。

因此继续拆分!

968715195e1be235da604da7e99609ef.png

b47c0479514846e20eb79d5948a7c93e.png

当表中没有依赖传递的时候,我们就可以称之为”第三范式“!

总结:当我们在建表的时候,如果不遵循三大范式原则,就是违反了规范化建表,虽然到了第三大范式整个表都被拆分的很小,

但是整个逻辑是会比较清楚的,因为第三范式的目的是要消除传递依赖,当这个表拆分成了多个表的时候我们 ”join“ 起来是非常

耗时的,因此当需要兼顾查询效率的时候字段可以考虑反第三范式,特别是在高查询低修改的时候。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值