2012-04-29 50 views
-5

這可能是題外話題,但我很好奇。什麼規範化形式是餐廳菜單?

假設您有一個正常的餐館菜單,其中包含商品ID,用餐名稱和價格。它是什麼樣的正常形式?

我說這是BCNF,因爲朋友提出,它不在3NF,因爲傳遞依賴性價格 - >項目名稱 - >項目編號。你們有什麼感想?

+5

它沒有任何正常形式。這是一個*餐廳菜單*。 – Polynomial 2012-04-29 13:37:27

+0

不要以「這可能是題外話」開始提問 – ilanco 2012-04-29 13:39:42

+0

「itemID」和用餐名都是候選鍵嗎? – 2012-04-29 13:41:07

回答

4

餐廳菜單沒有任何常規形式。與其他任何要求一樣,菜單可以表示爲BCNF中的關係模式,也可以表示爲BCNF中沒有的其他模式。這是數據庫設計人員在創建模式時所做的選擇;而不是菜單信息本身隱含的內容。

您還沒有完全指定有問題的架構。假設關係:

Menu {ItemID, Name, Price} 

與兩個密鑰:{的ItemID}和{名稱}然後菜單是在BCNF相對於所述一組函數依賴的:

ItemID -> Name -> Price 
Name -> ItemID -> Price 

這些不是非關鍵傳遞因爲Name和ItemID都是候選鍵。由於Menu在BCNF中,它也在3NF中。

函數依賴關係總是以「行列式 - >從屬」的形式寫入。我沒有看到Price如何成爲決定因素(菜單上每個項目的獨特價格看起來極不可能),因此您提到的依賴關係:價格 - >項目名稱 - >項目編號沒有多大意義對我來說。如果由於某種原因價格確實是非關鍵因素,那麼上面的菜單關係當然會違反BCNF(和3NF)。

+0

謝謝sqlvogel。然而,我仍然感到困惑:爲什麼ItemID - > Name - > Price(這就是我所說的關於行列式的意思 - 謝謝你也清除它!)不是傳遞性依賴?價格取決於取決於商品ID的名稱。 3NF指出沒有任何屬性可以在傳遞上依賴於主鍵。在這裏,價格顯然違反了它。 – 2012-04-29 21:30:47

+0

這不是*鍵非傳遞依賴項,因爲兩個決定因素都是超級鍵。它是BCNF不允許的非關鍵傳遞依賴關係。正常形式對任何一個「主」鍵的依賴性沒有特殊要求。 BCNF平等地對待所有候選鍵(並且因此暗示所有超級鍵)。 ItemID-> Name-> Price簡單地表示Price取決於兩個鍵,這正是BCNF所期望和期望的。 – sqlvogel 2012-04-29 22:02:47

+0

回到這個問題,你是什麼意思?「這不是一個非關鍵的傳遞依賴,因爲兩個決定因素都是超級關鍵,它是BCNF下不允許的非關鍵傳遞依賴」? – 2014-01-27 12:03:48

2

如果菜單隻有一種語言,那麼表中有兩個鍵(id和name),每個非鍵(價格)依賴於每個鍵,滿足3NF。 4NF也是滿意的,因爲只有一個非關鍵列。 5NF和6NF負責多桌關係;因爲只有一張桌子,他們也很滿意。

如果菜單是多種語言,菜單仍然滿足第一範式(如果我們將虛擬列「語言」視爲真正的列;否則菜單甚至不是1NF),但不能滿足第二範式:沒有非鍵屬性依賴於鍵的正確子集: 這裏的模式是:columns(language,id,name,price);鍵((語言,id),(名稱[,語言])),但價格取決於膳食ID只,而不是它的訂購語言。

DB理論上,適當的分解將引入 表(ID,價格)鍵(ID) 。表(語言,ID,名稱)鍵((語言,ID),當然,這對於一家真正的餐廳來說會很不方便(想象一下獲得兩個菜單 - 一個英文菜單和一個翻譯表),唯一的好處是語言價格的獨立性是強制性的而不是暗示性的。

名稱對價格沒有依賴性:價格並不決定名稱;這是相反的方式。

+0

好的答案1月,但仍然價格 - >名稱 - > ID不是傳遞依賴?你知道我的意思嗎... 此外,菜單是英文 – 2012-04-29 15:37:40

+0

最後,你錯了,因爲ID和名稱是一個超級鍵;主鍵必須最小化,在這種情況下,ID是主鍵。 – 2012-04-29 15:45:47

+0

「6NF太滿意了」 - 你確定嗎? 「當且僅當它是由單個鍵組成,並且最多有一個附加屬性時,常規relvar纔是6NF」 - [數據庫深度:CJ日期的從業者關係理論](http://books.google.co .UK /書?ID = FU7uuHc3oNcC&PG = PA147&LPG = PA147&DQ = 6NF +鍵+加+一個+屬性&源= BL&OTS = RsUb39QBGp&SIG = SnY332OnO72Hg9bnO58TUqfzryE&HL = EN&SA = X&EI = 20ieT8CwMcKfOsDk9fsB&VED = 0CCwQ6AEwAQ#v = onepage&q = 6NF%20key%20plus%20one%20attribute&F = false) – onedaywhen 2012-04-30 08:16:40

相關問題