mongo是非关系数据库,联表查询的能力比较弱,所以要采用非范式的数据库设计。既然有子分类,那分类肯定需要单独一个集合。一个文章关联多个分类,就是一个字段数组保存分类信息就好了。
mongo提倡通过冗余提高应用的查询效率。就是对于文章的分类而言,什么是最重要的:分类id是最重要的,所以必须存储。集成分类的主要目的是什么,显示所属分类的名称,所以可以直接把分类名称冗余到文章分类下面。那分类的名称改变了怎么办?mongo有说明,让应用端自己处理同步:就是通过api更改分类名称的时候,也需要通过修改包含该分类的文章下的冗余数据。这个地方不需要实时,因为分类id总是正确的,所以可以通过广播,或者队列来处理同步的事件,复杂的就放在晚上。业务一定要有所取舍,诸如github你更改名称都需要转一会儿,才能修改完。一般情况下,一定要限制修改,慎重修改。
分类基本设计
{
"_id":"asfsaf",
"name":"",
"parent":""
}
文章分类字段
{
"category":[
{
"_id":"asfsafsa",
"name":"asfasfas"
},
{
"_id":"asfsafsa",
"name":"asfasfas"
}
]
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…