数据库基数关系奥林匹克问题?

Database Cardinality Relation Olympiad Questions?

我运行进入了一个关于本地数据库竞赛的问题。它询问关于涉及关系的表达式的基数,以下哪项是正确的。

最后一个选项是:如果 A 是关系 R 的键,B 是关系 S 的外键,我们有:

哪位高手可以验证一下哪个是正确的?

问题的原始版本列出了前三个选项,并试图验证第三个是否正确。

  1. Card(R - S) 的上限是 Card(R),不是 Card(S)。如果 S 为空,则 Card(R - S) 与 Card(R) 相同。增加 S 中的元素数量不会增加结果。

  2. Card(R × S) 的上限是 Card(R) 乘以 Card(S) — 假设 × 表示乘积。如果不是,请确定它的含义。

  3. Card(R ∪ S) 的上限是 Card(R) 加 Card(S) 因为如果没有元素,结果可能包含 R 的每个元素和 S 的每个元素R 和 S 通用。

因此,前三个建议语句中的 none 对我来说似乎是正确的 — 我必须选择上面的 none 选项。


然后改题加入第四句

  1. 假设R(A)是R的主键,S(B)是S中引用R(A)的外键,则Card(R ⋈A=B S)是R和S在外键上的join,所以结果中最多可以有S中的行数(如果违反外键约束会更少,所以S中有一行在 R 中没有匹配项)。

所以,修改后的问题,答案是选项4,加入。