0%

数据库范式

数据库范式

在说范式的规范之前先说明一下有哪些函数依赖

  • 完全函数依赖
    • X->Y,并且X的任何真子集都无法决定Y,那么Y对X完全函数依赖
    • 如 (学号,课程号)->成绩,学号或者课程号都无法单独决定成绩,是完全函数依赖的
    • 如果不是复合候选码,则一定是完全函数依赖
  • 部分函数依赖
    • X->Y,但X的其一真子集可以决定Y,那么Y对X部分函数依赖
    • 如 (学号,身份证号)->姓名,学号或者身份证号都可以单独确定姓名,是部分函数依赖
  • 传递依赖
    • X->Y,Y->Z,那么Z对X传递依赖

候选键:可以唯一标识所有属性的就是候选键,主键是从候选键中选出来的一个

主属性:候选键中包含的属性就是主属性

规范化理论

规范化理论

范式

第一范式1NF(属性原子性)

字段具有原子性,保证字段不可分

数据库表中的所有字段都是单一属性,不可再分

第二范式2NF(消除部分函数依赖)

在第一范式的基础上,非主属性完全依赖于候选键

数据库表每一行必须被唯一标识

  • 必须有一个主键
  • 没有包含在主键的列必须完全依赖于主键,且不能只依赖于主键的一部分

单属性候选键至少满足2NF

第三范式3NF(消除传递函数依赖)

在第二范式的基础上,消除非主属性对候选键的传递依赖

每一个非主属性都不传递依赖于候选键,也就是说数据表中不包含已在其他表中已包含的非主键信息,信息不冗余

没有非主属性,至少满足3NF

BCNF(消除主属性对候选码的部分和传递依赖)

设R是一个关系模式,F是它的依赖集,R属于BCNF当且仅当其F中每个依赖的决定因素必定包含R的某个候选码,也就是主属性不依赖于候选键

数据库表中不存在任何字段对任何一候选关键字段的传递依赖

  • 所有非主属性对每一个码都是完全函数依赖
  • 所有的主属性对于每一个不包含它的码,也是完全函数依赖
  • 没有任何属性完全函数依赖于非码的任意一个组合

如果达到3NF会造成 数据冗余、插入异常、修改异常、删除异常的问题

欢迎关注我的其它发布渠道