“固定有限属性集 $U$、有限函数依赖集 $F$,值来自无限共同论域。关系均为无 NULL 的有限集合。分解 $\mathcal D={U 1,\ldots,U m}$ 满足 $\bigcup…”
形式陈述 ​
在关系数据模型的有限集合实例上,关系代数表达式由输入关系与以下运算递归构成。每个表达式都带确定的输出列集合:
| 运算 | 输入条件与输出 |
|---|---|
| 选择 |
保留满足 |
| 投影 |
|
| 积 |
两边列名不相交,输出拼接后的列与全部元组配对 |
| 重命名 |
一一更换列名,值与元组数不变 |
| 并 |
两边列集合相同;按集合成员资格取并或取差 |
并与差直接使用集合运算。同名列需要匹配时,自然连接
为精确覆盖后文含常量与布尔查询的等价定理,本页还允许固定的有限常量关系:其值只能来自表达式写明的查询常量,并允许任意列集合上的空关系及零列单位
在这些约定下,关系代数与域独立的一阶关系演算具有相同查询表达能力:输入是有限关系,逻辑只有关系、等式与常量,没有函数、排序、聚合、递归或 NULL。等价不是说每种一阶公式都域独立,也不是 SQL 全语言等价定理。
直觉
选择问“这一行合格吗”,连接问“两条事实能否接上”,投影问“答案需要保留哪些信息”。投影丢掉课程列,并不表示课程从未参与计算;它把“这位学生和这位教师之间存在课程见证”压缩成一个答案。
这种代数首先规定结果,不指定扫描、散列连接或索引连接的执行方式。优化器可以换执行方案,但每次改写都必须保持所有合法实例上的结果,而不是只在一张示例表上碰巧相同。
例子与边界
三行加三行,连接得到五行 ​
取关系数据模型中的两张三行表。按公共列 Course 连接,得到:
| Student | Course | Teacher |
|---|---|---|
| 甲 | 算法 | 林 |
| 甲 | 数据库 | 林 |
| 甲 | 数据库 | 周 |
| 乙 | 数据库 | 林 |
| 乙 | 数据库 | 周 |
数据库这门课有两个学生、两个教师,贡献
得到
投影不能过早丢掉连接列 ​
令
先丢掉
投影后重建需要约束保证 ​
对覆盖原列集合的
集合答案与 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:关系运算、受限演算与翻译正确性。