数据库范式

xiaoxiao2021-02-28  103

第一范式:列不可分。每一列都是不可分割的基本数据项。

第二范式:在第一范式的基础上,对于多关键字表,非主属性不能部分依赖于主键(比如只依赖某个主键);对于单关键字表,不存在部分依赖情况,不符合2NF的设计容易产生数据冗余。

比如一张表是(A, B, C, D),其中(A, B)是主键,如果存在B->C就违反了2NF,因为C只需要主键的一部分就可以被决定了

a.反例:

StudyNo

Name  

Sex  

Email

Phone

ClassNo

ClassAddress

20040901     

john        

Male     

Email:kkkk@ee.net

222456

200401

#12A

20040902     

mary        

famale   

email:kkk@fff.net

123455

200402

#8A

主键是studyNo和classNo。classAddress部分依赖主键classNo,需要变为两个表。

b.正解:

学生表

StudyNo

Name  

Sex  

Email

Phone

20040901     

john        

Male     

Email:kkkk@ee.net

222456

20040902     

mary        

famale   

email:kkk@fff.net

123455

教室表

ClassNo

ClassAddress

200401

#12A

200402

#8A

 

第三范式:在第二范式的基础上,非关键字段对任一主键不能传递函数依赖。非主键列之间不能存在依赖关系,必须直接依赖主键,不能传递依赖。即不能存在:非主键列A依赖于非主键列BB依赖于主键的情况。

a.反例:

StudyNo

Name  

Sex  

Email

Phone

BounsLevel

Bouns

20040901     

john        

Male     

Email:kkkk@ee.net

222456

优秀

¥1200

20040902     

mary        

famale   

email:kkk@fff.net

123455

¥800

主键是StudyNo,只有一个主键StudyNo,而且符合第二范式。但是非主键列bounsLevel和bouns存在依赖关系。

b.正解:

学生表

StudyNo

Name  

Sex  

Email

Phone

BounsNo

20040901     

john        

Male     

Email:kkkk@ee.net

222456

1

20040902     

mary        

famale   

email:kkk@fff.net

123455

2

奖学金等级表

BounsNo

BounsLevel

Bouns

1

优秀

¥1200

2

¥800

BCNFBoyce-Codd:在第三范式的基础上,不允许出现主键的一部分被另一部分或其他决定。即不存在关键字段决定关键字段的情况。

a. 反例:StoreHouseManager

StoreHouseID(仓库ID)

GoodsID(商品ID)

ManagerID(管理员ID)

GoodsNum(商品数量)

001

20130104

1

200

主键是

(仓库ID, 商品ID) →(管理员ID, 数量) 或

(管理员ID, 商品ID) → (仓库ID, 数量),

(仓库ID, 商品ID)和(管理员ID,商品ID)都是StorehouseManage的候选关键字,表中的唯一非关键字段为数量

满足第三范式。但是,存在关键字段决定关键字段情况。

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

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

b.  正解:

仓库管理表

StoreHouseID(仓库ID)

GoodsID(商品ID)

GoodsNum(商品数量)

001

20130104

200

仓库表

StoreHouseID(仓库ID)

ManagerID(管理员ID)

001

1

 

转载请注明原文地址: https://www.6miu.com/read-60677.html

最新回复(0)