2015-09-27 114 views
0

在阅读文章http://blog.mongodb.org/post/88473035333/6-rules-of-thumb-for-mongodb-schema-design-part-3章节:“经验法则:您的彩虹指南”我遇到过这样的话:嵌入和反规范化。反规范化意味着什么?

一:有利于嵌入,除非有令人信服的理由不

五:考虑写/非规范化当读取率。一个主要被读取并且很少更新的字段是非规范化的一个很好的候选者:如果你非规范化一个经常更新的字段,那么额外的查找和更新所有实例的工作可能会压倒从非规范化中获得的节省。

我知道嵌入是嵌套文件,而不是写单独的表/集合。

但我不知道什么denormalizing手段。

回答

2

反规范化与normalization相反,这是设计像MySQL这样的关系数据库的一个很好的实践,您可以将一个逻辑数据集分解为多个独立的表以减少冗余。

由于MongoDB不支持表的联接,所以如果属性读取频繁且更新不足,则您可以将属性复制到两个集合中。

EG:您希望将数据保存有关一个人,要保存人的性别:

在SQL数据库中,你会创建一个表的人,一张桌子性别,存储两性的外键在人员表中输入ID并执行连接以获取完整信息。这种“男性”和“女性”只存在一次价值。

在MongoDB中,你将节省的性别中的每个人,值“男性”和“女性”可以存在多个次,但查找速度更快,因为数据是在集合中的一个对象紧密耦合。

+0

这是否意味着性别只能在人身上或独自生活? – Jamie

+1

在网上存在非规范化的网上性别,而不是针对其自己。如果你想在其他地方使用它,你也必须在那里创建它。 – Simulant