关系代数

关系代数(数据库)

计算机科学家 Codd 对关系代数的形成作出了很大的贡献,他的代数的六个原始运算是「选择」、「投影」、「笛卡尔积」、「并集」、「差集」、「重命名」。

Select

相当于 sql 中 where 的功能。

一般形式:

$$ \sigma_{verb}(relationship) $$

选择谓词一般是逻辑表达式,可以是连词连接(也可以没有连词)的多个比较语句。

Projection

相当于 sql 中 select 的功能。

一般形式:

$$ \Pi_{fields}(relationship) $$

从关系中选出若干属性列组成新的关系,在这种选择过程中可能会减少一些列(没有被选中或者出现了重复)。

Join

连接可以分为自然连接、等值连接、外连接等。

等值连接,从关系 R 和 S 的广义笛卡尔积中选取 A 、B 属性值相等的那些元组,一般形式:

$$ R\bowtie_{A=B}S $$

自然连接, 连接时两个关系中比较的分量必须是同名的属性组,并在结果中把重复的属性列去掉。一般形式:

$$ R\bowtie{S} $$

join

自然连接时会出现 R 中的某些元组在 S 中不存在公共属性上值相等的元组,所以出现了「悬浮元组」,如果保留它们,未知的属性填上 NULL ,这就是「外连接」。如果只保留左边关系中的悬浮元组就是「左外连接」,反之就是「右外连接」。

Divsion

其结果由 R 中元组到唯一于 R 的属性名字(就是说只在 R 表头中而不在 S 表头中的属性)的限制构成,并且它们与 S 中的元组的所有组合都存在于 R 中。一般形式:

$$ R\div{S} $$

divsion

Rename

一般形式:

$$ \rho_{a/b}(R) $$

把所有元组中的 b 字段改成 a 字段。相当于 sql 中的 as


PS:

关系的完整性:

  • 实体完整性(主码不能为空)
  • 参照完整性(外码要么为空要么存在于参照关系中)
  • 用户定义完整性(要遵照用户的定义,例如人数不能为小数等)