数据库的三大范式很好记:第一范式:不允许表的字段可拆分;第二范式:完全依赖主键;第三范式:直接依赖主键。但是如何区分这三大范式呢?
第一范式:不允许表的字段可拆分。这是最好区分的,比如一张表里面有个字段叫联系方式,但是里面的内容是电话+邮箱+地址组成的,这个字段可以拆分成电话,邮箱,地址三个字段,所以不符合第一范式。
第二范式:完全依赖主键;第三范式:直接依赖主键这两个是比较容易混乱的,我们怎么区分呢?
第二范式:完全依赖主键;一张教师表里,有一个关联课程id,还有一个课程名称,应该直接冗余课程id与课程名称出另一个表。我的理解是第二范式属于两个或以上字段在一张表里就属于不符合,它是可以冗余成新的一张表
第三范式:直接依赖主键;意思是教师表,就只能有教师这个的信息,没有关系的字段不需要放在这个表里。也就是说只要与表无关的字段,就可以说这个不符合第三范式。
清楚了这三个范式,那我们必定要遵守吗?当然理论是理论。比如以下场景,在分布式系统中,有两个服务,一个订单服务,一个产品服务中,这是分为两个数据库的,但是有个系统需要通过产品去查询订单,这时你会选择怎么做呢?
采用跨库跨表搜索?哦不,直接在订单表冗余一个产品名称字段,嗯嗯,真香!