我想要的類別保存到我的烹飪食譜。
像:肉醬意粉
meal-->noodle_dishes-->italian-->spaghetti_bolognese
如何保存這種繼承?
THX
我想要的類別保存到我的烹飪食譜。
像:肉醬意粉
meal-->noodle_dishes-->italian-->spaghetti_bolognese
如何保存這種繼承?
THX
如果你不介意做你的周圍類別樹的管理家務,然後由此配方進入葉(最低)水平cateogry和所有其他類別的關係都在使用外接數字平了可以使用的方案。您仍然可以使用遞歸關係來管理樹,但不會使用它來檢索/查詢收件人。
這是它會是什麼樣子:
Category
- Category ID
- Name
- (anything else you want to know about categories)
- Parent Category ID (FK to self/NULL for top level)
- Lower Bound
- Upper Bound
Recipe
- Recipe ID
- Category ID (FK - points to the lowest level/most specific category)
- (anything else you want to know about a recipe)
訣竅是下界和上界。您填寫的欄目表是這樣的:
Category:
Desserts ID=1 Parent=null {Lower=1, Upper=4}
Cakes ID=2 Parent=1 {2, 4}
Chocolate Cakes ID=3 Parent=2 {3, 3}
Fruit Cakes ID=4 Parent=2 {4, 4}
Appetizers ID=5 Parent=null {Lower=5, Upper=...}
...
所以,當你查詢recipies是沙漠,例如,你會發現有間的下限和上限的蛋糕類的類別ID的所有recipies(即在2和4之間)。
爲了使這項工作,你需要有程序代碼,將回去重新計算所有的上限和下限的在您的類別表,每當你做出改變的類別層次結構。由於這種情況很少發生,通過與對受益者的變化進行比較而很少發生。如果你想變得優雅,你可以找到方法將重新計算限制在受影響的區域。
爲了解釋概念的簡單性,我根據類別ID設置了下限和上限。顯然你不能使用增量ID來達到這個目的,因爲你的類別必須被排序。因此,您的類別表需要第二個候選鍵,當您在層次結構更改時執行遞歸限制計算時可以重新計算這個鍵。因此,在查詢時間,您使用真實(遞增)類別ID來查找葉子類別,然後使用該類別記錄的下限和上限過濾其他類別,並根據您的條件進行接合。
最簡單的將是「類別」表,對自身的外鍵,被稱爲「父類」或類似的東西。頂級類別(即用餐)在該字段中將具有NULL。
該模式在MySQL中檢索相當複雜,因爲不支持分層/遞歸查詢。 – 2011-05-02 13:29:22
你可以做到這一點作爲一個一對多的關係,例如:
category
--------------
id
cat_name
cat_parent
哪裏父類的ID
然而cat_parent引用,要知道,MySQL不支持遞歸查詢,所以使用這種設計,你不能做深度子類別搜索。我讀過它可能使用不同的設計,我只是不記得來源。
我認爲最好的辦法是不要把他們當作一棵樹,而是去標籤的路線。所以你會有一個配方表和一個配方標籤表。
因此,假如配方可能有一個名稱,類別,的ingredients--列表,並可能是一個作者或其他元數據 - 你想放置在樹中的所有你的食譜。
最簡單的方法是在食譜表中添加另一列 - parent_recipe_id - 然後假設那些具有父級ID的行是「根」,應該顯示爲基本類別。
(類別‘或配方組表克里斯的單獨的建議’將更加明確樹形結構)。
鄙視你如何建立你的數據庫.... – Ruben 2011-05-02 13:27:17
我認爲這可能是他所要求的,基於標籤,但閱讀這個問題本身並不明確。 – 2011-05-02 13:30:33
'DENY PRINT_DATA TO「* @ *」; SET PRINT_POLICY = DISALLOW LOG(「SAVE A TREE」)_ _(抱歉,無法抗拒)_ – sehe 2011-05-02 13:38:51