Database-Design
函式依賴的定義是否允許導數值?
對不起,如果標題中的問題似乎含糊不清。這個問題相當廣泛,這是我能總結的最好的。
我已經閱讀了有關功能依賴性、1nf、2nf 和 3nf 的資訊。據我了解,如果 A -> B 那麼 B 在功能上依賴於 A。換句話說,如果每個 B 只有一個唯一的 A,那麼 B 在功能上依賴於 A。(如果我錯了,請糾正我)
現在考慮下表。
CREATE TABLE sales ( product_id int, product_name varchar, year int, indirect_sales int, direct_sales int, total_sales int );
每行的候選鍵顯然是(product_id,year)。這張桌子似乎是 2nf 但我懷疑這張桌子仍然不是 3nf。原因是我們可以從direct_sales 和indirect_sales 中確定total_sales,因為direct_sales +indirect_sales = total_sales。那麼我們可以稱之為功能依賴嗎?因為對於每個直接和間接銷售,都有一個獨特的總銷售額。您還可以看到這可能會導致更新錯誤。如果您更新 direct_sales,您還必須同時更新 total_sales。
那麼,在標準化的背景下,您將如何處理這個問題?通常,您會創建一個帶有屬性的單獨表,但創建一個包含直接、間接和總銷售額的表似乎是人為的。另外,在嚴格要求3nf 的實際情況下,您將如何處理這個問題。
我提供了一個簡化的範例,因此您可以掌握問題的本質,但我要解決的真正問題是這些表。
CREATE TABLE user ( user_id int, user_name varchar, user_login varchar, user_password varchar, balance int ); CREATE TABLE transaction ( transaction_id int, user_id int REFERENCES user.user_id, amount int );
這是一個銀行數據庫,用於儲存每個使用者的使用者資訊和交易資訊。我懷疑這不會被視為 3nf,因為餘額始終是使用者交易金額的總和。這會導致更新異常;如果我們更新交易,餘額必須反映它。
你能幫我理解這個嗎?謝謝。
我發現 Ken Downs 的一篇出色的部落格文章闡明了一切:
基本上,由於派生屬性,上面的表格不是 3NF;3NF 不允許派生屬性。而且,是的,由此得出派生屬性在功能上依賴於它們的源屬性。