范式的理解

来源:互联网 发布:牛贝 微信淘宝客 编辑:程序博客网 时间:2024/05/18 03:13

关系数据库规范化:关系内部各属性之间的联系的合理化程度-----范式

1NF:

  • 每个属性都不可再分;
  • 1NF是所有关系型数据库的最基本要求.;
  • 但是仅仅符合1NF的设计,仍然会存在数据冗余过大。
符合第二范式的就一定符合第一范式

2NF:

2NF在1NF的基础之上,消除了非主属性对于码的部分函数依赖

函数依赖

属性X能够确定属性Y,则Y函数依赖于X,即X->Y(依赖于谁,谁在前面)。

  •  完全函数依赖(XF->Y)
  • 部分函数依赖(XP->Y)
  • 传递函数依赖(XT->Z)

码:

除 K 之外的所有属性都完全函数依赖于 K,则K是候选码,简称码。

注:可以超过一个属性(如果码只有一个属性,则不存在非主属性对码的部分依赖)

主属性:

包含在任何一个码中的属性称为主属性

判断2NF:

  • 第一步:找出数据表中所有的
  • 第二步:根据第一步所得到的码,找出所有的主属性
  • 第三步:数据表中,除去所有的主属性,剩下的就都是非主属性了。
  • 第四步:查看是否存在非主属性对码的部分函数依赖

例:


函数依赖关系:学号—>姓名,学号—>系名,系名—>系主任,(学号,课名)->分数

  • 码:(学号、课名)单独的学号或课名不能作为码,因为分数由学号、课名共同决定。
  • 主属性:学号,课名
  • 非主属性:姓名,系名,系主任,分数
对于(学号、课名)->姓名,非主属性“姓名”对码的部分函数依赖;
对于(学号、课名)->系名,非主属性“系名”对码的部分函数依赖;
不符合2NF的要求。


对于(学号、课名)->系名,系名->系主任,非主属性系主任对码的传递函数依赖;
也不符合3NF。

3NF

3NF在2NF的基础之上,消除了非主属性对于码的传递函数依赖

3NF是对字段冗余性的约束,即任何字段不能由其他字段派生,它要求字段没有冗余。

例1

假设表中有单价、数量、金额,那么金额是冗余字段,因为它能由(单价*数量)得到。但是,增加金额字段,可以提高查询速度。

例2:



  • 函数依赖集仓库名->管理员,管理员->仓库名,(仓库名,物品名)->数量
  • 码:(仓库名,物品名),(管理员,物品名)
  • 主属性:仓库名,管理员,物品名
  • 非主属性:数量
以上,不存在非主属性对码的部分函数依赖和传递依赖,属于3NF。

BCNF:

消除主属性对于码的部分函数依赖与传递函数依赖。

上例,主属性仓库名对码(管理员,物品名)的部分函数依赖。

模式分解

消除函数依赖

  • 选课(学号,课名,分数)
  • 学生(学号,姓名,系名)
  • 系(系名,系主任)



原创粉丝点击