2011-07-31 59 views
0

我想分解幾個表到BCNF。我認爲第一個分解是正確的,但我不確定其他分解是否可以分解。任何幫助表示讚賞BCNF分解(數據庫設計)

**make(id, name, est, founder, city, state)** 

id->name; 
name->est, city, state, founder; 
city->state 

New Relations: [Key(id),name], [Key(name),est,city,state,founder], [Key(city),state] 

**model(id, makeId, name, year, category)** 

id->makeId, name; 
name->year, category (not superkey, but can't really decompose) 

**features(id, modelId, abs, tpms, sidebags, drl)** 

id->modelID, abs, tpms, sidebags, drl 

**user(id, name, pass, first, last, phone, isAdmin)** 

id->name, pass, isAdmin; name->first, last, phone 

**selling(id, price, modelId, mileage, userId)** 

id->price, modelId, mileage, userID 

回答

1

BCNF很簡單:只要確保在一個單一的關係屬性組之間的所有依賴性是對關係的依賴超密鑰。你的第一個關係很近,但第二個關係需要省略「狀態」。通常,人們停留在3NF,因爲並不是所有與FD的關係都有依賴性保留BCNF分解。你需要幫助分解其他關係嗎?如果你需要的話,我會幫忙的。

編輯:幫助其他關係。

銷售和功能都很好。模型和用戶需要在Name上拆分才能在BCNF中使用;你指出這不是你可以爲模型做的事情。爲什麼?名字意味着箭頭右邊的東西,對吧?

+0

是的,如果你能幫助我分解其他人,將不勝感激。我仍然在學習如何應用該算法,因此在這些情況下如何實現這一算法會有很大的幫助。 – Leif

+0

lhs必須是一個超級鍵,對嗎?如果我把它分解爲:[Key(id),makeId,name] [Key(name),year,category]是否正確?謝謝您的幫助。 – Leif

+0

保持第一名,是的。任何給定關係中的依賴關係必須位於該關係的超級鍵上;那個超級鍵不一定是原來的超級鍵。你在上面的評論中提出的分解是一個正確的,依賴保持的,無損的BCNF分解。 – Patrick87