数据库-2

SQL 第一范式、第二范式、第三范式、BCNF

第一范式 1NF

要求:每一个分量必须是不可分的数据项。

特点:

  1. 有主键,且主键不能为空。
  2. 字段不能再分。

示例:(以下例子 不满足 第一范式)

1
2
3
4
/*学号      年龄        信息*/
Sno Sage Sinfo
1001 19 陕西省西安市,电话:10086
1001 20 陕西,宝鸡

主键:Sno

不满足原因:

  1. 主键重复。
  2. Sinfo字段可以再分。

第二范式 2NF

要求:在范式一的基础上,且每一个非主属性完全函数依赖于码。

特点:

  1. 满足第一范式。
  2. 表中的每一个非主属性,必须完全依赖于本表码。
  3. 只有当一个表中,主码由两个或以上的属性组成的时候,才会出现不符合第二范式的情况。

示例:(以下例子 不符合 第二范式)

1
2
3
/*学号    课程号     得分    课程名*/
Sno Cno Score Sname
1001 001 99 数据库

主键: Sno,Cno

不满足原因:Sname不完全依赖于码,课程名部分依赖于码Cno。

第三范式 3NF

要求:在满足第二范式的基础上,且每一个非主属性既不部分依赖于码也不传递依赖于码。

特点:

  1. 满足第二范式。
  2. 非主属性不能传递依赖于码。

示例:(以下例子 不符合 第三范式)

1
2
3
/*学号     系别     系主任*/
Sno Sdept Shead
1001 计算机系 张三

主键:Sno

不满足原因:Shead传递依赖于码,Sno->Sdept->Shead,可得Sno->Shead。

BCNF

要求:在满足第三范式的基础上,且不允许主键的一部分被另一部分或其它部分决定。

特定:

  1. 满足第三范式。
  2. 所有非主属性对每一个码都是完全函数依赖。
  3. 所有的主属性对每一个不包含它的码,也是完全函数依赖。
  4. 没有任何属性完全函数依赖于飞码的任何一组属性。

示例:(以下例子 不符合 第BCNF范式)

1
2
3
/*学生       老师        课程*/
Stu Teacher Course
张三 李开复 数据库

假设:每个老师只教一门课。

候选码:

  • (Stu,Teacher)->Course
  • (Stu,Course)->Teacher
    这两个码由两个属性组成,而且它们是相互交叉的,所以不存在传递依赖,所以为3NF。

但是由于:Teacher->Course,(主键的一部分被另一部分决定),所以不符合BCNF。

参考链接

  1. 知乎回答-刘慰:解释一下关系数据库的第一第二第三范式?
作者

Arthur LI

发布于

2017-09-24

更新于

2023-03-25

许可协议

评论