在关系代数中转换列的规则是什么?例如,我想将列的所有值除以该列的平均值。我可以使用聚合规则获得平均值。但无法找到列操作的规则。 P.S:我对规则感兴趣(比如\ Pi用于投影)。
答案 0 :(得分:2)
对此没有标准方法。也没有单一的关系代数,所以你应该给你的参考。
假设您以一个名为DIVIDE
的常量基本关系的形式为列的值提供除法运算符,其中包含dividend
/ divisor
= quotient
的元组。我将使用最简单的代数,标题是属性名称集。假设我们输入关系R
与列c
&平均A
。我们希望像R
这样的关系,但每列c
的值设置为原始值除以A
。
此版本从最简单的规范表达式&机械转换为代数:
/* rows where
EXISTS dividend [R(dividend) & DIVIDE(dividend, A, c)]
*/
PROJECT c (
RENAME c\dividend (R)
NATURAL JOIN
RENAME quotient\c (
PROJECT dividend, quotient (SELECT divisor=A (DIVIDE))))
这个版本的表达式简洁,从更简洁的代数中机械地得出:
/* rows where
EXISTS quotient [
quotient=c
& THERE EXISTS c, divisor [
R(c) & DIVIDE(c, divisor, quotient) & divisor=A]]
*/
RENAME quotient\c (
PROJECT quotient (
R NATURAL JOIN RENAME dividend\c (SELECT divisor=A (DIVIDE))))