Java面试题(10)-三范式与反三范式

什么是三范式呢?

1.第一范式(1NF):确保每一列的原子性(做到每列不可拆分)

2.第二范式(2NF):在第一范式的基础上,非主字段必须依赖于主字段(一个表只做一件 事)

3.第三范式(3NF):在第二范式的基础上,消除传递依赖

什么是反三范式? 

反三范式是基于第三范式所调整的,没有冗余的数据库未必是好的数据库,有时为了提高运行效率,就必须降低 范式标准,适当保留冗余数据。基于业务的需要合理设计数据库 

一范式表示图片:

这里的话就是违背了第一范式,因为中国和北京是可以拆分开的。并没有保证每一列的原子性

二范式表示图片:

第二范式表示一张表只做一件事,意思是只传递一个主线信息,比如下图,每张表都有唯一要表达的事情。

三范式表示图片:

三范式的话就是列与列之间,没有传递性,也就是说,如果其中一列可以通过其他列经过计算得到,那么就是违反了第三范式,也就是传递依赖。比如这里的总金额,可以通过单价和数量得到,所以就违背的第三范式。

反三范式:

那么在三范式的基础上,加入有这样两张表:

如果此刻需求是想查询某个用户的企业,那么就需要进行两次查询,此时虽然满足了三范式,但是无疑降低了我们的查询效率,让我们的操作变的复杂起来,那么在三范式的基础上,做适度的冗余,提升我们的查询效率,就是我们的反三范式:那么这样,上面的两张表就可以合成一张表:

那么这样,我们就可以很快的查询到用户的企业名称。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值