乐趣区

关于mysql:关系型数据库设计三大范式的通俗理解

目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯 - 科德范式(BCNF)、第四范式 (4NF)和第五范式(5NF,又称完满范式)。

而通常咱们用的最多的就是第一范式(1NF)、第二范式(2NF)、第三范式(3NF),也就是本文要讲的“三大范式”。。

而通常咱们用的最多的就是第一范式(1NF)、第二范式(2NF)、第三范式(3NF),也就是本文要讲的“三大范式”。


第一范式(1NF):要求数据库表的每一列都是不可分割的原子数据项。

举例说明:

在下面的表中,“家庭信息”和“学校信息”列均不满足原子性的要求,故不满足第一范式,调整如下:

可见,调整后的每一列都是不可再分的,因而满足第一范式(1NF);

第二范式(2NF):在 1NF 的根底上,非码属性必须齐全依赖于候选码(在 1NF 根底上打消非主属性对主码的局部函数依赖)

第二范式须要确保数据库表中的每一列都和主键相干,而不能只与主键的某一部分相干(次要针对联结主键而言)。

举例说明:

在上图所示的状况中,同一个订单中可能蕴含不同的产品,因而主键必须是“订单号”和“产品号”联结组成,

但能够发现,产品数量、产品折扣、产品价格与“订单号”和“产品号”都相干,然而订单金额和订单工夫仅与“订单号”相干,与“产品号”无关,

这样就不满足第二范式的要求,调整如下,需分成两个表:

   

第三范式(3NF):在 2NF 根底上,任何非主属性不依赖于其它非主属性(在 2NF 根底上打消传递依赖)

第三范式须要确保数据表中的每一列数据都和主键间接相干,而不能间接相干。

举例说明:

上表中,所有属性都齐全依赖于学号,所以满足第二范式,然而“班主任性别”和“班主任年龄”间接依赖的是“班主任姓名”,

而不是主键“学号”,所以需做如下调整:

  

这样以来,就满足了第三范式的要求。

ps: 如果把上表中的班主任姓名改成班主任教工号可能更确切,更符合实际状况,不过只有能了解就行。

退出移动版