知识卡片

映像关系的精确定义与"!!"运算符

普通读书笔记卡

内容

映像关系(image relation)是某个元组在另一个关系里的”映像”:给定可连接的 关系r1、r2,r1中的元组t1,r2中所有和t1在公共属性上取值相同的元组构成的限制 r3,再对r3做”除公共属性外的所有属性”的投影,得到的r4就是t1对应的映像关系。 比如供应商S4元组在出货关系SP里的映像,就是SP中SNO=‘S4’的所有行去掉SNO列后 剩下的(PNO,QTY)集合。这个概念用!!运算符(读作”双bang”,类比阶乘符号”!“读作 “bang”)表达,比如对S中某个供应商元组Sx而言,!!SP表示Sx对应的出货映像关系。 关键限制是:映像关系的定义依赖一个”确定的元组”(t1),所以!!表达式不能出现 在关系表达式通常可以出现的任意位置,只能出现在能明确解释”当前是哪个确定元组” 的语境中——比如WHERE子句里对S的每个元组逐一求值时(S WHERE (!!SP){PNO}= P{PNO}表示”提供了全部零件种类的供应商”),或后续会看到的EXTEND语境。!! 本质上可以用MATCHING改写(!!SP等价于SP MATCHING RELATION{TUPLE{SNO SNO}}, 后一个SNO是当前S元组里SNO属性的取值),这说明映像关系并不是凭空引入的全新 概念,而是[[排他并与半连接半差三个实践重要的附加运算符]]中半连接思想的一种 “绑定到确定元组”的特化用法。映像关系的实用价值极大:书中用它把”提供所有零件 型号的供应商”这类原本要嵌套两层NOT EXISTS才能在SQL里表达的复杂查询,简化成 一行直观的Tutorial D表达式,SQL标准至今没有直接对应映像关系的语法结构。

参考来源

- 位置:《SQL与关系数据库理论——如何编写健壮的SQL代码》第7章"SQL和关系代数 II:附加运算符"7.4节"映像关系"(源文件:OEBPS/text00077.html) - 结论依据:原文明确"映像关系就是某个元组……在某个关系中的'映像'……设关系 r3为包含且仅包含r2中满足前述条件的t2元组的限制;设关系r4为对r3除了公共 属性之外的所有属性的投影。则r4为对应于t1的(对于r2而言的)映像关系…… 一个映像关系引用并不能在关系表达式通常可以出现的所有场合出现,而只能出现 在特定场合中……SQL不直接支持这样的映像关系"。 - 原始内容:设关系r3为包含且仅包含r2中满足前述条件的t2元组的限制;设关系 r4为对r3除了公共属性之外的所有属性的投影。则r4为对应于t1的映像关系…… SQL不直接支持这样的映像关系。