2010-06-28 47 views
0

所以我們有食物,通常是一個單一的單位和食譜,它由不同數量的不同食物組成。如何設計此RDBMS模式?

我們想追蹤一些基本的東西,如價格和營養信息。

我們將如何爲此設計RDBMS模式?

所以,這裏是可能是最明顯的解決方案:

[Foods] : ID, Name, Carbs, Protein, Fat, Price 
[RecipeIngredients] : ID, FoodID, RecipeID, AmountOfFood 
[Recipes] : ID, Name 

然而,由於配方几乎所有相同的操作的食物,我需要創建大量的重複的代碼來支持。

這裏是另一種方法:

[Foods] : ID, Name, Carbs, Protein, Fat, Price, IsRecipe 
[RecipeFoods] : ID, FoodID, RecipeID (which points to another Food), AmountOfFood 

現在所有的動作相同工作兩個。但是,僅添加特定於「食物」或「食譜」的字段會爲其他實體創建空列。

你會如何解決這個問題?你更傾向哪個?有沒有更好的辦法?

回答

2

保留您的數據庫normalized

A Recipe不是你已經注意到的Food,所以他們不應該共享一張表。

每個實體都應該在數據庫中擁有自己的表。

0

如果您必須具有此數據庫結構(+1 to Oded),請確保未使用的列爲NULL,並且您的代碼處理此問題。