数据库 1NF,2NF,3NF 3范式 介绍
1NF:所有字段值都是不可分解的原子值
比如以下CONTACTINFO字段
存储 包含手机号码,邮箱地址,保存到一个字段了,就不符合1NF,应该拆分为2个字段 )
符合1NF的表设计
2NF:要求非主属性完全依赖于主属性
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。当存在联合主属性的时候,才会发生不符合第二范式的情况。比如一张表有两个主键,不能存在这样的属性,表中存在字段(非主属性)只依赖于其中一个主属性(主键),这就是不符合第二范式。如果存在不符合第二范式的情况,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。
该表虽然只有1个主键,但2NF范式并不是说只有1个主键就不会存在不符合2NF
虽然TID为主键,(PERSONID,ITEMID)为唯一索引,是该表的超键,除了主键外,通过(PERSONID,ITEMID)也能确定每一行记录
2NF 要求该表其他非主字段必须完全依赖于TID 或者完全依赖于(PERSONID,ITEMID)联合超键
该表中存在,ITEMID--》ITEMNAME,UNIT 及通过项目ID就能推导出项目名称和项目单位,
不符合2NF
应该是ITEMID,ITEMNAME,UNIT3个字段组成一个新表,然后上述的表只保存ITEMID字段即可,需要ITEMNAME,UNIT时关联新表即可
上面这个表不满足2NF,会存在新增,修改,删除异常,以及数据冗余
拆分为表1和表2如下所示
表1
表二
3NF:属性不能传递依赖于主属性
第三范式(3NF)是在第二范式(2NF)的基础上建立起来的,即满足第三范式(3NF)必须先满足第二范式(2NF)。如果某一属性依赖于其他非主键属性,而其他非主键属性又依赖于主键,那么这个属性就是间接依赖于主键,这被称作传递依赖于主属性。
2NF是需要有联合超键才可能发生不符合2NF的情况,而3NF在只有一个主键的情况下也可能发生不符合3NF
如下表PERSONID为主键,存在证件名称-->(依赖)证件类型,证件类型-->(依赖)人员ID
满足某一属性依赖于其他非主键属性,而其他非主键属性又依赖于主键,不符合3NF
拆分为以下2张表,才能满足3NF范式
表1
表2