关系型数据库的三大范式

关系型数据库的三大范式

一、第一范式

    只要是关系型数据库的表,都满足第一范式。
    第一范式:数据库表中所有字段都是单一属性,不可分割。比如整型,字符型,日期类型。
    Redis是非关系型数据库,因为他的一个字段值可以是一个Map,其中存在key、value。key可以是字符型,value可以是日期型。

二、第二范式

    第二范式:数据库中不存在非关系字段对任一候选关键字段的部分函数依赖。
    告诉我们,不能使用组合键,要使用唯一主键。比如顾客表中使用顾客id、产品类型唯一标识一行数据,这就是不合理的。
    不满足第二范式带来的问题:

  1. 数据冗余
    顾客id、产品类型作为组合键,当一个产品有n个顾客购买的时候同一个产品的时候,就重复n-1次记录顾客信息。当一个旅客n次购买同一个产品的时候就是n-1次重复记录的产品类型
  2. 更新异常
    如果这时候去调整一个产品类型,就需要去更新所有顾客够买的产品类型,否则出现同一个产品出现不同类型的情况

  3. 插入异常
    当新进一个产品的时候,还没有人购买,就无法插入表中。

第二范式,要求我们使用唯一主键。

三、第三范式

第三范式:要求数据表中不存在非关键字段对任一候选关键字段的传递函数依赖。
员工表:员工编号、姓名、年纪、部门名称、部门电话
员工编号决定了姓名、年纪、部门名称、部门电话等等信息。

  • 数据冗余:
    当同一个部门存在多个员工,部门电话、部门名称就存在数据冗余。

  • 更新异常
    当部门名称更新的时候,每条记录都需要去更新。

  • 插入异常
    当部门名称为空的时候,无法插入员工表

第三范式要求:员工表、部门表要分开

猜你喜欢

转载自blog.csdn.net/newbie_907486852/article/details/80725148