JAVA单排日记-2020/2/9-MySQL-三大范式

第一范式(1NF):每一列都是不可分割的基本数据项。简而言之,第一范式就是无重复的列
第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖
第二范式(3NF):在2NF基础上,任何非主性不依赖于其它非主性(在2NF基础上消除传递依赖,即属性不依赖于其它非主属性

JAVA单排日记-2020/2/9-MySQL-三大范式

  • 概念:
  1. 函数依赖:A→B,如果通过A属性(属性组)的值,可以确定唯一B属性的值,则称属性B依赖于属性A。

如:学号→姓名,通过学号可以确定唯一的姓名,则称属性姓名依赖于属性学号。
(学号,课程名称)→分数,通过学号和课程名称可以确定唯一的分数,,则称分数依赖于属性组(学号,课程名称)。

  1. 完全函数依赖:(A,C)→B,B属性值的确定要依赖于属性组的所有属性值A&&C

如:(学号,课程名称)→分数,通过学号和课程名称可以确定唯一的分数,单单通过学号,或者单单通过课程名称都不能确定一个分数,只有通过属性组的所有属性值学号和课程名称才能确定唯一的分数。

  1. 部分函数依赖:(A,C)→B,B属性值的确定要依赖于属性组的部分属性值

如:(学号,成绩)→姓名,通过属性组中的学号就能确定唯一的姓名

  1. 传递函数依赖:A→B,B→C,则称C传递函数依赖于A

如:学号→系名→系主任,系主任传递依赖于学号

  1. :如果在一张表中,某个属性/属性组,被其他所有属性所完全依赖,则称这个属性/属性组为该表的码。

如:上表中的码为(学号,课程名称)

  1. 主属性:码属性组中的所有属性
  2. 非主属性:表中其他属性

实例

JAVA单排日记-2020/2/9-MySQL-三大范式
第一范式:无重复的列
JAVA单排日记-2020/2/9-MySQL-三大范式
第二范式(2NF):在1NF基础上消除非主属性对主码的部分函数依赖

该表的码为(学号,课程名称),其中姓名、系名、系主任只依赖于属性组的学号,所以是部分函数依赖。2NF要求,在1NF基础上消除非主属性对主码的部分函数依赖

JAVA单排日记-2020/2/9-MySQL-三大范式
第二范式(3NF):在2NF基础上消除传递依赖,属性不依赖于其它非主属性

可以发现,系名→系主任,系主任依赖于系名,系名为非主属性

JAVA单排日记-2020/2/9-MySQL-三大范式