2013-01-23 35 views
2

我已經開始創建一個關係數據庫,其中將包含我們在現代烹飪中使用的所有基本成分。正如你所想象的那樣,將會有成千上萬的物品。我沒有太多的SQL經驗,所以我很難找到一種看似有效的存儲配料的方式。 如果你去這裏http://en.wikipedia.org/wiki/Outline_of_food_preparation#General_ingredients你可以看到我目前正在試圖放入我的數據庫的列表。什麼是更好的方式來創建我的食物數據庫?

我的數據庫目前有一個表的每個主要和子類別的食品前。一張穀物桌和一張小麥桌。起初,這似乎是可以做到的,但後來我意識到將會有數十個子類別。對於該wiki列表中的每個項目,我都必須創建更多的表格和更多的表格。我覺得這些表格太多會讓我的項目非常低效。有沒有更好的方式來創建我的數據庫?還是我在正確的軌道上?這裏是列在我的表的例子:將一個外鍵無論父表是

id INT(11),name VARCHAR(45),parent INT(11),img VARCHAR(45),desc VARCHAR(45) 

父INT(11),所以我想他們都將連接這種方式。 任何建議表示讚賞! 〜感謝

+0

我覺得這個論壇太寬泛了......但是你處於錯誤的軌道上。每種食物都應該有一個ROW--而不是TABLE。 – Randy

+0

是的,它有點寬泛,但我一直在尋找幫助困難。所以如果我把這些分類放在一行中,我會如何插入這些成分? – 88jayto

+0

題目是NORMALIZATION。你應該研究一下。根據NOUNS考慮可能會有所幫助 - 因此對於您的示例成分,CATEGORY,DISH將成爲很好的候選人。那麼你會在兩者之間的關聯表中顯示哪些食材用於哪些菜餚等。hth – Randy

回答

1

我首先不建議存儲所有這些在不同的表 - 它會推動你瘋了:-)

相反不過,我覺得你有2種選擇。

選項1(鄰接表模型) - 考慮使用單一Foods表,與FoodIdFoodNameParentFoodId,您要保存AnyOtherAttributes。這是存儲數據的最簡單方法,但返回結果可能會稍微麻煩一些,因爲您需要多次加入同一個表以返回關卡。

選項2(嵌套集模型) - 該選項仍然會有單個Foods表,但是您沒有ParentFoodId,您有2列,left_index和right_index。起初這可能有點複雜,但如果你有幾個未知的嵌套的父 - 子關係可以更容易地查詢。

看看這篇文章的一些進一步的解釋:

http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

好運。

+0

這非常聰明!從來不會猜測這是應該如何完成的。創建你自己的索引是我想要的方式。我會嘗試嵌套模型。謝謝!!! – 88jayto

相關問題