Skip to content

模型Model

关系代数

Relational algebra · Set relational algebra

用选择、投影、积、重命名与集合运算组合有限关系查询,并在集合语义下解释连接和存在见证。

形式陈述 ​

在关系数据模型的有限集合实例上,关系代数表达式由输入关系与以下运算递归构成。每个表达式都带确定的输出列集合:

运算 输入条件与输出
选择 σθ(R) 保留满足 θ 的元组,列不变;条件由列间、列与常量的等式及其布尔组合构成
投影 πX(R) X 是输入列的子集,只保留这些列,并按集合语义合并相同结果
积 R×S 两边列名不相交,输出拼接后的列与全部元组配对
重命名 ρ(R) 一一更换列名,值与元组数不变
并 R∪S、差 R−S 两边列集合相同;按集合成员资格取并或取差

并与差直接使用集合运算。同名列需要匹配时,自然连接 R⋈S 保留两表在公共列上相等的配对,只输出一份公共列。它可由重命名、积、等式选择与投影定义;若两表无公共列,自然连接退化为积。

为精确覆盖后文含常量与布尔查询的等价定理,本页还允许固定的有限常量关系:其值只能来自表达式写明的查询常量,并允许任意列集合上的空关系及零列单位 1={()}。例如单列常量表 Kc(X)={(c)} 可以输出输入表中未出现的常量 c。零列空表 0=∅ 表示假;π∅(R) 在 R 非空时为 1,否则为 0。

在这些约定下,关系代数与域独立的一阶关系演算具有相同查询表达能力:输入是有限关系,逻辑只有关系、等式与常量,没有函数、排序、聚合、递归或 NULL。等价不是说每种一阶公式都域独立,也不是 SQL 全语言等价定理。

直觉

选择问“这一行合格吗”,连接问“两条事实能否接上”,投影问“答案需要保留哪些信息”。投影丢掉课程列,并不表示课程从未参与计算;它把“这位学生和这位教师之间存在课程见证”压缩成一个答案。

这种代数首先规定结果,不指定扫描、散列连接或索引连接的执行方式。优化器可以换执行方案,但每次改写都必须保持所有合法实例上的结果,而不是只在一张示例表上碰巧相同。

例子与边界

三行加三行,连接得到五行 ​

取关系数据模型中的两张三行表。按公共列 Course 连接,得到:

Student Course Teacher
甲 算法 林
甲 数据库 林
甲 数据库 周
乙 数据库 林
乙 数据库 周

数据库这门课有两个学生、两个教师,贡献 2×2=4 行;算法贡献一行,所以连接结果恰为五行。查询

Q=πStudent,Teacher(Enroll⋈Teach)

得到 {(甲,林),(甲,周),(乙,林),(乙,周)}。其中 (甲,林) 有两条课程见证,却只贡献一个集合成员。再选择 Teacher 为周并投影 Student,得到 {甲,乙}。

投影不能过早丢掉连接列 ​

令 R(A,B)={(a,1)},S(B,C)={(2,c)}。因为 1≠2,有

πA,C(R⋈S)=∅,(πAR)×(πCS)={(a,c)}.

先丢掉 B,就丢掉了验证两表能否接上的证据,产生伪答案。合法的投影下推必须保留后续连接和选择仍需要的列。

投影后重建需要约束保证 ​

对覆盖原列集合的 U1,…,Um,任何原行都能由自己的投影片段拼回,因此总有 r⊆⋈iπUi(r)。反向包含却未必成立:来自不同原行的片段可能在公共列上一致,因而拼出额外组合。无损连接分解要求原表与重建结果相等,并且这一保证对所有满足指定函数依赖的原表成立。二元分解中,公共列能否决定一侧就是判定关键。它与提前丢掉连接列的查询改写问题相关,但判定对象是一整套存储分解及其允许实例。

集合答案与 SQL 重复行 ​

在不含 NULL 的本例中,连接后用 SELECT DISTINCT Student, Teacher 可以表达上述集合投影;不带 DISTINCT 的普通 SQL 查询通常保留重复项,会把甲—林输出两次。两者甚至对答案基数都给出不同值,因此不能跨越集合与多重集语义直接套用改写。ORDER BY 所规定的顺序也不属于这里的关系值。

推论与应用

每个代数表达式都只处理输入值和显式常量,扩大未使用的外部论域不会改变结果。这提供了域独立性的结构归纳证明,也解释为什么差集必须有左侧候选关系,不能解释为“整个无限宇宙中的补集”。

在关系演算中,积对应合取、投影对应存在量词、并对应析取、差对应有候选范围的否定。反向翻译要构造包含查询常量的活跃域,并单独处理空活跃域与零列真假值;这些边界是等价定理的一部分。

合取查询只需其中选择、投影与连接的核心片段,就能完成本页的学生—教师查询。它的包含定理把“所有有限实例上的答案包含”转化为反向同态检查;两个方向都成立时,得到保持集合答案的等价改写。检查之前必须确定是否去重、是否另有依赖约束:同一集合答案可以具有不同的见证重数,而约束又会改变需要比较的实例范围。完整代数还允许并和差,不能把这个纯合取片段的判据直接套到所有代数表达式上。

Datalog 与有限最小不动点把正的连接、投影与并反复执行,直到不再出现新事实,由此计算无预设长度上界的可达性。单轮仍可用关系代数实现;半朴素求值再用差集排除已知答案,减少旧事实的重复匹配。

参考资料
  • Serge Abiteboul、Richard Hull、Victor Vianu,Foundations of Databases,Addison-Wesley,1995,第 4 章及 §5.3:代数、域独立性与表达能力;本页显式列出常量关系和零列关系的约定。
  • E. F. Codd,Relational Completeness of Data Base Sublanguages,IBM Research Report RJ987,1972,§2.3、§3.2–3.3、§4.4:关系运算、受限演算与翻译正确性。
关系图谱12 个相邻概念 · 3 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系