不確定如何制定關係代數查詢
問題問:
給定兩個關係 A 和 B,它們都超過屬性 x 和 y。在bag語義下編寫一個查詢,如果B為空則返回A,否則返回B
我解釋這個問題的方式是“空的”意味著關係中沒有元組。
這個問題是在一般意義上給出的,因此沒有與每個關係相關聯的值。
希望有人可以指導我開始。
編輯:到目前為止,我看到如果B為空,則A union B會產生正確的答案。但是在B不為空的情況下,我們需要取與B的交集,即**(A union B)與 B 相交,但是當****B**為空時這不起作用
編輯:在A和B都是非空的情況下舉一個例子:
答:((1,1),(2,2))
B : ((3,3), (4,4))
查詢應返回: ((3,3), (4,4))
但是,如果我們將B更改為: ()
查詢應返回: ((1,1), (2,2))
我只是想不通集合運算符的可能組合可以讓我實現這一目標。
編輯:這是一個連結,基本上是用於教我們關係代數的確切幻燈片,大約 3/4 的方式定義了我的問題使用的袋子上的代數。課堂上使用的教科書是 Ramakrishnan 和 Gehrke 第 3 版第 100 頁的“數據庫管理系統”,但這是可選文本,我們被告知我們的主要參考資料應該是幻燈片。
為了濃縮幻燈片,我們的代數有選擇、投影、重命名、笛卡爾積、並集和差集。所有其他操作都可以由這些操作組合而成。
為了解決問題的根源,我上學期為我的數據庫模組準備了一張舊問題表,我最近重新審視了它,為我即將進行的一個項目修改關係代數,但這個問題困擾了我好幾天。提出問題的講師已經離開,很遺憾我不能問他們。
正如您所注意到的,如果 B = ∅, A ∪ B返回 A,否則返回來自 A 和 B 的元組。
換句話說,結果是正確的,除了當 B 非空時包含 A。
您需要一個額外的表達式 E,如果 B 非空,它將返回 A;否則∅。
然後將通過以下方式給出所需的結果:
(A ∪ B) - E
只有當 B 非空時,才會從結果中刪除 A。
要找到 E,請考慮當 B = ∅ 時A × B 的行為。
這應該足以讓您找到合適的 E 並解決您的問題。
下面的劇透解決方案。
E = A ∩ π A (A × B)