MongoDB一对多模式的三种设计方案
今天读了篇文章,关于mongodb里,一对多模式下的schema设计方案,感觉说的挺清晰,所以分享一下。原链接:
问题:
数据库设计中,数据之间的引用不可避免,其中常见的模式就是一对多。举个例子:
Person和Addresses
Person是一个对象,地址是一个对象,一个Person可以有若干个地址。
方案:
1,One-to-Few(一对有限数量的多)
例如上例中的Person和Address,一个Person基本只有少数量的居住地址,并且在很大程度上,没有单独读取Address对象的需求(也就是说是否有必要单独建立一个adress的表格),这种情况下采用嵌入式模式(embedding):
2,One-to-Many(一对千量级的多)
例如Product(产品)和Part(配件),一个产品,例如汽车,可以有数百个配件,而且配件通用性,也导致有需求单独对于配件进行查询,所以考虑到数量和应用,这种情况下适合采用child reference(在Product中添加引用数组)
Part:
Product:
3,One-to-Squillions(一对无数)
例如分布式系统的日志,每个机器(Host)会产生大量的日志记录(record),这种情况不适合child reference,也就是说,引用数组的长度无法控制,很可能越界,所以这种情况下适合采用parent reference(在每条record中,添加一个反向引用,指向Host)
Host
Record