关系数据库:概念理解 —— 范式

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/credolhcw/article/details/54767548

范式


第一范式(1NF):分量不可分割

比如关系 R(学号,年级班级)就不属于1NF,因为分量‘年级班级’可以再分为‘年级’、‘班级’。

第二范式(2NF):非主属性必须完全依赖于主键

当主键仅有一个码的时候,满足第一范式的关系必满足第二范式。当主键包含两个以上的码时,就可能会不满足第二范式,即存在部分函数依赖是不满足第二范式。

比如关系 R(学号,课程号,成绩,性别),主键为(学号,课程号),但是当确定学号时就能确定‘性别’,因此‘性别’部分函数依赖于主键,故该关系不满足第二范式。

第三范式(3NF):满足2NF,且不存在传递依赖

比如关系(学号,学院号,教学楼编号),假设‘教学楼编号’函数依赖于‘学员号’,确定了‘学号’就能确定该学生的‘学院号’。在这个关系中存在‘教学楼编号’对‘学号’的传递依赖,所以不满足第三范式。

BCNF(Boyce Codd Normal Form):满足3NF,不允许出现,主键的一部分被主键的另一部分或非主键的一部分决定

网友们通常喜欢用的一个例子:

假设仓库管理关系表为StorehouseManage(仓库ID, 存储物品ID, 管理员ID,
数量),且有一个管理员只在一个仓库工作;一个仓库可以存储多种物品。这个数据库表中存在如下决定关系:

   (仓库ID, 存储物品ID) →(管理员ID, 数量)

   (管理员ID, 存储物品ID) → (仓库ID, 数量)

所以,(仓库ID, 存储物品ID)和(管理员ID,
存储物品ID)都是StorehouseManage的候选关键字,表中的唯一非关键字段为数量,它是符合第三范式的。但是,由于存在如下决定关系:

   (仓库ID) → (管理员ID)

   (管理员ID) → (仓库ID)

也就是说,(仓库ID, 存储物品ID)这个主键中的仓库ID可以被管理员ID决定,同样(管理员ID,
存储物品ID)中管理员ID也可以被仓库ID决定,所以此表应该拆分。

转自:http://blog.csdn.net/allenlsy/article/details/5356899

猜你喜欢

转载自blog.csdn.net/credolhcw/article/details/54767548