类别在数据库中的实现

时间:2012-11-05 09:04:21

标签: sql mongodb database-design nosql

我正在建立一个涉及用户和教师的系统。在这个特定的系统中,我想对教师进行分类,但棘手的部分是类别是动态的,因此它们可以随时改变。

我必须有一些功能,因为我正在开发后端;

  • 第一个是 showAllCategories(),它显示了所有主要类别。
  • 第二个是 showSubcategories(),它显示了一个类别的子类别()
  • 第三个是 showContent(),在这种情况下会显示教师的信息。

在问强大的Stack-Overflowers如何有效实施之前,我想我可以使用双向链表方法,在类别表 CategoryName 之前 之后,内容,如果该类别没有后,则内容将指向教师的表格。这是我的经典SQL方法,但是我使用 MongoDB ,因为我是初学者,我想知道在这种特殊情况下我是否可以利用NoSQL的优势?

1 个答案:

答案 0 :(得分:1)

MongoDb本身支持Array类型,其行为实际上更像列表。使用$push$pull,您可以在此类数组字段中添加和删除元素。 $addToSet甚至确保没有共和党人。

现在是如何存储类别的问题。您可以使用主要类别创建一个集合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提供的灵活类型,而不必担心数据冗余。经常嵌入文档,不要忘记索引。