您的位置:首页 > 数据库

数据库基础知识 - 范式

2013-08-03 18:57 113 查看
# 范式

设计关系数据库时,需要满足不同的规范,这些规范称为范式。范式的目的是为了消除数据冗余以及操作异常,使数据库结构清晰、简洁明了。

# 候选码

候选码是一个或多个属性,它能够完全决定整个属性组。

# 主码

如果一个属性组有多个候选码,可从中选取一个做为主码。

# 主属性

包含在任何一个候选码中的属性,称为主属性。

# 非主属性

不包含在任何一个候选码中的属性称为非主属性。

# 多值依赖

假设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/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: