【问题标题】:Is Natural Join distributive over Union?Natural Join 是否对 Union 进行分配?
【发布时间】:2015-11-14 01:27:22
【问题描述】:

给定三个关系 R、S 和 T,是否真的:

R ⋈ (S U T) = (R ⋈ S) U (R ⋈ T)

如果是,我们可以证明吗?

【问题讨论】:

    标签: database join relational-database relational-algebra natural-join


    【解决方案1】:

    是的。

    假设我们有 3 个关系 R、S、T。

    首先要知道S和T必须联合兼容才能进行联合操作,也就是说两个关系有相同的字段。

    证明左 -> 右:

    假设 row r 属于左操作集。那么,对于那些最初来自 S 或 T 的值,它们必须出现在关系 S 或 T 中。不失一般性,假设它们来自 S。那么,row r 属于 R ⋈ S。

    证明正确 -> 左:

    假设 row r' 属于右操作集。那么,r 要么属于 R ⋈ S 或 R ⋈ T。

    不失一般性,假设r属于R⋈S。那么,对于那些最初来自S的值,它也属于S U T中的一行

    因此,r' 属于 R ⋈ (S U T) 。

    因此,命题是正确的。

    【讨论】:

    • 好吧,当你给出等价 A=B 的正式证明时,你实际上是在证明:如果 A,那么 B;如果是B,那么A。left->right表示如果一个元素属于left,那么它也属于right。
    【解决方案2】:

    在 Set 语义下,如 Tipton 的回答所示,这成立,但在 bag 语义下,因为它们被 SQL 使用,它不是。考虑反例:

        > create table R(A TEXT);
        Query executed in 0 min. 0 sec 5 msec.
        > create table S(A TEXT);
        Query executed in 0 min. 0 sec 1 msec.
        > create table T(A TEXT);
        Query executed in 0 min. 0 sec 2 msec.
        > insert into R values('a');
        Query executed in 0 min. 0 sec 1 msec.
        > insert into R values('a');
        Query executed in 0 min. 0 sec 0 msec.
        > insert into S values('a');
        Query executed in 0 min. 0 sec 1 msec.
        > insert into T values('a');
        Query executed in 0 min. 0 sec 1 msec.
        > select * from (select * from R JOIN (select * from S UNION select * from T) u ON R.A=u.A);
        a|a
        a|a
        --- [0|Column names ---
        [1|A [2|A:1 
        Query executed and displayed **2 rows** in 0 min. 0 sec 11 msec.
        > select * from R JOIN S ON R.A=S.A UNION select * from R JOIN T ON R.A=T.A;
        a|a
        --- [0|Column names ---
        [1|A [2|A 
        Query executed and displayed **1 row** in 0 min. 0 sec 20 msec.
    

    【讨论】:

      猜你喜欢
      • 2018-07-13
      • 1970-01-01
      • 2021-02-19
      • 2016-06-19
      • 2021-02-24
      • 1970-01-01
      • 2011-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多