数据库三大范式简单理解

范式理解

建表原则

符合一范式的基础上,建立二范式。三范式根据实际要求,不一定必须符合

第一范式

要求:每个属性都不可以再分
在这里插入图片描述

例子:
在这里插入图片描述
存在问题:
1、 数据沉余:如姓名,系名,系主任,重复了很多次
2、 插入异常:如果我新建一个计算机系,系主任是小张,学生还没入学,那么id,姓名,课名等字段无法设置
3、 删除异常:假如小明毕业,删除小明的信息,那么小明所在系也会被删除。
4、 修改异常:如果小明转专业,那么我得把小明的系名和系主任都改了,并且得多次修改,因为小明出现了三次

第二范式

要求:在一范式的基础上,消除了非主属性对码的依赖。
码:在一个表中,可以决定一个元素的属性集合(id和课名一旦确定,那么所有的属性都可以确定)
在这里插入图片描述
主属性:码就是主属性
非主属性:除主属性之外的属性
函数依赖:y=f(x);x的值决定y,y依赖x。如:1、id确定之后,姓名,系别,系主任都可以确定了。2、系名确定了,系主任就确定。
完全函数依赖:x1,x2等决定y。如:id和课名可以决定分数。那么分数就是完全依赖于id和课名。
部分函数依赖:y依赖于x,但是y不完全依赖于x。如用id和课名去决定姓名。姓名由id就直接确定了,所以姓名不完全依赖与id和课名这两个字段

判断是否为二范式

数据表中是否存在非主属性对码的部分函数依赖。若存在,则数据表最高只符合一范式,若不存在,则符合二范式。
步骤;

  1. 找出数据表中所有的码(id,课名);
  2. 根据第一步所得到的码,找出所有的主属性。id和课名
  3. 数据表中,除去所有的主属性,剩下的就是非主属性。
  4. 查看是否存在非主属性对码的部分函数依赖。
    例子:
    在这里插入图片描述
    存在问题:
  5. 数据沉余:解决
  6. 插入异常:如果我新建一个计算机系,系主任是小张,学生还没入学,那么id,姓名,课名等字段无法设置
  7. 删除异常:假如小明毕业,删除小明的信息,那么小明所在系也会被删除。
  8. 修改异常:如果小明转专业,那么我得把小明的系名和系主任都改了,并且得多次修改,因为小明出现了三次。解决

第三范式

在二范式的基础上,消除了非主属性对码的传递函数依赖。
在这里插入图片描述
传递函数依赖:y依赖于x,z又依赖于y,那么z依赖于x。如:系别依赖于学号,系主任依赖于系别,那么系主任也依赖于学号。
例子:
在这里插入图片描述

问题:

  1. 插入异常:如果我新建一个计算机系,系主任是小张,学生还没入学,那么id,姓名,课名等字段无法设置 解决
  2. 删除异常:假如小明毕业,删除小明的信息,那么小明所在系也会被删除。 解决

猜你喜欢

转载自blog.csdn.net/zhang19903848257/article/details/104855438