记得上学时学数据库,书中说过:“数据库建模一般实现到3NF和BCNF,4NF 5NF基本没用”,造成多年对4NF和5NF置之不理。
离开学校7年后的今天,无事有把数据库的范式定义拿起来翻翻,发觉好象我对4NF和5NF的理解一直有误?
在做业务建模时,不少情况我们会尽可能地完全反映显示业务关系,以 厂 采购员 和 订单 为例:
如果业务认为订单不属于特定采购员,也即关系如下:
厂和订单为1:n的关系;
厂和采购员也为1:n的关系;
采购员与订单无关。
此时,那么我们肯定ORM简单得处理为两个关联表,这时,不正是符合了4NF么?(如果只建立一个关联表,表中三个字段厂id,订单id,采购员id,而后三个id组成联合主键,那就是符合了BCNF但不符合4NF了)
而如果关系更复杂,一个订单可以被多个采购员处理,一个订单还可以同属于多个厂共享,那么我们一定是建立三个关联表,独立记录三者间互相的关系,这不就是遵循了5NF么?