软考高级: 数据库范式

一、概念

通俗示例

假设你在管理一个小型图书馆的书籍信息,有一本书的记录表格包含书名、作者、出版社、出版年份和分类。你希望这个表格能够尽量简洁,同时避免重复信息,方便查询。

通俗解释

在这里插入图片描述
1NF(第一范式)

  • 要求:数据表中的每一列都必须是原子值(即每一列的数据都是不可再分的单一值),不能包含列表、数组等复杂数据。

在这里插入图片描述

  • 举例:如果一本书有多个作者,在第一范式中,你不能把所有作者放在一个字段里(例如“作者”字段中填“张三, 李四”)。相反,应该为每位作者单独开设一行或创建一个独立的作者表。

2NF(第二范式)

  • 要求:在满足第一范式的基础上,表中的非主键字段必须完全依赖于主键,而不能部分依赖。
    在这里插入图片描述

  • 举例:如果你以“书名”和“作者”作为联合主键,但“出版社”只依赖于“书名”而不依赖于“作者”,这就违反了第二范式。为了解决这个问题,可以将“出版社”信息单独放在一个表中,避免部分依赖。

3NF(第三范式)

  • 要求:在满足第二范式的基础上,非主键字段之间不能存在传递依赖(即非主键字段不能依赖于另一个非主键字段)。

在这里插入图片描述

  • 举例:假设“出版社”字段还包含了“出版地点”这个信息。如果“出版地点”完全由“出版社”决定,那么“出版地点”就不应该放在这个表中,而应该移到“出版社”表中。这样可以避免“出版地点”依赖于“出版社”这个非主键字段。

BCNF(巴斯-科德范式)

  • 要求:在满足第三范式的基础上,表中的每个决定因素(即能够决定其他字段的字段)都必须是超键(即唯一确定一条记录的字段集合)。
  • 举例:假设一个表的联合主键是“图书馆分馆名”和“书名”,但“图书馆分馆名”也能决定“分馆地址”。在BCNF中,这样的表是不允许的,因为“图书馆分馆名”不是整个表的超键。要解决这个问题,可以将“分馆地址”移到另一个专门的表中。

二、例题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明明如月学长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值