数据库规范化

数据库的规范化

要去设计一个存放实体的表,先要了解一下数据库的关系规范化,减少不好关系存在,设计一个优良的模型。



第一范式

第一范式是指数据库的每一列都是不可分割的基本数据项,比如下面这种就是可以分割的情况。

学生(姓名,电话号码)

电话号码包括了 家用座机移动电话,因此可以被拆分为:

学生(姓名,家用座机,移动电话)

才满足第一范式要求,第一范式是要满足的最基本要求。



第二范式

第二范式要求必须存在主键,其他属性必须完全依赖主键存在,比如:

学生(学号,姓名,性别)

学号是每个学生的唯一标识,每个学生有不同的学号,每个学生的所有属性都依赖于学号,学号发生改变学生就要发生改变,姓名和性别也因此发生改变,所有此表满足第二范式。



第三范式

满足第二范式的情况下,所有的属性都不传递依赖于主键,满足第三范式。

学生借书情况(借阅编号,学生学号,书籍编号,书籍名称,书籍作者)

实际上书籍编号依赖于借阅编号,而书籍名称和书籍作者依赖于书籍编号,存在传递依赖关系,可以将书籍信息拆分称为另外一张表:

学生借书情况(借阅编号,学生学号,书籍编号)
书籍(书籍编号,书籍名称,书籍作者)

如此消除了传递依赖,满足第三范式要求。

BCNF

BCNF作为第三范式的补充,假设仓库管理关系表为StorehouseManage(仓库ID、存储物品ID,管理员ID,数量),一个管理员只能在一个仓库工作,一个仓库可以存储多种物品,这个数据库表存在如下决定关系:
(仓库ID,存储物品ID)–> (管理员ID,数量)
(管理员ID,存储物品ID)–>(仓库ID,数量)
所以,(仓库ID,存储物品ID)和(管理员ID,存储物品ID)都是其候选关键字,表中的唯一非关键字段为数量,它符合第三范式,但是存在如下决定关系。
(仓库ID)–> (管理员ID)
(管理员ID)–>(仓库ID)
即存在关键字段决定关键字段的关系,如果修改管理员ID,那么就必须进行逐一修改,所以其不符合BCNF范式。应该要单独新建一个表来存放其关系。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值