数据库范式

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

第二范式:在第一范式的基础上,对于多关键字表,非主属性不能部分依赖于主键(比如只依赖某个主键);对于单关键字表,不存在部分依赖情况,不符合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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值