数据库基础知识 - 范式

# 范式
  设计关系数据库时,需要满足不同的规范,这些规范称为范式。范式的目的是为了消除数据冗余以及操作异常,使数据库结构清晰、简洁明了。
  
# 候选码
  候选码是一个或多个属性,它能够完全决定整个属性组。
  
# 主码
  如果一个属性组有多个候选码,可从中选取一个做为主码。
  
# 主属性
  包含在任何一个候选码中的属性,称为主属性。
  
# 非主属性
  不包含在任何一个候选码中的属性称为非主属性。
  
# 多值依赖
  假设X, Y, Z是U的子集,并且 Z=U - X - Y。如果在X上取特定值,在Y上存在多个值且这些值与Z无关,则称Y多值依赖于X,记为 X →→ Y。
  若 X→→Y, 且Z为空集,则称 X→→Y 为平凡的多值依赖;
  若 Z 不为空,则称 X→→Y 为非平凡的多值依赖;
  
# 函数依赖和多值依赖
  函数依赖是多值依赖的特殊情况;
  函数依赖是唯一确定的关系,例如课程号唯一确定课程名称;
  多值依赖却不能唯一确定,例如教师号可能多值依赖于课程号,因为多个老师可以上同一门课;
  
# 第一范式(1NF)
  1NF是指数据库表中的每一列都是不可分割的原子数据项,简而言之就是不能表中有表。
   
# 第二范式(2NF)
  2NF是指在1NF的基础上,消除非主属性对码的部分依赖(非主属性必须完全依赖于码)。
  例如:(学号, 课程号, 分数, 姓名)就不是2NF,因为姓名只是部分依赖于(学号,课程号)。
  # (学号, 课程号)是码
  
# 第三范式(3NF)
  3NF是指在2NF的基础上,消除非主属性对码的传递依赖(非主属性不能依赖于其他非主属性)。
  例如:(学号, 姓名, 学院编号, 学院名称)就不是3NF,因为有学号 -> 学院编号 -> 学院名称。
  # (学号)是码
  
# BCNF
  BCNF是指在3NF的基础上,要求每一个决定属性因素都必须包含码(主属性不能部分依赖于其它不包含它的码)。
  例如:(学号, 教师号, 课程号)就不是BCNF,因为有教师号 -> 课程号,但教师号不是码。
  # (学号, 教师号)和(学号, 课程号)都是码
  
# 第四范式(4NF)
  4NF是指在3NF的基础上,消除非平凡且非函数依赖的多值依赖(每个非平凡多值依赖X→→Y(Y不属于X),X都含有码)。
  例如:(课程名, 教师名, 参考书名)就不是4NF,因为 课程名 →→ 教师名,而课程名不是码。
  # (课程名, 教师名, 参考书名)是码
  
# 第五范式(5NF)(极少用到,这里不做介绍了)
  5NF是指在4NF的基础上,消除不是由候选码所蕴含的连接依赖。
  
# 规范化的步骤
  
  
# url
   http://idc.hust.edu.cn/~rxli/teaching/dbs/

你可能感兴趣的:(数据库基础知识 - 范式)