2012-11-19 417 views
0

我明天有一個數據庫測試,希望有人可以爲我確認這個答案。說我有這樣一個模式:這個關係代數是否正確?

branch (branch_name, branch_city, assets) 
customer (customer_name, customer_street, customer_city) 
account (account_number, branch_name, balance) 
loan (loan_number, branch_name, amount) 
depositor (customer_name, account_number) 
borrower (customer_name, loan_number) 

我很好奇的問題是: 「查找誰擁有超過£5000貸款,但有超過£的平衡沒有考慮到所有客戶的名字500.」

原始代碼:

π customer_name 
    (σ amount > 5,000^balance < 500 
    (borrower ⋈ loan ⋈ depositor ⋈ account)) 

編輯:說完看着歐文斯莫特的建議,我已經修改了我的代碼如下:

π customer_name 
    (σ amount > 5,000 (borrower ⋈ loan)) 
- 
π customer_name 
    (σ balance < 500 (depositor ⋈ account)) 

是正確的嗎?

+0

這看起來像是大學作業。你能設置一個[sqlfiddle](http://sqlfiddle.com/)的例子嗎? –

+0

嗨瑞安。 sqlfiddle會工作,因爲我沒有運行真正的SQL查詢,而是一個關係代數? –

+0

可能不是。你怎麼知道它什麼時候工作?你會如何測試它?你寫一個證明嗎?這對於[程序員StackExchange](http://programmers.stackexchange.com)來說是一個更好的問題。 –

回答

0

我只是回答我自己的問題,因爲我現在知道它是正確的。感謝所有幫助過的人:

π customer_name (σ amount > 5,000 (borrower ⋈ loan))  
- 
π customer_name (σ balance < 500 (depositor ⋈ account)) 
+0

成功與測試... –

+0

感謝您的意見! –

2

不,這是不正確的。措辭「但[沒有]帳戶......」表示您應該在某處使用關係差異運算符。

+0

這就是我的想法,但儘管我的查詢看起來很有趣,但我不明白爲什麼它不起作用。我不確定如何在此查詢中使用設置差異查詢。有任何想法嗎? –

+0

查詢將始終「有效」。這並不意味着它也是任何問題的正確解決方案。您的查詢爲您提供貸款額度> 5000的客戶名稱,以及<500的賬戶。看看這與給定的問題有什麼不同? –

+0

我明白你的意思了。我只是不知道如何解決它。會擊中書籍。 –