数据库设计--范式的理解

Posted fanerwei222

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库设计--范式的理解相关的知识,希望对你有一定的参考价值。

原创:转载需注明原创地址 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”都为组成主键列的所有主属性列其中任意的列,所以它们必须完全依赖于主键,而且之间不能存在部分依赖。

以上是关于数据库设计--范式的理解的主要内容,如果未能解决你的问题,请参考以下文章

数据库设计--范式的理解

理解数据库范式

数据库模型设计,第一范式第二范式第三范式简单例子理解

[数据库] 理解数据库范式-通俗易懂

规范化设计的范式的个人理解

数据库范式的思考以及数据库的设计