2013-05-16 43 views
0

我想設計一個小吃店自動化系統(回答第一個問題 - 不,它不是一個家庭作業,它是爲了學習的目的),我有一個問題與食譜和如何呈現他們在數據庫中。我有兩個選擇:食譜數據庫模型建議

選項1:

[Ingredients] -> [IngrID, IngrName] 
[Recipe] -> [RecipeID, RecipeName] 
[IngRecipe] -> [IngrID, RecipeID] 

在這種情況下,第三臺是一個典型的多到多表,模型看起來是正確的,它是一塊蛋糕與操縱的數據使用實體框架。但我也想跟蹤數量。一般來說,我使用成分作爲表插入新的purcheses。如果配料存在,只需更新金額即可。

選項2

現在,如果我加列「金額」作爲一列IngRecipe,整體構思許多一對多表消失,我再也不能用實體模型滿山遍野自動。但我似乎無法爲這一專欄找到更合適的地方。我會在哪裏以及如何說「好吧,給我100克雞胸肉,並添加到任何配方」

任何幫助表示讚賞。提前致謝!

+1

'模型看起來是正確的,它是一塊蛋糕操縱'你可以澄清,如果這個數據庫是隻用於甜品食譜? – 2013-05-16 06:20:01

+0

不,不僅。我的意思是操縱數據非常簡單。 – sis

回答

1

這是一個實體模型開始,考慮:

RecipieIngredients -> Recipe (FK), Ingredient (FK), IngredientQuantity 
         Key over (Recipe, Ingredient) 

需要注意的是仍然一個MM的關係(數量不是PK的一部分,也不參與FK),只是更多的相關數據這對關係對。名稱可以更改,但在某些時候,此必須在歸一化關係模型中表示爲M-M關係。

不要讓框架破壞一個很好的規範化設計 - 我希望EF能夠應付這些微不足道的場景;甚至LINQ2SQL都可以。

+0

嗯,是的,現在...這張表似乎對於金額列的合乎邏輯的位置,但是然後我失去了純粹的M-M關係。讓我解釋我的意思。如果我們說我們沒有任何amoun列,只是PK,FK列。 我可以這樣做: 食譜r =新食譜(); 產品product = context.Products.FirstOrDefault(p => p.ID ==從表單獲得的任何ID); r.Products.Add(product); – sis

+0

如果我添加金額,那麼EF會添加M-M表,因爲它不會再看到純粹的結點表,並且我無法從食譜模型中訪問原料。 r.Products.Add(product);不再被提供。我不認爲我應該在每張表中手動更新,因爲那太愚蠢了 – sis