当前位置: 首页 > news >正文

数据库系统概论|第六章:关系数据理论—课程笔记2

前言

前文我们介绍了规划化的基本概念,同时引入了关于规范化的相关定义与基本概念,低一级范式的关系模式,通过模式分解,可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化。本文将围绕范式展开讨论,分别介绍第一范式、第二范式、第三范式以及BC范式,首先讲解各个范式的基本概念,最后介绍关于各个范式之间的区别与联系。

第一范式(1NF)

定义:如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。

第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库,但是满足第一范式的关系模式并不一定是一个好的关系模式

第二范式(2NF)

定义:若R∈1NF,且每一个非主属性完全函数依赖于码,则R∈2NF。 【此处的码不仅可以是主码,还可以是候选码】【第二范式的核心要求在于消除部分函数依赖】

如上图所给出的S-L-C关系模式,其中候选码为(Sno,Cno),其中的函数依赖如箭头所示,这其中便存在着部分函数依赖,该关系模式中存在的核心问题便是:Sdept,Sloc部分函数依赖于码。

解决方法:S-L-C分解为两个关系模式,以消除这些部分函数依赖。

  • SC(Sno, Cno,  Grade)
  • S-L(Sno,  Sdept,  Sloc)

关系模式SC的码为(Sno, Cno);关系模式S-L的码为Sno。分解后,非主属性对码都是完全函数依赖。

 分解后如上图所示,此时的关系模式符合第二范式。但此时应该注意,将一个1NF关系分解为多个2NF的关系,并不能完全消除关系模式中的各种异常情况和数据冗余。

第三范式(3NF)

定义:在R<U, F> 中,若不存在这样的码X、属性组Y及非主属性Z(Z ⊄ Y),使得X→Y,Y→Z成立,Y不函数依赖于X,则称R<U, F> ∈ 3NF。【第三范式的核心要求在于消除传递函数依赖】

R∈3NF,则每一个非主属性既不部分依赖于码也不传递依赖于码

上图中展示的S-L-C关系模式中存在着传递函数依赖,即使进行模式分解后的S-L中仍然存在着传递函数依赖,即S-L⊄ 3NF,因此需要把S-L分解为两个关系模式,以消除传递函数依赖:

  • S-D(Sno, Sdept)
  • D-L(Sdept, Sloc)

S-D的码为Sno, D-L的码为Sdept。可见,分解后的关系模式S-D与D-L中,都不再存在传递依赖。因此,S-D(Sno, Sdept) ∈ 3NF;D-L(Sdept,  Sloc)∈ 3NF。但是注意,将一个2NF关系分解为多个3NF的关系后,仍然不能完全消除关系模式中的各种异常情况和数据冗余。

BC范式(BCNF)

定义:关系模式R<U, F>∈1NF,若X→Y且Y ⊄ X时X必含有码,则R<U, F> ∈BCNF。

BC范式的言外之意在于每一个决定属性因素都包含码。即在这个关系模式中,能够起到决定作用的属性组中必须包含码。

BCNF具有高度的概括性,一个满足BCNF的关系模式有:

所有非主属性对每一个码都是完全函数依赖

所有的主属性对每一个不包含它的码,也是完全函数依赖

没有任何属性完全函数依赖于非码的任何一组属性

在这其中,一定要重点理解第三点,就是说,在满足BC范式的关系模式中,非码的属性组无法起到决定作用!

若R∈BCNF ,则其一定属于3NF;相反,若R∈3NF ,则其不一定属于BCNF 。如果R∈3NF,且R只有一个由单属性构成的候选码,则R ∈BCNF。

小结

规范化理论是数据库逻辑设计的工具。它的目的在于尽量消除插入、删除异常,修改复杂,数据冗余等问题基本思想是通过模式分解逐步消除现有关系模式中,数据依赖中不合适的部分。

规范化的步骤可以总结如下:

相关文章:

  • 在Unity中制作拥有36年历史的游戏系列新作《桃太郎电铁世界》
  • 华硕服务器-品类介绍
  • Baklib全场景知识中台驱动效能跃升
  • spark分区器
  • 探索AI新领域:生成式人工智能认证(GAI认证)助力职场发展
  • 常用的应用层网络协议对比
  • SAP学习笔记 - 开发11 - RAP(RESTful Application Programming)简介
  • 鸿蒙Next API17新特性学习之如何使用新增鼠标轴事件
  • Hadoop-HDFS-Packet含义及作用
  • HarmonyOS NEXT 适配高德地图FlutterSDK实现地图展示,添加覆盖物和移动Camera
  • 【​​HTTPS基础概念与原理​】​​SSL/TLS协议演进史:从SSLv3到TLS 1.3
  • 基于Spring AI与Hugging Face TGI构建高效聊天应用:从配置到实践全解析
  • Java Garbage Collection: 深入解析自动内存管理机制
  • RabbitMQ 快速上手:安装配置与 HelloWorld 实践(一)
  • 77. 组合【 力扣(LeetCode) 】
  • 如何保证RabbitMQ消息的顺序性?
  • 【苍穹外卖-管理端部分-学习笔记】
  • ChromeDriver进程泄漏问题分析与最佳实践解决方案
  • unity 鼠标更换指定图标
  • 关于嵌入式系统的知识课堂(一)
  • 马上评|“为偶像正名”的正确做法是什么
  • 甘肃发布外卖食品安全违法行为典型案例:一商家用鸭肉冒充牛肉被罚
  • 在笔墨金石间,看胡问遂与梅舒适的艺术对话
  • 山东鄄城发生一起交通事故,造成4人死亡、2人受伤
  • 水豚“豆包”出逃已40天,扬州茱萸湾景区追加悬赏
  • 四姑娘山一游客疑因高反身亡,镇卫生院:送到时已很严重