关系数据库设计理念,致力于解决关系模式中不合适的数据依赖问题,而函数依赖与多值依赖是最重要的数据依赖。

函数依赖

简单的说,对于函数 Y = F(X),很显然X的值决定Y,则说Y函数依赖于X。

对应到数据库中,假设有一学生关系——学生(学号,姓名,年龄),以学号为主键。那么给定一个学号,就可以找到姓名或年龄。若以学号为X,姓名、年龄为Y,则有Y = F(X),就有Y函数依赖于X。可简写为 Y → X。

注意几点:

  • 函数依赖对关系中所有实例均满足约束条件,换句话说就是关系里面, Y = F(X)对所有X都成立(套用一下函数定义)
  • 用户只能根据语义来确定一个依赖,不能按照其形式化定义来证明一个函数依赖是否成立。
    还是上面那个学生表,假设表里面学生的名字不重复,则可以推导出 姓名 → 年龄,意思是通过姓名可以找到唯一存在的年龄(跟用学号查一样),这也侧面说明函数依赖反映了一种语义完整性约束。
  • 函数依赖存在的时间无关性:意思就是,后面插入的数据,不能破坏之前定好的规则,比如插入的数据主键重复是错误的。
  • 若X→Y,称X为这个函数依赖的决定因素
  • 若X→Y且X←Y,则X ←→ Y

非平凡函数依赖

  • 如果X→Y,并且Y不包含于X,则称X→Y是非平凡函数依赖,否则称为平凡函数依赖

完全函数依赖

  • 如果X→Y(我理解为X推导出Y),并且对于X的任何一个真子集X‘ 都有X‘推导不出Y数据库  关系数据库设计理念——基本概念_数据库,则说明Y对X完全函数依赖,记为数据库  关系数据库设计理念——基本概念_数据库_02

否则称为Y对X的部分函数依赖数据库  关系数据库设计理念——基本概念_数据库_03

传递函数依赖

  • 如果有X → Y, Y→ Z, 且Y推导不出X,则称Z传递函数依赖于X,记为数据库  关系数据库设计理念——基本概念_数据库_04

  • 如果数据库  关系数据库设计理念——基本概念_数据库_02存在,则X可以作为关系(可以理解为数据表)的候选码,一个关系可以有多个候选码,选定其中一个为主键。

  • 包含在任何一个候选码中的属性称为主属性,不包含在任何码中的属性称为非主属性。

  • 关系模式R中属性X并非R的码,但X是另一个关系模式S中的码,则X为R的外键