数据库系统概论——函数依赖、码和范式(1NF、2NF、3NF、BCNF)详解

简介: 关系模式由五部分组成,即它是一个五元组:R(U,D,DOM,F)R(U, D, DOM, F)R(U,D,DOM,F)关系模式R(U,D,DOM,F)R(U, D, DOM, F)R(U,D,DOM,F)中,DDD和DOMDOMDOM与逻辑结构设计关系不大,因此,将关系模式简化为一个三元组:当且仅当UUU上的一个关系rrr 满足FFF时,rrr称为关系模式R(U,F)R(U, F)R(U,F)的一个。设R(U)R(U)R(U)是一个属性集UUU上的关系模式,XXX和YYY是UUU的子集。若对于R(U)R(

@[TOC]

概念回顾

关系模式由五部分组成,即它是一个五元组:
R(U,D,DOM,F)

  • R 关系名
  • U 组成该关系的属性名集合
  • D 属性组U中属性所来自的域
  • DOM 属性向域的映象集合
  • F 属性间数据的依赖关系集合

关系模式RU,D,DOM,F中,DDOM与逻辑结构设计关系不大,因此,将关系模式简化为一个三元组:

  • RU,F

当且仅当U上的一个关系r 满足F时,r称为关系模式RU,F的一个关系

1、函数依赖的定义

在这里插入图片描述

R(U)是一个属性集U上的关系模式,XYU的子集。

若对于R(U)的任意一个可能的关系rr中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称 “X函数确定Y” 或 “Y函数依赖于X”,记作XY

函数依赖说明:

  1. 所有关系实例均要满足
  2. 语义范畴的概念
  3. 数据库设计者可以对现实世界作强制的规定

1.1 平凡函数依赖和非平凡函数依赖

定义:
在关系模式R(U)中,对于U的子集XY

  • 如果X→Y,但YX则称X→Y是非平凡的函数依赖
  • 若X→Y,但YX, 则称X→Y是平凡的函数依赖

举例说明:
在关系SC(Sno, Cno, Grade)中

非平凡函数依赖

  • (Sno, Cno)——>Grade

平凡函数依赖

  • (Sno,Cno)——>Sno
  • (Sno,Cno)——>Cno

XY,则X称为这个函数依赖的决定属性组,也称为决定因素(Determinant)。
XYYX则记作X←→Y
Y不函数依赖于X,则记作XY

1.2 完全函数依赖和部分函数依赖

定义:
R(U)中,如果XY,并且对于X的任何一个真子集X,都有XY,则称YX完全函数依赖,记作XFY

XY,但Y不完全函数依赖于X,则称YX部分函数依赖,记作XPY

举例说明一下:

(Sno,Cno)FGrade是完全函数依赖;
(Sno,Cno)Sdept是部分函数依赖

因为在完全函数依赖中,任何一个真子集(Sno或者Cno)都不能单独地决定Grade,也就是SnoGradeCnoGrade
而在部分函数依赖中,任何一个真子集(Sno或者Cno)都可以单独地决定Sdept,也就是SnoSdeptCnoSdept

1.3 传递函数依赖

定义:
在R(U)中,如果XY(YX),YX,YZ, 则称ZX传递函数依赖。 记作:XZ

注:
如果Y→X,即X←→Y,则Z直接依赖于X,非传递依赖。

例: 在关系Std(Sno, Sdept, Mname)中(属性组分别为学号、系别、系主任名字),有:

  • Sno → Sdept,Sdept → Mname
  • Mname传递函数依赖于Sno

记作: Sno → Mname

2、码

在讲解码的概念之前,首先阐明一点,码即是键,键即是码,意思就是我们平时学习数据库进行表操作的时候,遇见的主键和外键就是主码和外码的意思,两者是同一概念,不要弄混。先给一个图大致理解下:
在这里插入图片描述

2.1 主码和候选码

定义:
KR<U,F>中的属性或属性组合。若KFU,则K称为R的侯选码(Candidate Key)。

若候选码多于一个,则选定其中的一个做为主码(Primary Key)。

2.1主属性与非主属性

  • 包含在任何一个候选码中的属性 ,称为主属性(Prime attribute)。
  • 不包含在任何码中的属性称为非主属性(Nonprime attribute)或非码属性(Non-key attribute)

2.2 全码

整个属性组U是码,称为全码(All-key)。

即当所有的属性共同构成一个候选码时,这时该候选码为全码。举例在关系模式R(教师,课程,学生)中,假如一个教师可以讲授多门课程,某门课程可以有多个教师讲授,学生可以听不同教师讲授的不同课程,那么,要区分关系中的每一个元组,这个关系模式R的候选码应为全部属性构成 (教师、课程、学生),即主码。

举例说明一下:
关系模式S(Sno_,Sdept,Sage)

  • 单个属性Sno是码,

SCSnoCno_Grade中,

  • (Sno,Cno)是码

关系模式RPWA
P演奏者 W作品 A听众

  • 一个演奏者可以演奏多个作品
  • 某一作品可被多个演奏者演奏
  • 听众可以欣赏不同演奏者的不同作品

此关系模式的码为(P,W,A),即全码(All-Key)

2.3 外部码

定义:
关系模式R 中属性或属性组X 并非R的码,但 X 是另一个关系模式S的码,则称 XR外部码(Foreign key),简称外码。

举例:
如在SCSnoCno_Grade中,Sno不是码,但Sno是关系模式SSno_SdeptSage的码,则Sno是关系模式SC的外部码。

3、范式

范式是符合某一种级别的关系模式的集合,在关系数据库中的关系必须满足一定的要求,而满足不同程度要求的关系为不同类型的范式

范式的种类:

  • (1NF)
  • (2NF)
  • (3NF)
  • BC(BCNF)
  • (4NF)
  • (5NF)

各种范式之间存在联系:
在这里插入图片描述

某一关系模式R为第n范式,可简记为RnNF
一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化 。

3.1 第一范式(1NF)

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

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

但是满足第一范式的关系模式并不一定是一个好的关系模式

举例:
[例] 关系模式 SLC(Sno,Sdept,Sloc,Cno,Grade)

  • Sloc为学生住处,假设每个系的学生住在同一个地方

函数依赖包括

  • (Sno,Cno)FGrade
  • SnoSdept
  • (Sno,Cno)PSdept
  • SnoSloc
  • (Sno,Cno)PSloc
  • SdeptSloc

SLC的码为(Sno,Cno)

SLC满足第一范式。

非主属性Sdept和Sloc部分函数依赖于码(Sno, Cno)

分解前的关系模式SLC
在这里插入图片描述
但是SLC不是一个好的关系模式,会产生以下问题:

  • (1) 插入异常
  • (2) 删除异常
  • (3) 数据冗余度大
  • (4) 修改复杂

原因:==Sdept、 Sloc部分函数依赖于码。==

解决方法:

  • SLC分解为两个关系模式,以消除这些部分函数依赖

    • SCSnoCnoGrade
    • SLSnoSdeptSloc
  • 关系模式SC的码为SnoCno
  • 关系模式SL的码为Sno
  • 这样非主属性对码都是完全函数依赖

在这里插入图片描述

3.2 第二范式(2NF)

定义:
R1NF,且每一个非主属性完全函数依赖于码,则R2NF

例:

  • SLC(Sno,Sdept,Sloc,Cno,Grade)1NF
  • SLC(Sno,Sdept,Sloc,Cno,Grade)2NF

    • SCSnoCnoGrade2NF
    • SLSnoSdeptSloc2NF

采用投影分解法将一个1NF的关系分解为多个2NF的关系,可以在一定程度上减轻原1NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。

但将一个1NF关系分解为多个2NF的关系,并不能完全消除关系模式中的各种异常情况和数据冗余。

3.3 第三范式(3NF)

定义:

  • 关系模式R<UF>中若不存在这样的码X、属性组Y及非主属性ZZY, 使得XYYZ成立,YX,则称R<UF>∈3NF
  • R3NF,则每一个非主属性既不部分依赖于码也不传递依赖于码

例:2NF关系模式SL(Sno,Sdept,Sloc)中的函数依赖关系:

  • SnoSdept
  • SdeptSno
  • SdeptSloc

可得:
SnoSloc,即SL存在非主属性对码的传递函数依赖,SL3NF

函数依赖图:

在这里插入图片描述
解决方法:
采用==投影分解法==,把SL分解为两个关系模式,以消除传递函数依赖:

  • SDSnoSdept
  • DLSdeptSloc
  • SD的码为SnoDL的码为Sdept

分解后的关系模式SDDL中不再存在传递依赖

采用投影分解法将一个2NF的关系分解为多个3NF的关系,可以在一定程度上解决原2NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。

将一个2NF关系分解为多个3NF的关系后,仍然不能完全消除关系模式中的各种异常情况和数据冗余。

3.4 BC范式(BCNF)

定义:
关系模式R<UF>∈1NF,若XYYXX必含有码,则R<UF>∈BCNF
等价于:每一个决定属性因素都包含码

若R∈BCNF

  • 所有非主属性对每一个码都是完全函数依赖
  • 所有的主属性对每一个不包含它的码,也是完全函数依赖
  • 没有任何属性完全函数依赖于非码的任何一组属性

在这里插入图片描述
如果R∈3NF,且R只有一个候选码
在这里插入图片描述

注意:如果一个关系模式R属于BCNF,则一定是3NF,但是一个关系模式R如果属于3NF,则不一定是BCNF

[例] 关系模式SSnoSnameSdeptSage

  • 假定S有两个码SnoSname
  • S3NF
  • SBCNF

[例]在关系模式STJSTJ中,S表示学生,T表示教师,J表示课程。
函数依赖:

  • (SJ)T(ST)JTJ

-(SJ)(ST)都是候选码

在这里插入图片描述

  • STJ3NF

    • 没有任何非主属性对码传递依赖或部分依赖
  • STJBCNF

    • T是决定因素,在BCNF中所有的主属性对每一个不包含它的码,也是完全函数依赖,但T不包含码。STJ显然不满足。

解决方法:将STJ分解为二个关系模式:
ST(ST)BCNFTJ(TJ)BCNF

在这里插入图片描述

没有任何属性对码的部分函数依赖和传递函数依赖。

其它数据库系统概论详细请看:

  1. 数据库系统概论①——数据库系统基本概念
  2. 数据库系统概论②——关系数据库基础
  3. 数据库系统概论——关系代数详解
\textcolorblue <br/>
👍 \textcolorgreen <br/>
⭐️ \textcolorgreen <br/>
✏️ \textcolorgreen <br/>
目录
打赏
0
0
0
0
109
分享
相关文章
数据库设计三范式
三范式设计的最终目的都是为了减少我们的工作量,所以说,尽管三范式是一种很好的指导规范,但在实际应用中,我们也不需要太局限在三范式中,更多的是应该从项目中出发,设计出合理的表结构。
数据库SQL函数应用技巧与方法
在数据库管理中,SQL函数是处理和分析数据的强大工具
|
4月前
|
数据库设计三范式
数据库设计三范式
54 0
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
795 0
关系型数据库设计范式:深入理解与实践
【7月更文挑战第20天】关系型数据库设计范式是数据库设计中的重要指导原则,它通过一系列规范来减少数据冗余、提高数据一致性和优化查询性能。在实际应用中,我们应该根据具体需求和数据特点,灵活选择和应用不同的范式级别,以构建高效、可靠和可扩展的数据库系统。同时,也需要注意范式设计带来的挑战和限制,根据实际情况进行权衡和调整。
数据库范式与设计原则
数据库范式与设计原则
118 0

热门文章

最新文章