Vue3+Django4全新技术实战全栈项目(慕K无密)
下载看水印
数据重排(Enforcer)
数据重排一般不改变包语义下关系的逻辑属性, 只改变物理属性(排序, 分布).
Limit是一个例外, 其可以将包中元组按照 offset 选取最多 num 个.
𝐸𝑛𝑓𝑜𝑟𝑐𝑒𝑟𝑑𝑖𝑠𝑡,𝑐𝑜𝑙𝑙,𝑙𝑖𝑚𝑖𝑡,𝑜𝑓𝑓𝑠𝑒𝑡(𝑒)
细化的 Enforcer:
𝐿𝑖𝑚𝑖𝑡𝑛𝑢𝑚,𝑜𝑓𝑓𝑠𝑒𝑡(𝑒)
𝑆𝑜𝑟𝑡𝑐𝑜𝑙𝑙(𝑒)
𝐸𝑥𝑐ℎ𝑎𝑛𝑔𝑒𝑑𝑖𝑠𝑡(𝑒)
在后续暂不讨论数据重排相关算子, 因为包语义无法体现数据重排中的排序和分布属性.
投影与过滤(Project/Filter)
Filter 算子
𝜎𝑝(𝑒):={𝑥|𝑥∈𝑒,𝑝(𝑥)}𝑝 是个谓词(predicate),返回布尔值作为结果, 注意 𝑝 中可以嵌套关系算子等.
计算过程为从 e 中取出逐行元组, 以谓词 p 求值结果过滤, 过滤剩余的多个元组构造为一个新的包.
𝑝 可以嵌套子查询以用于exists等场景,如𝜎𝑒1(𝑡)≠∅𝑏,𝑡∈𝑒2(𝑒2) 表示只保留 e_2 中满足 e1 表达式的元组
Project 类算子
扩展投影主要是指投影(Projection), 映射(Map) 两部分, 去重(Distinct) 和 重命名(Rename) 也与扩展投影相关, 所以统一归为 Project 类算子.
在一般的数据库教材中, 扩展投影是一个算子同时最投影和标量函数计算.
这里沿用BQC定义的两个算子, 分别表达投影和计算.
Project投影选择部分属性令 𝐴={𝑎1,...𝑎𝑛} 为属性集Π𝐴(𝑒):={[𝑎1:𝑥.𝑎1,...,𝑎𝑛:𝑥.𝑎𝑛]|𝑥∈𝑒}𝑏
计算过程为从 e 逐行取出元组, 按照属性集选取值, 构造成元组, 并将新构造的多个元组构造为一个新的包.
领取专属 10元无门槛券
私享最新 技术干货