LOAD关键字将映射到哪种关系代数运算符?如果它不是逻辑运算符而只是物理运算符,那么在数据库查询处理器的逻辑到物理运算符转换过程中如何处理它?或者,如果它没有映射到关系代数原语,那么它是否是特定于实现的关系代数运算符扩展?
4 回答
您必须区分代数运算符,例如自然连接、传递闭包……和数据操作语言的关键字/命令。
代数运算符对给定值进行计算,并将计算值作为结果返回。
然后你就有了在某种意义上构建在代数运算符“之上”的编程和数据操作语言。如果您有一个代数运算符“整数加法”,那么您的语言中也会有一个符号来表示对该运算符的调用,例如“+”。您可以拥有由这些符号组成的格式良好的公式(wffs)。例如,说“a+b”或“x+1”。
这是变量弹出的地方。仅代数运算符是不够的,我们还需要变量(至少在过程语言中)。为了操纵这些变量,我们需要这个叫做“赋值”的东西,更冗长地说,我们需要赋值运算符。
就像赋值“x := 3”可以看作是一个表示整数赋值运算符调用的wff一样,LOAD可以看作是关系赋值运算符可能出现的一种形式。
赋值运算符 - 显然 - 不是代数的只读运算符,但它是您用于管理状态的语言运算符。
该LOAD
关键字在查询解析为逻辑运算符后在数据库内部映射,但它不是代数运算符。所有代数运算符都是逻辑运算符,但并非所有逻辑运算符都是代数运算符。
从数学的角度来看,LOAD
它根本不是算子。因为它需要一个关系,存储在一个文件中,并将相同的关系放入数据库中。
因此,我们得到了相同关系的 2 个物理副本,但在数学上没有执行任何操作。你可以把它看作是一个简单的选择操作,无条件地从关系中选择所有的元组。
“数据库查询处理器在逻辑到物理运算符转换过程中如何处理它?”
MySQL 在解析查询后执行相应的函数。此函数读取给定文件并将数据加载到表中。
我不认为 MySQL 开发人员关心关系代数中操作、映射 LOAD 等抽象事物的存在。
LOAD
根本不是操作员;它只是 MySQL(和其他 RDBMS)中的保留字。每个 RDBMS 都有自己的“保留字”列表。