数据库设计--范式的理解
原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11706874.html
关系型数据库的设计范式。
1️⃣ 第一范式 : (基础NF)每一个列都不能再拆分。
例子:“身高体重”列, 还能拆分为“身高”和“体重”两列!
2️⃣ 第二范式: (在1NF的基础上)非主键列对主键完全依赖。(在1NF的基础上消除非主键列对主键(联合主键)的部分依赖)
例子:“订单号”列和“商品号”列为联合主键,该行应该显示的是对应订单号中的商品号对应的具体商品的信息,假设有“订单金额”列,那么“订单金额”列就只依赖于“订单号”,属于对主键的部分依赖,这种情况可以拆分副表,将“订单金额”列放入副表中。
3️⃣ 第三范式: (在2NF的基础上)非主键列不依赖于其他非主键列。(在2NF的基础上消除非主键列的传递依赖)
例子: 列和主键直接关联,而不是间接关联。“订单号”列为主键,“下单用户id”,“下单用户名称”,“下单用户性别”为非主键列,“下单用户名称”和“下单用户性别”都依赖于“下单用户id”列,所以存在传递依赖,应该分一个副表出来。
4️⃣ 第四范式: (在BC范式基础上)消除非主属性的多值。
例子: 有一个用户表有“id”和“iphone”和“tel”三个列,id为1的用户有2列,分别为
1 ;188xxxx0000;0796-xx0000
2; 199xxxx0000;0796-00xxxx
需要建立一个副表,消除这种情况才符合第四范式。
5️⃣ 第五范式: (在4NF的基础上)消除连接依赖。
例子:略。
6️⃣ BC范式: (在3NF的基础上)组成主键列的所有主属性列其中任意的列对主键完全依赖,消除组成主键列的所有主属性列其中任意的列对部分主属性的传递依赖。
例子: “A”和“B”和“C”为联合主键,“A”或者“B”或者“C”都为组成主键列的所有主属性列其中任意的列,所以它们必须完全依赖于主键,而且之间不能存在部分依赖。