【问题标题】:When a database table is vertically partitioned, what is the relationship between the partitioned table and the table before partitioning?当数据库表进行垂直分区时,分区表和分区前的表是什么关系?
【发布时间】:2021-12-01 12:17:49
【问题描述】:

在研究数据库相关内容时,我遇到了以下情况:

当表R垂直划分为R1R2R3...、Rn时,是 表示可以表示为R = R1R2R3...⋈Rn。 (join 符号)

但是,如果在没有任何特殊条件的情况下使用连接符号,它就会变成笛卡尔积,那么这不会导致比原始表 R 中的元组多得多吗?您能否解释一下为什么将现有表表示为分区表的连接?

【问题讨论】:

  • 我的解释是它是自然连接,而不是交叉连接。无论如何,不​​要花太多时间考虑它,因为当前的 RDBMS 和 SQL 实现与数学上纯数据库理论相去甚远(例如,我不知道有任何 RDBMS 支持真正的自然连接(除了黑客攻击)它通过匹配同名列,这是(为了更好的短语)只是愚蠢的)

标签: database partition relational-algebra


【解决方案1】:

⋈ 是自然连接。 (当使用 2 个关系参数且没有其他参数时。)当没有公共列时,自然连接是笛卡尔积。但是在引用中,假设是分区已完成,因此所有表都使用一组键值。所以笛卡尔积没有出现。每个分区具有相同的行数和相同的键内容,并且它们的附加列内容不同。每次连接都会添加更多额外的列数据,直到您取回原始表。

【讨论】:

    【解决方案2】:

    该运算符表示自然连接。见https://en.m.wikipedia.org/wiki/Relational_algebra

    自然连接 (⋈) 是二元运算符,写为 (R ⋈ S),其中 R 和 S 是关系。 [2]自然连接的结果是 R 和 S 中的所有元组组合的集合,它们的公共属性名称相同。

    【讨论】:

    • 如果 SQL 中的自然连接使用预定义的 FK 约束作为连接条件而不是属性/列名,那么自然连接会很棒。但这只是补充到我的“为什么 SQL 的人体工程学如此糟糕?”中的另一件事。示例列表。
    • @Dai 在 FK 上的连接很频繁,但约束不需要保持、声明或知道查询。参数和结果表的含义对于查询是必要和充分的。您描述的联接不是自然联接,但我想您是在草率地谈论使用 FK 或 ON UNIQUE-FK 相等性的联接速记。
    • @philipxy 是的,但我自然不同意你对我的想法“草率”的评价 :)
    • “元组组合”是什么意思?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 2011-10-30
    • 2010-12-21
    • 2019-01-11
    • 1970-01-01
    • 2013-10-08
    相关资源
    最近更新 更多