【数据库设计】规范化设计理论之函数依赖(2)

函数依赖

多值依赖

数学定义是:设R(U)是属性集U上的一个 关系模式。X,Y,Z是U的 子集,并且Z=U-X-Y。关系模式R(U)中多值依赖X→→Y成立, 当且仅当对R(U)的任一关系r,给定的一对(x,z)值有一组Y的值,这组值仅仅决定于x值而与z值无关。

假如Z是空集,那么X→→Y就是平凡的多值依赖,反之则是非平凡的多值依赖。

用一个例子来理解:有关系R(仓库号,仓库管理员,库存产品号),

  • X:仓库号
  • Y:仓库管理员
  • Z:库存产品号

假设每一个产品只能放在一个仓库里面,但是一个仓库却可以有多个仓库管理员,因此给定一对<库存产品号,仓库号>有一组仓库管理员的值,而这组仓库管理员的值仅仅决定于仓库号,而与库存管理员无关。比如一对<产品A,仓库号1>有仓库管理员1,2,<产品B,仓库号2>就有仓库管理员1,2。用符号来表示就是仓库号→→仓库管理员。

|-----------|---------|-----------|
| 仓库管理员 | 仓库号 | 库存产品号 |
| 管理员1 | 1 | 产品A |
| 管理员2 | 1 | 产品A |
| 管理员1 | 2 | 产品B |
| 管理员2 | 2 | 产品B |
| 管理员3 | 3 | 产品C |
| 管理员3 | 3 | 产品D |

(1)允许X的一个值决定Y的一组值,这种决定关系与Z取值无关。

(2)多值依赖是全模式的依赖关系。全模式是指关系到关系模式中的所有属性。

多值依赖的缺点是:数据冗余太大,之后需要进行关系模式的分解以此来解决这个问题。函数依赖实际上是多值依赖的一个特性,如果Y的值只有一个那么多值依赖就变成了函数依赖。

连接

我们知道每一个关系都有唯一的主键,即可识别的元组,如果有一个关系可以通过投影分解成若干个子关系(子关系也有主键),而这些子关系通过连接操作(自然连接)可以得到原始关系那么连接依赖成立。涉及到投影和自然连接。

原始关系:Employees

|----------|---------|----------|----------|
| 员工ID | 姓名 | 部门ID | 部门名称 |
| E1 | Alice | D1 | 销售部 |
| E2 | Bob | D1 | 销售部 |
| E3 | Charlie | D2 | 技术部 |
| E4 | David | D2 | 技术部 |
| E5 | Eve | D3 | 人事部 |

子关系1:EmployeeDetails

|----------|---------|
| 员工ID | 姓名 |
| E1 | Alice |
| E2 | Bob |
| E3 | Charlie |
| E4 | David |
| E5 | Eve |

子关系2:DepartmentDetails

|----------|----------|
| 部门ID | 部门名称 |
| D1 | 销售部 |
| D2 | 技术部 |
| D3 | 人事部 |

子关系通过连接操作得到原始关系可以表示为{员工ID }⋈{部门ID}。

连接依赖的特例:多值依赖中的关系可以分解成两个子关系,比如上面的例子,我们可以将原始关系分解成下面的两个子关系。其他的连接依赖则可以是多个(包含2个)关系的连接。

子关系 R1(仓库号, 库存产品号):

  • 这个子关系包含每个库存产品号和对应的仓库号。

|---------|-----------|
| 仓库号 | 库存产品号 |
| 1 | 产品A |
| 2 | 产品B |
| 3 | 产品C |
| 3 | 产品D |

子关系 R2(仓库号, 仓库管理员):

  • 这个子关系包含每个仓库号和对应的仓库管理员。

|---------|-----------|
| 仓库号 | 仓库管理员 |
| 1 | 管理员1 |
| 1 | 管理员2 |
| 2 | 管理员1 |
| 2 | 管理员2 |
| 3 | 管理员3 |
| 3 | 管理员3 |

关系的键

在关系数据结构那里我们是这样解释候选键的:

复制代码
当某一个属性能明显区分元组之间的区别时(可以唯一地标识不同的元组),这样的属性或者几个这样的属性(即属性集合)叫做超键,比如Sno属性是超键,(Sno、Sname)属性集合也是一个超键。
学号是不可能会出现重复的情况的,这样的也叫作候选键即超键中(当有多个时)没有多余的冗余的属性,如果(Sno、Sname)中Sname属性取值是唯一的(即没有出现同名情况)那么这个(Sno、Sname)超键也是候选键。注意:候选键得先是超键。

现在我们学习了函数依赖重新用新的角度去解释则是这样的:得满足两个条件:

成为候选键的属性或属性集①不函数依赖于其他属性②其中任意一个属性都不能单独决定其他属性即其他属性都不函数依赖于该属性或属性集的任一真子集。

假设我们有关系R(U)成为候选键的属性或者属性集是K,用完全函数依赖来表示就是:

倘若一个关系中有很多候选键,那么就选择其中一个最重要的(最能识别的)作为该关系的主键。

用一个上面说过的例子来解释就是如下

有关系SC(Sno,Cno,Grade),(Sno,Cno)属性集不函数依赖于其他属性,并且Grade不函数依赖于它们之中的任意一个,因此其中(Sno,Cno)就是候选键,也是该关系的主键。

相关推荐
Elastic 中国社区官方博客6 小时前
将你自己的密钥用于现有 Elastic Cloud 部署
大数据·数据库·elasticsearch·全文检索
红海云6 小时前
Jev:给智能系统做判断的模型
大数据·数据库·人工智能
wjkjpcba6 小时前
PCBA烧录程序是什么:PCBA包工包料厂家解析烧录与测试
linux·数据库·人工智能·smt贴片加工·pcba贴片加工厂
꯭自꯭闭꯭7 小时前
达梦事物特性及MVCC
linux·运维·数据库
小马同学-7 小时前
MySQL主从复制和读写分离
数据库·mysql
谢亮_vipxieliang7 小时前
Spring 事务失效的常见场景
java·开发语言·数据库·spring boot
geovindu8 小时前
sql: JSON and XML Data Handling in SQL using sql server 2025
大数据·数据库·sqlserver·数据库开发·数据库架构
IT大白鼠8 小时前
图数据库系列 · 第 02 篇——架构拆解:原生图存储到因果集群
数据库·架构·nosql
EatFan9 小时前
从“框架混战“到“运行时收敛“:2026 年 AI Agent 开发框架的三条路线之争
java·数据库·人工智能·多智能体·ai agent·mcp·agent 框架
小蒜学长9 小时前
基于SpringBoot的佳新超市管理系统设计与实现系统(代码+数据库+LW)
java·数据库·spring boot·后端·佳新超市管理系统