最近公司正在研发一个医疗行业的数据库,收录医疗创业公司,人,以及投资机构和医疗编辑们的知识,并将它们关联起来,以便后期的数据分析和编辑选题选素材。
在这种需求下,我们选用了Mongodb这种介于nosql和关系型数据库之间的一种数据库,本质上Mongodb不能单纯的归类为非关系型,虽然他是nosql文档型数据库,但并不意味着它不能有关系,纯nosql数据库应该是Redis,memcached这类key-value数据库,Mongodb是一种特殊的nosql,它采用json的方式存储数据,操作和使用都非常灵活,没有关系型数据库严格的类型长度和复杂的查询,我们的需求对于一个字段来说希望他是灵活的,但是也希望它能处理一些关系,所以Mongodb最适合我们。
传统关系型数据库在涉及一对多的情况下,通常会设置外键来关联,在涉及多对多的情况下,会采用中间表的方式。而Mongodb有个黑科技,因为它是以json存储的,所以,字段类型可以是Array,这样,就可以很方便的实现1 to n的情况,n to n也可以很方便的实现。
下面就说一下Mongodb的几种建模方式,网上的帖子大都是以1 to n为例,这里我们就以最复杂的n to n来说
{ name: ‘Kate Monster1‘,
_id: ObjectId(‘ABCD‘), addresses : [ { street: ‘123 Sesame St‘, city: ‘Anytown‘, cc: ‘USA‘ }, { street: ‘123 Avenue Q‘, city: ‘New York‘, cc: ‘USA‘ } ] }
{
name: ‘Kate Monster2‘,
_id: ObjectId(‘ABCE‘),
addresses : [
{ street: ‘123 Sesame St‘, city: ‘Anytown‘, cc: ‘USA‘ },
{ street: ‘123 haidian E‘, city: ‘Beijing‘, cc: ‘CHA‘ }
]
}
零部件(Part): { _id : ObjectID(‘AAAA‘), name : ‘xxx‘, price: 3.99 }
{
_id : ObjectID(‘BBBB‘),
name : ‘xxx2‘,
price: 5.99
}
产品(Product):
{
_id : ObjectID(‘ZZZZ‘), name : ‘Knife1‘, parts : [ { part_id: ObjectID(‘AAAA‘), cost: 5 }, { part_id: ObjectID(‘BBBB‘), cost: 7 } ] }
{
_id : ObjectID(‘YYYY‘),
name : ‘Knife2‘,
parts : [
{ part_id: ObjectID(‘AAAA‘), cost: 8 }
]
}
原文:http://www.cnblogs.com/geoffgu/p/6385791.html