数据库的六个范式

首先:清概念,键,就是码,一个意思

然后:超键/超码,候选键/候选码,主键/主码

超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键
候选键(candidate key):不含有多余属性的超键称为候选键
主键(primary key):用户选作元组标识的一个候选键程序主键

比如以下四个属性(假设无重名):身份证 姓名 性别 年龄

身份证唯一,所以是一个超键
(身份证,姓名)唯一,所以是一个超键
(身份证,姓名,性别)唯一,所以是一个超键
(身份证,姓名,性别,年龄)唯一,所以是一个超键
姓名唯一,所以是一个超键
(姓名,性别)唯一,所以是一个超键
(姓名,性别,年龄)唯一,所以是一个超键

身份证唯一且无多余属性,所以是一个候选键
姓名唯一且无多余属性,所以是一个候选键

我作为用户,在两个候选键中选一个作为主键,例如身份证,那身份证就是主键

主属性:候选键中的属性

数据库的六个范式(关键是第三范式与BC范式)

第一范式:每一个关系r的属性都是原子项,不可分割。

例如:姓名 电话……那么电话可能有家庭电话与手机,不符合

第二范式:R是1NF,且每一个非主属性完全依赖于候选建。

例如:学生ID,课程ID,成绩……成绩依赖于候选键(学生ID,课程ID),符合

例如:学生ID,课程ID,成绩,学生姓名……学生姓名仅依赖于主属性学生ID,存在部分依赖,不符合

第三范式:R是2NF,且关系模式R(U,F)中的所有非主属性对任何候选关键字都不存在传递依赖

例如:员工ID,主管ID,主管年龄……主管年龄依赖于主管ID,主管ID依赖于员工ID,不符合

BCNF实际上是在第三范式的基础上,进一步消除了主属性的传递依赖,注意第三范式是主从间传递,BC是主属性间传递

例如:仓库ID, 存储物品ID, 管理员ID, 数量……(仓库ID) → (管理员ID),(管理员ID) → (仓库ID),不符合

第四范式:要求把同一表内的多对多关系删除。当一个表中的非主属性互相独立时(3NF),这些非主属性不应该有多值。

例员工ID,员工电话,员工手机……电话与手机相互独立,可能有多个电话,多个手机,故须变成员工ID-号码-号码种类

第五范式:从最终结构重新建立原始结构

例如:员工ID,员工电话,员工手机(假设电话与手机都唯一)……必须拆成员工ID-员工电话 和 员工ID-员工手机

猜你喜欢

转载自blog.csdn.net/cj1064789374/article/details/88675115