数据库范式(一文搞懂,超简单)

一.概念

1.码:用来区分不同元组(行)。码可以确定一行记录。

2.超码:{学号},{学号,姓名},{学号,年龄},{学号,姓名,年龄},{姓名,年龄}。

3.候选码:不可在拆分的超码。列如:{学号},{姓名,年龄}。不是候选码{学号,姓名},因为可以在拆分{学号}。

4.主码:程序员定的,只存在一个主码。通常说的主键(或身份证号或学号)。

二.范式

一.第一范式(1NF):属性不可再分

for example:

1.1反例:

编号

产品

进货

销售

备注

数量

单价

数量

单价

1.2改进:

编号

产品

进货数量

进货单价

销售数量

销售单价

备注

二.第二范式(2NF):完全符合1NF,并且非主属性完全依赖主属性(消除了非主属性对码的部分函数依赖)

1.如果码是多个属性构成(学生,课程)->教材,非主属性(教材)可以单独依赖于课程(课程->教材),这就违反了2NF。这就是说非主属性(教材)对码(学生,课程)s的部分函数依赖。

for example:

学生    课程      老师  老师职称   教材      教室   上课时间

小明  一年级语文(上)   大宝  副教授  《小学语文1》   101    14:30

2.违反2NF的后果:对教材的增删改都会造成影响。当校长说开门新课叫“微积分”,然后增加一本新教材《大学数学》时,学生信息还没有选课,怎么办?

3.改进:

1.学生表

学生

课程

老师

老师职称

教师

上课时间

2.课程表

课程

教材

三.第三范式(3NF):完全符合2NF,并且消除了非主属性对码的传递函数的依赖

for example:

学生表:

学生

课程

老师

老师职称

教室

1.如果学生表,因为(学生,课程)->老师,老师->老师职称,非主属性(老师职称)对码(学生,课程)存在传递函数依赖关系,所以不符合3NF。

2.后果:删除老师信息,学生记录会丢失。插入一个尚无学生的新老师,学生,课程不会null.

3.改进:

学生表

学生

课程id

老师id

教室

课程表

课程

教材

老师表

老师

老师职称

四.BCNF:完全符合2NF,3NF,并消除了主属性对码存在的部分函数依赖或传递依赖。

for example:

一.条件

1.某公司有若干个仓库

2.每个仓库只能有一名管理员,一名管理员只能在一个仓库中工作

3.一个仓库中可以存放多种物品,一个物品也可以存放在不同的仓库。每种物品在每个仓库中都有对应的数量。

二分析:

码:(仓库名,物品名),(管理员,物品名)

主属性:仓库名,管理员,物品名

非主属性:数量

由于:(仓库名,物品名)->管理员,管理员对码(仓库名,物品名)存在部分函数依赖。同样(管理员,物品名)->仓库名。违反了BCNF.

三.表改进:

3.1物品表

仓库名

物品名

数量

3.2仓库表

仓库名

管理员名

四.业务上改进:

4.1如果仓库换管理员了,只需要改仓库表,不需要把以前的物品表数据都更新。

4.2如果物品删除了,仓库和管理员还存在关系。

4.3如果增加一个仓库,仓库中还没有商品,只需增加仓库表。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值