Oracle 范式详解(3NF)

1 概述

1.1 规范化

  • 范式建模:关系型数据库设计的方法之一,就是设计满足适当范式的模式。
  • 范式级别 1NF < 2NF < 3NF < BCNF < 4NF < 5NF ,其中满足高级范式的一定满足低级范式,但反之不一定。
  • 实际开发中,并非范式级别越高越好,一般满足 3NF 即可,范式程度越高,其优缺点有
    • 优点:数据冗余减少,数据完整性维护简单
    • 缺点:查询变得复杂,需关联更多的表,可能影响查询效率

1.2 相关名词

中文名英文名解释
属性Attribute事务的特征。如:学生用学号、姓名、性别等属性来描述
Domain属性的取值范围。如:性别的域为 {男,女}
目或度DegreeR(D1, D2, …, Dn)。R 表示关系的名字,n 是关系的目的或度
key唯一标识 一个元组的属性或属性组,可以由 候选码 或 主码 构成
候选码Candiate Key唯一标识 一个元组的属性或属性组,最少 的属性集合
主属性Prime Attribute包含在 任何候选码 中的属性称为主属性。反之称为非主属性
主码Primary Key或称 主键,若一个关系中有多个候选码,则选定其中一个为主码
外码Foreign Key或称 外键

扩展:关于 码、主码、候选码 之间的关系图

在这里插入图片描述

1.3 函数依赖

  • 在一个关系 R 中,X 和 Y 是关系 R 的两个属性集合
  • 部分函数依赖
    • 定义:存在 X → Y,若 X 1 X^1 X1 是 X 的真子集,存在 X 1 X^1 X1 → Y,则称 Y 部分函数依赖于 X
    • 举例:参考图1,通过 AB 能得到 C,通过 A 也能得到 C
  • 完全函数依赖
    • 定义:存在 X → Y,若 X 1 X^1 X1 是 X 的真子集,但对每一个 X 1 X^1 X1 都有 X 1 X^1 X1 !→ Y,则称 Y 完全依赖于 X
    • 举例:参考图1,通过 AB 能得到 C,但是 A、B 单独得不出 C
  • 传递函数依赖
    • 定义:存在 X → Y(Y !→ X),Y → Z,则称 Z 传递依赖于 X
    • 举例:参考图2,通过 A 能得到 B,通过 B 能得到 C(B 不能得到 A),则可以通过 A 得到 C

在这里插入图片描述

2 范式分类

范式类型简称特征特性
第一范式1NF属性不可再分(无重复的列)原子性
第二范式2NF1NF + 消除 非主属性 对于 部分函数依赖(复合主键)唯一性
第三范式3NF2NF + 消除 非主属性 对于 传递函数依赖传递性
BC 范式BCNF3NF + 消除 主属性 对于 部分函数依赖 和 传递函数依赖(复合主键)唯一性 和 传递性

2.1 第一范式 1NF

所有的 关系型数据库 都满足 1NF,故不用纠结

反例:“电话” 列重复

姓名电话
张三15811112222
李四139666699990755-1234

正例:消除重复的列(拆分)

姓名电话座机
张三15811112222
李四139666699990755-1234

2.2 第二范式 2NF

主键列:【学号,课程】,关系模式如下
R1:学号,课程 → 学分
R2:课程 → 学分

反例:存在 “非主属性(学分)” 对于 “码(学号,课程)” 的 “部分函数依赖”

学号课程成绩学分
0001英语1203

正例:消除 …

学号课程成绩
0001英语120
课程学分
英语3

2.3 第三范式 3NF

主键列:【学号】,关系模式如下
R1:学号 → 课程 → 课程名称

反例:存在 “非主属性(课程号、课程名称)” 对于 “码(学号)” 之间的 “传递函数依赖”

学号课程号课程名
000101语文

正例:消除 …

学号课程号
000101
课程号课程名
01语文
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

鱼丸丶粗面

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

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

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

打赏作者

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

抵扣说明:

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

余额充值