谈谈我对数据库三范式的字面理解

今天看了看《数据结构系统原理》(黄靖 主编)这本书(备考自考,否则以个人品味,直接豆瓣9.0以上,哈哈哈) 首先看下书上给出的定义:数据库

  • 第一范式(1NF):设 R 为任一给定关系,若 R 中的每一个列与行的交点处的取值都是不可再分的基本元素,则 R 为第一范式
  • 第二范式(2NF):设 R 为任一给定关系,若 R 为 1NF,且其全部非主属性都彻底函数依赖于候选关键字,则 R 为第二范式
  • 第三范式(3NF):设 R 为任一给定关系,若 R 为 2NF,且每个非主属性都不传递函数依赖关系于候选关键字,则 R 为第三范式

我的理解:数据结构

  • 第一范式(1NF):确保一张表的全部column(或字段)都是不可再分的,这一点我认同书上的说法,比较好理解(针对字段)
  • 第二范式(2NF):首先一张表至少定义一个主键或联合主键,其次确保非主键的字段只能根据主键(若是是联合主键,也只能是联合主键,不能是联合主键的子集)查询的到(针对主键)
  • 第三范式(3NF):确保每个非主键,不能具备主键的特性(主键的特性:可以根据它查询到惟一一条数据)(针对表)
    • 举个反例:学生表有学号(主键),姓名,年龄, 系号,系名,系主任
    • 首先存在传递依赖关系:学号->学生->系号->系名->系主任
    • 根据个人定义,该表存在非主键<系号>拥有主键特性,由于能够根据系号查询惟一的<系名>和<系主任>
    • 因此应当将<系名>和<系主任>移至系表,学生表可保留<系号>来索引系表
  • 第三范式(3NF):第一次应该理解错了。应该是非主键关键字,都必须直接依赖主键,不能经过传递依赖的方式依赖主键。

关于什么叫候选关键字,能够参考个人另外一篇博客:传送门函数

函数依赖:学生的姓名能够由学号决定,即姓名依赖学号。就像 y = f(x), 能够看出 y 的取值大小依赖于 x 的大小:传送门.net

综上,我的浅薄理解,如有错误请指出,核证后当即改正blog

相关文章
相关标签/搜索