Database-Theory

元組演算:不確定我的推理是否正確

  • December 27, 2015

我目前正在處理一個元組微積分問題,我遇到了一種情況,我有兩個對我來說似乎正確的答案,我不確定我的邏輯是否錯誤,或者它們是否都是正確的答案(如果是,還有一個比另一個正確)。

我正在嘗試找到供應每件商品的商店的 sid。模式是:

Stores(sid: integer, sname: string)

Items(iid: integer, iname: string)

Supplies(sid: integer, iid: integer, price: integer)

我想出的是:

{ P | ∃ S1 ∈ Supplies(P.sid = S1.sid ∧ ∀ i ∈ Items(∃ S2 ∈ Supplies (S2.iid = i.iid ∧ S2.sid = S1.sid)))}

{ P | ∃ S1 ∈ Supplies(P.sid = S1.sid ∧ ∀ i ∈ Items(S1.iid = i.iid))}

我的理由是,我正在尋找 sid,其中對於所有項目,Supplies 表中都有一個對應於 iid 的條目。我的答案之間唯一真正的區別是第二個不使用第二個單獨的 Supplies 表,它允許我們刪除額外的S2.sid = S1.sid. 我的教科書有一個與此類似的問題,並且答案類似於 1,但我的推理得到了第二個答案。

回答

我要稍微重命名你的表:

Store(s) -- store [s.sid] has name [s.sname]
Item(i) -- item [i.iid] has name [i.iname]
Offer(o) -- store [o.sid] offers item [o.iid] for $[o.price]

您想要 < sid > 形式的元組,其中

-- store s.sid offers every item, ie
-- for all Items i: store s.sid offers item i.iid, ie
-- for all Items i: there exists Offer o: [o.sid = s.sid ∧ o.iid = i.iid], ie
∀ i ∈ Items ∃ o ∈ Offer [o.sid = s.sid ∧ o.iid = i.iid]

對此類商店的查詢(可能有多個此類商店)是:

{ s : &lt; sid &gt; | ∀ i ∈ Items ∃ o ∈ Offer [o.sid = s.sid ∧ o.iid = i.iid] }

你的答案 2

我正在尋找 sid,其中對於所有項目,Supplies 表中都有一個對應於 iid 的條目。

就像我的解決方案一樣,這有一個“存在的所有人”。但是您提出的答案 2 有一個“所有的存在”:

{ P | ∃ S1 ∈ Supplies(
        P.sid = S1.sid
    ∧ ∀ i ∈ Items(S1.iid = i.iid)
    )}

這要求元組 P 哪裡有一個提議 S1 在哪裡

$$ P’s sid is S1’s sid and for all Items S1’s iid is that item’s iid $$. 我希望你能看到這涉及到與 Item 中的所有 iid 相同的單個 iid,而不是你想要的。 你的答案 1

{ P | ∃ o ∈ Offer (
        P.sid = o.sid
    ∧ ∀ i ∈ Item (∃ o2 ∈ Offer (o2.iid = i.iid ∧ o2.sid = o.sid))
    )}

請注意上面的∀ ...意思store o.sid offers every item。所以:

{ P | ∃ o ∈ Offer (P.sid = o.sid
   ∧ store o.sid offers every item  )
   )}

如果沒有優惠和一些商店,那麼每個商店都會提供每件商品。但既然沒有優惠,那是假的∃ o ∈ Offer (P.sid = o.sid))。沒有 Ps 使之成為現實。所以這是 {}。所以這不是答案。

(您的答案 1 可能會根據 Codd 的原始關係除法運算符表達的教科書答案進行修改。但是,除以項目實際上不會返回元組 s where store s.sid offers every item。它返回行 where store s.sid offers every item AND there is at least one item。所以答案不是由 Offers/Items 表達的。 )

(與你的自然語言描述和我的答案相比,確實 2 有一個額外的 ∃,但它是外部的∃。所以你的解決方案 1 以這種方式讓人想起正確的答案。)

引用自:https://dba.stackexchange.com/questions/117777