- 概述
- . 是关系模式满足不同程度的规范化要求的标准,如建材的甲醛标准
- . 满足最低程度要求的范式属于第一范式,简称1NF;在第一范式中进一步满足一些要求的关系属于第二范式,简称2NF;依次类推
- . 对关系模式的属性间的函数依赖加以不同的限制就形成了不同的范式。这些范式是递进的,即如果一个关系是1NF的,它比不是1NF的关系要好;同样,2NF的关系比1NF的关系要好等等
- . 范式越高、规范化程度越高,关系模式就越好,数据库冗余越小
- 1NF ⊃ 2NF ⊃ 3NF ⊃ BCNF ⊃ 4NF ⊃ 5NF
-
. 没有冗余的数据库未必是最好的数据库, 有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据. 一般说来,数据库只需满足第三范式3NF就行了. 尽量将依赖降低之最少. 尽量为每一个实体单独创建关系,通过外键和其它实体发生联系
- 1NF
- . 关系模式R的每一个分量|每个列与行的交点处的取值,都是不可再分的数据项|原子性
- . 属性值只有原子值 | 不可分解;强调的是列的原子性,即列不能够再分成其他的几列
- . 存在问题:数据冗余、删除异常、更新异常、插入异常
- . 级别最低
- . 我们使用的Excel表单基本上都不符合1NF
-
常见的可分解字段 字段 说明 工资 多个项目 家庭成员 多个成员 高级职称 副教授、教授 - 2NF
- . 每一个非主属性都完全依赖于 任何 一个候选码;即:消除非主属性对候选码的 部分 依赖
- . 只有在复合属性作主键时,才可能出现不满足2NF的情况
- . 2NF要求:使用唯一主键,不能使用组合键|联合主键|复合键
- . 2NF要求:一个表只描述一件事情
- . 某个关系R中,AB是候选码,C是非主属性;如A → C,B → C,则存在非主属性C是对候选码的部分依赖,R ∉ 2NF
- . 如果仅有A → C,则C完全依赖候选码A,R ∈ 2NF
- 3NF
- . 消除非主属性对候选码的 传递 依赖,即: 非主属性之间不存在函数依赖
- . 如果非主属性存在函数依赖,而非主属性又完全依赖候选码,所以就存在非主属性到主属性之间的函数传递
- . 表中的每一列只与主码直接相关而不是间接相关 | 表中的每一列只能依赖于主码
- . 断开传递链
- . 某个关系R中,AB是候选码,C、D是非主属性;如AB → C,C → D,则存在非主属性D是对候选码的传递依赖,R ∉ 3NF
-
原始设计 字段名 说明 实例 orderId 订单编号 101 roductId 产品编号 1001 count 数量 100 price 单价 80 total 金额 8000 优化设计 字段值 说明 实例 orderId 订单编号 101 roductId 产品编号 1001 count 数量 100 price 单价 80 total 金额 8000 - 巴斯-科德范式 BCNF
- . 多值依赖
- . 是第三范式的补充,且要满足:
- . 主码之间不存在依赖|主码独立
- . 在3NF的基础上消除主属性对于码的部分与传递函数依赖
- . 给出R(A,B,C),F{AB → C},R ∈ BCNF
-
. 2NF、3NF关注的重点都是非主属性的函数依赖. BCNF关注的是主属性的函数依赖. 如果没有非主属性,即全部都是主属性,则至少是3NF. 判断某个属性是否存在依赖或是说明依赖,只需要看该属性在右部的情况
- 范式识别
-
找候选码区分主属性、非主属性找非主属性的部分函数依赖;如果主码是单属性,那只需要判断是否完全依赖;组合属性才需要判断部分依赖找非主属性的传递函数依赖判断第几范式
- 关系模式R(A1,A2,A3,A4,A5,A6),函数依赖集F={A1→A3, A1A2→A4, A5A6→A1, A3A5→A6, A2A5→A6},其中,()主键,R为()。
-
A1A4A2A5A3A4A4A5不存在传递依赖,是1NF不存在传递依赖,是2NF存在传递依赖,是3NF每个非主属性完全依赖主键,是2NF
-
A4在R。肯定不是,排除ACD,∴ B;A2在L,一定是,进一步确定D
- 已知R<U,F>,U={A,B,C},F={AC→B,B→C},求候选码并判断其范式
-
AABABC以上都不是1NF2NF3NFBCNF
-
A在L部,A肯定在。BC都LR,可能是。只能是AB或AC,所以选B[实际上AC也是候选码,不存在非主属性,应该是3NF+]主属性C部分依赖于候选码,所以不是BCNF,是3NF
- 已知R<U,F>,U={A,B,C},F={B→C,B→A,A→BC},判断其范式
-
直观的去分析:B能推出A、C,所以B是候选码;同样,A可以推出BC,A也是候选码C在右部,不是候选码,只能是A、BB可以推出A,还可以推出C,所以B是候选码同理,A也可以推出BC,所以A也是候选码主属性是AB,非主属性是C非主属性C完全于候选码B,至少是3NF候选码A、B都是单属性,不存在部分依赖,同样也不存在传递依赖,∴ R ∈ BCNF
- 已知R<U,F>,U={A,B,C},F={A→C,A→B},判断其范式
-
BCNF模式合并后,A→BC,只有一个依赖,肯定是BCNF另:A是主码;主码和非主码之间都没有部分和传递,∴ BCNF
- 已知R<U,F>,U={A,B,C,D},F={A→C,BC→D},判断其范式
-
候选码是ABAB是主属性;CD是非主属性非主属性C依赖于A,是部分依赖于候选码AB,所以是1NF
模式分解
- 说明
- . 将一个低级范式的关系模式转换为若干个高级范式的关系模式的过程,称为规范化
- . 通过分解后的模式达到第几范式来评价模式规范化的程度
- . 拆表:利用投影分隔列
- 谁跟你好,就带谁走
- . 基本过程
-
找候选码找非主属性消除非主属性对候选码的部分依赖→2NF消除非主属性对候选码的传递依赖→3NF消除主属性对候选码的传递依赖→BCNF
- S-L-C(Sno,Sdept,Sloc,Cno,Grade),Sloc是学生的宿舍,一个系的学生住一起
-
求码
S-L-C(Sno,Cno)
标记主属性和非主属性主属性:Sno,Cno
非主属性:Sdept,Sloc,Grade
列出函数依赖(Sno,Cno) → Grade
Sno → Sdept
Sno → Sloc
Sdept → Sloc
判断范式非主属性 Sdept,Sloc部分依赖候选码|没有完全依赖于候选码:依赖Sno,但不依赖Cno
∴ 不属于2NF,属于1NF
模式分解:S-L-C(Sno,Sdept,Sloc,Cno,Grade)S-C(Sno,Cno) → Grade ∈ 2NF
S-L(Sno,Sdept,Sloc) ∈ 2NF
继续判断S-L(Sno,Sdept,Sloc) 存在传递依赖
模式分解:S-L(Sno,Sdept,Sloc)S-D(Sno,Sdept) ∈ 3NF
D-L(Sdept,Sloc) ∈ 3NF