数据库设计里的范式,其实就像整理房间的规矩,越到后面要求越细。这个资源讲得挺系统的,从最基本的 第一范式 到更进阶的 BCNF 都涵盖了。内容不只是讲定义,还有不少例子,比如怎么 电话号码
字段、选课表怎么拆分,讲得比较接地气,挺容易理解。
第一范式的核心是原子性,你可以理解为每格表格里的内容都必须拆到最细。比如电话号码那例子,有家庭电话和办公室电话时怎么办?嗯,讲了三种改法,优缺点也说得清楚。对于刚入门数据库设计的你来说,这块内容有。
到了第二范式,重点变成了“完全依赖主键”。那种一半主键就能确定的字段,都得掉。举的例子是学生选课表,通过拆表把 CREDIT
拆出去,这招在实际建模里还蛮常用的。
第三范式更进一步,要砍掉传递依赖。说白了,就是不能出现“看你学号找系编号,再看系编号找地址”这种绕远的设计。通过学生和系分两个表,不但清爽,维护起来也方便多了。
的BCNF是“高级玩家”才用的,虽然不是每个项目都需要用到,但了解它还是有好处的。它要求不光非主属性,就连主属性也不能乱依赖,适合数据一致性敏感的业务场景。
如果你最近正好在设计表结构,尤其是多对多、嵌套数据这些场景,建议你认真看看这个。想深入的话,下面这些相关文章也挺不错:
如果你刚学数据库,建议做到第三范式就差不多够用了,太高级的范式反而不好维护。