2012-11-05 83 views
1

我正在構建一個涉及用戶和教師的系統。然而,在這個特定的系統中,我想對老師進行分類,但棘手的部分是類別是動態的,因此他們可以隨時更改。類別在數據庫中的實現

我必須有一些功能,因爲我正在開發後端;

  • 第一個是showAllCategories(),其顯示所有的類別。
  • 二是showSubcategories()它顯示了一個類別()
  • 三是showContent(),在這種情況下顯示了老師的信息的子類別。

問強大的棧Overflowers怎麼會變成這樣可以有效地實現之前,我以爲我可以在那裏按類別表類別名稱之前後,內容,如果用一個雙向鏈表的方法該類別沒有後,內容將指向老師的表格。這是我的經典SQL方法,但是我使用MongoDB,因爲我是初學者,不知道在這種特殊情況下我是否可以利用NoSQL的優勢?

回答

1

MongoDb本地支持Array類型,其行爲實際上更像列表。使用$push$pull,您可以添加和刪除此類數組字段中的元素。 $addToSet甚至可以確保沒有dublicates。

現在是如何存儲類別的問題。你可以做一個集合categories與主類別,並且他們將有每一個領域,有子類的數組:

{"_id": "science", "sub": ["chemist", "physicist", "biology"]} 
{"_id": "languages", "sub": ["english", "german", "spanish"]} 

teacher收集,另一方面將不得不嵌入式陣列文件,老師的類別。它們與categories集合中的複製品相同,但不包含教師視圖中不需要的字段。這樣你就避免了連接,因爲它們在MongoDB中不存在。

{ 
"_id": ObjectId(...), 
"name": {"first": "Foo", "last": "Bar"}, 
"categories": ["chemist", "biology"] 
} 

其餘的我相信你能想到。

此外:簡而言之,使用MongoDB提供的靈活類型,不用擔心數據冗餘。經常嵌入文檔,不要忘記索引。

+0

感謝您的好方法。不過,我確實有一個問題。既然你已經提到過,我會將主要類別與代表子類別的列表一起存儲。假設我們有這樣的情況,其中主要的分類id [1,1]與子分類[2,3,4]。類別3是一個明顯的子類別,因此我應該在哪裏存儲子類別3,因爲它可以有多個子類別,而不是主類別 – Ali

+0

哦,我不知道您可以擁有子子類別。但這根本不是問題,因爲MongoDB是動態的。這意味着您可以將子子類別存儲在列表中:'[{id:cat1},{id:cat2,subs:[...]},{id:cat3}]''。如果有'subs'字段,該應用程序會知道有子類別。因此你可以建立一個分層樹。 – Lanbo

+0

這真的很清楚。非常感謝回覆! – Ali