我正在尝试使用关系代数编写以下查询:
"Find the names of sailors who reserved a red or a green boat"
这是我的解决方案:
但是这本书给出了以下解决方案:
书中给出的另一个等效解决方案:
最后是相关表格:
我的问题是,我们不能在选择运算符中使用“或”符号(V)吗?我的解决方案错了吗?为什么我们需要重命名运算符?
谢谢
我正在尝试使用关系代数编写以下查询:
"Find the names of sailors who reserved a red or a green boat"
这是我的解决方案:
但是这本书给出了以下解决方案:
书中给出的另一个等效解决方案:
最后是相关表格:
我的问题是,我们不能在选择运算符中使用“或”符号(V)吗?我的解决方案错了吗?为什么我们需要重命名运算符?
谢谢
我在我的 phpmyadmin 中测试了这段代码,它必须可以工作
选择所有保留的水手,而船只已经创建;
SELECT * FROM sailors INNER JOIN reserves ON reserves.sid = sailors.sid LEFT JOIN boats ON reserves.bid = boats.bid
具体选择(颜色:红色);
使用 WHERE color = 'red'
SELECT * FROM sailors INNER JOIN reserves ON reserves.sid = sailors.sid LEFT JOIN boats ON reserves.bid = boats.bid WHERE color = 'red'
多选(颜色:红色和蓝色);
使用 WHERE color = 'red'或'blue'
SELECT * FROM sailors INNER JOIN reserves ON reserves.sid = sailors.sid LEFT JOIN boats ON reserves.bid = boats.bid WHERE color = 'red' or 'blue'
还有更多证据表明不存在“关系代数”之类的东西。
至于限制:
您的书/老师似乎遵循限制条件只能是“非常基本”的原则。在某种意义上,如http://en.wikipedia.org/wiki/Selection_%28relational_algebra%29上的 wiki 文章(至少引用了一个属性,一个其他属性或常量值,仅涉及一个比较运算符,没有其他运算符调用允许,例如 SIN(angle attr) 或 MONTH(datetime attr) 或 ...)。
但是这种限制(在限制条件下)是不必要的。http://en.wikipedia.org/wiki/Relational_algebra#Selection_.28.CF.83.29上关于关系代数的 wiki 文章明确表示“......是一个由......和逻辑运算符 AND 组成的命题公式,或不 ...”。
至于重命名:
关系代数中的 RENAME 运算符用于生成与输入不同的关系值,仅在于某些属性具有“更改名称”。
您的书/老师显然使用称为“重命名”的运算符为某些指定的关系表达式(在您的示例中为 UNION)分配名称。那甚至不是代数运算!
(虽然在语言设计中为用户设计一种“命名表达式”的可能性是一个有效且有用的想法,但他随后可以仅使用指定的名称进行引用,这是语言设计的问题,而不是关系代数的问题! )