【BCNF冗余范式?】满足BCNF的关系,支持一点“不干政”的冗余是最高效的数据库设计范式?

前言

        读懂本文章的前提条件是需要明白什么是数据库第一二三、BCNF范式。在此不做赘述,下面的引用的链接是我觉得易于理解数据库第一二三、BCNF范式的文档。本篇文章主要讲为什么满足BCNF范式+“不干政”的冗余是最高效的数据库设计范式。
fd数据库三范式和BCNF范式的理解:生动举例-优快云博客icon-default.png?t=N7T8https://blog.youkuaiyun.com/weixin_43954951/article/details/125494783

现状

        毋庸置疑BCNF是最合理的数据库范式,所谓合理就是逻辑通畅,需求清晰,不惧需求变更的设计规范,是程序员高效开发,维持脑压正常的前提。

        然而数据库表设计的形式不代表是人们喜欢看见的数据形式,人们更喜欢显而易见的展示,而满足BCNF范式更多代表的是业务关系的通畅。然而很多刚入行的同学常常是对着产品原型展示的字段一通设计,结果导致表关系穿插耦合,冗余繁复,最后导致的结果就是出现性能瓶颈、工作任务繁重、甚至BUG层出不穷、脑压蹭蹭蹦高。所以不用问为什么,乖乖的遵循前人踩坑得出的经验BCNF范式一定是你少走弯路的捷径。

拔高

很多同学冗余字段的初衷,往往是为了提高性能、或者分库分表、或者同步第三方系统数据、或者遵循云云原生设计,这些都是对连表查询不友好的设计,说到这忍不住吐槽一句:写一堆join是万恶的开始,2015从业的前三年还觉得能写出复杂的sql很牛逼,后来才发现不用写sql才是最牛逼的。事实上传统的软件开发体系中使用冗余并没有错,错的是不合理的使用冗余。只要遵循下面几点规则,冗余不再是问题。

1】冗余的字段“不干政”,仅用做查询的索引和回显。

切记不可图一时之快将冗余的字段用到关系处理上,违反上面规范就是真正违反了BCNF范式提出的初衷,造成混乱的开始。

2】统一处理冗余

其实冗余逻辑在不同的业务数据处理中高度一致,我们完全可以使用面向切面编程的方式统一处理,这样做的好处就是不侵入代码,避免了重复劳动。

总结

为了方便叙述,暂且将上面冗余的规范+BCNF范式叫做【BCNF冗余范式】简称BCNF-R,其实BCNF-R仍然没有背离BCNF的初衷。只是在保证数据库设计逻辑通畅的面上增加了一点实用性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值