mongodb数据库设计原则

来源:互联网 发布:淘宝加拿大运费 编辑:程序博客网 时间:2024/06/05 21:00

1.一对很少  one-to-few  可以采用内嵌文档 

person集合中

{

name:'张三',

age:20,

address:[

{country:"中国"province:"山西省"city:"长治市"}

{country:"中国"province:"山西省"city:"太原市"}

]

}

    优点:不需要单独执行一条语句去获取内嵌的内容

    缺点:法把这些内嵌文档当做单独的实体去访问

    适用场合:一对很少且不需要单独访问内嵌内容

2.一对许多(但并不是很多) one-to-many  中间引用

person集合

{

_id:ObjectID(12个字节组成)

name:"张三"

age:23

}

人员组集合

{

name:"一组"

persons:[

ObjectID("aaaaa"),

ObjectID("AAABBB")

.....

]

}

适用场合:一对多且多的一端内容因为各种理由需要单独存在的情况下可以通过数组的方式引用多的一方的。

3.一对非常多 one-to-squillions  父级引用(mongodb每个文档的最大16M

company集合

{

_id:ObjectID("company01")

name:"可为时代"

}

员工集合

{

name:"张三",

age:23,

company:ObjectID("company01")

}

适用场合:一对非常多的情况下,请将一的那端引用嵌入进多的一端对象中。

4.双向关联  在one端和many端同时保存对方的引用

person集合

{

_id:ObjectID("person01"),

name:"张三",

age:23,

group:ObjectID("group01")

}

group集合

{

_id:ObjectID("group01"),

name:"研发一组",

persons:[

ObjectID("person01")

ObjectID("person02")

]

}

优点:具有一对多的所有优点,同时在多的一方,可以很快找到少的一方

缺点:更新时需要同时更新两个集合中的引用,不能使用原子性

5.反范式

反范式Many-<one :冗余mony端的数据到one端即在one的一方保存mony的引用集合

反范式noe -<many :冗余one端的数据到many端即在many的一方保存one的引用

使用场合:读比较高,更新比较少的情况(没有原子性)

 

6.总的设计原则

a.优先考虑内嵌,除非有什么迫不得已的原因。

b.需要单独访问一个对象,那这个对象就不适合被内嵌到其他对象中。

c.数组不应该无限制增长。如果many端有数百个文档对象就不要去内嵌他们可以采用引用ObjectID的方案;如果有数千个文档对象,那么就不要内嵌ObjectID的数组。该采取哪些方案取决于数组的大小。

d.在进行反范式设计时请先确认读写比。一个几乎不更改只是读取的字段才适合冗余到其他对象中。

 

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 老婆生日送什么花 闺蜜生日送花 送母亲花 送妈妈什么花 妈妈生日送什么花 送花的讲究 送花卡片内容表白简短 送母亲什么花 送姐姐什么花 送女性朋友花排行榜 表白送花 雪中送炭锦上添花 送闺蜜什么花 结婚送什么花 教师节送什么花 妈妈过生日送什么花 送妈妈的花 探病送什么花 开业送什么花 闺蜜生日送什么花 送花怎么写浪漫话 送朋友花 送你一朵玫瑰花 送你99朵玫瑰花 病人送什么花 生孩子送什么花 母亲过生日送什么花 梦见送花 妈妈过生日送花 老婆生孩子送什么花 铁树银花送英雄 送花表情包 送男生花 送花的网站 送花图片 网上怎样送花 怎么送花 送花人网 买花网站 全国送花网站 如何网上送花