为什么我不能比较关系中元组数量不同的 2 个表?
Why can't I compare 2 tables with Different number of Tuples in Relational?
class 中出现了一个问题,我不确定我是否理解答案。在程序关系 https://ltworf.github.io/relational/ 中,当使用 ∩ 运算符时,你必须有 tables 具有相同数量的元组(我的老师说就像比较苹果与苹果,而不是苹果与橙子)。但是,如果我 运行 仅查询 2 个表中的 1 列(如用户数据库中的城市和 storeLocation 数据库中的城市),为什么要求 table 具有相同的编号的元组?
如果我想在 2 table 秒内比较城市,为什么每个 table 需要具有相同的元组。为什么我不能只查询城市而不必担心 table.
中的元组数量
wikipedia on Codd's intersection operator——也就是你的∩
For set union and set difference, the two relations involved must be
union-compatible — that is, the two relations must have the same set of attributes. Because set intersection is defined in terms of set
union and set difference, the two relations involved in set
intersection must also be union-compatible.
与参数中的元组数量无关。
顺便说一句,'relational' 你 link 看起来很差。在"Explaination [sic] of all the operators and their syntax "页面上,既没有语义的解释,也没有运算符的语法。我希望它能解释要求属性相同的问题。它只有一个使用 ∩
、"These are some valid queries." 的示例,并且在很多方面都非常复杂且无效:
ρ id➡i,name➡n(A) - π a,b(π a,b(A)) ∩ σage > 25 or rank = weight(A)
σage > 25 or rank = weight(A)
是错误的:应该有双 ==
用于比较,如第一个示例。
- 二元运算符之间似乎没有优先级系统,所以
-
的绑定是否比 ∩
更紧密?
- 无论哪种方式,
-
和 ∩
的参数都不是联合兼容的:投影 π a,b(A)
只有属性 a,b
而选择 σ
具有 A
的所有属性(包括 age, rank
),投影 ρ
具有除重命名为 i, n
. 之外的所有属性
难怪你会感到困惑。谁告诉你使用程序关系?我会把它扔掉。
为了能够在关系上使用普通集合运算符 (- ∪ ∩
),它们必须是相同的 "kind" 关系。也就是说,它们需要具有相同的列。
为此,您需要使用投影和重命名。
所以如果你有一个关系 A
与字段 id, name
并且你想与一个关系 B
有 id, first_name, last_name
的联合,你需要做: A ∪ πid, name (ρ first_name ➡name (B))
class 中出现了一个问题,我不确定我是否理解答案。在程序关系 https://ltworf.github.io/relational/ 中,当使用 ∩ 运算符时,你必须有 tables 具有相同数量的元组(我的老师说就像比较苹果与苹果,而不是苹果与橙子)。但是,如果我 运行 仅查询 2 个表中的 1 列(如用户数据库中的城市和 storeLocation 数据库中的城市),为什么要求 table 具有相同的编号的元组?
如果我想在 2 table 秒内比较城市,为什么每个 table 需要具有相同的元组。为什么我不能只查询城市而不必担心 table.
中的元组数量wikipedia on Codd's intersection operator——也就是你的∩
For set union and set difference, the two relations involved must be union-compatible — that is, the two relations must have the same set of attributes. Because set intersection is defined in terms of set union and set difference, the two relations involved in set intersection must also be union-compatible.
与参数中的元组数量无关。
顺便说一句,'relational' 你 link 看起来很差。在"Explaination [sic] of all the operators and their syntax "页面上,既没有语义的解释,也没有运算符的语法。我希望它能解释要求属性相同的问题。它只有一个使用 ∩
、"These are some valid queries." 的示例,并且在很多方面都非常复杂且无效:
ρ id➡i,name➡n(A) - π a,b(π a,b(A)) ∩ σage > 25 or rank = weight(A)
σage > 25 or rank = weight(A)
是错误的:应该有双==
用于比较,如第一个示例。- 二元运算符之间似乎没有优先级系统,所以
-
的绑定是否比∩
更紧密? - 无论哪种方式,
-
和∩
的参数都不是联合兼容的:投影π a,b(A)
只有属性a,b
而选择σ
具有A
的所有属性(包括age, rank
),投影ρ
具有除重命名为i, n
. 之外的所有属性
难怪你会感到困惑。谁告诉你使用程序关系?我会把它扔掉。
为了能够在关系上使用普通集合运算符 (- ∪ ∩
),它们必须是相同的 "kind" 关系。也就是说,它们需要具有相同的列。
为此,您需要使用投影和重命名。
所以如果你有一个关系 A
与字段 id, name
并且你想与一个关系 B
有 id, first_name, last_name
的联合,你需要做: A ∪ πid, name (ρ first_name ➡name (B))