【发布时间】:2015-04-19 07:14:41
【问题描述】:
我在许多地方以不同的价格提供服务。在过渡 SQL 中,当我想在某些区域中查找显示最高和最低价格的服务(区域将选择多个位置)时,我会让包含 service_id 和 location_id 的 price_location 表进行连接和分组。
由于服务和位置非常多,我正在考虑以下几点:
service_location_price = [
{
serviceName:'s1';
,price:10
,location:'location1'
},{//to keep it simple only serviceName is here but
// there will be multiple providers for the same
// serviceName at same location but different price
serviceName:'s1';
,price:12
,location:'location1'
},{
serviceName:'s1';
,price:15
,location:'location2'
}
];
基本上是打破第二范式的平面文件数据(具有重复行)。
现在聚合和/或映射减少应该可以很好地使某个区域的服务显示最低和最高价格。或显示可用于某些服务的位置。
service 和 location 都有自己的集合,service_location_price 集合为此查询复制一些 service 和 location 值。
有些人担心重复数据,并希望以不同的方式实现(猫鼬填充匹配??)。
不确定我的选择是什么,因此希望有可能更有经验的人提供一些意见。有没有更好的方法让搜索到
服务和位置不会有太多更新,但两者之间的关系可能会发生变化、添加或删除。但是区域内的服务搜索会非常频繁地执行。
【问题讨论】:
-
我认为您提出的服务位置价格模型是一个很好的模型。你能解释一下为什么你的查询需要聚合或 map-reduce 吗?据我了解模型和您的查询,您只需要常规的
finds。 -
@wdberkeley 谢谢你的回复;回答你的问题:某个区域的服务总数,某个服务的最低最高价格(在某个区域)和某个服务的供应商总数(在某个区域)。客户宁愿没有重复的数据,并且确信 mongoose 可以像使用填充的关系数据库一样表现。我认为即使有可能它会在获取和填充后在内存中完成,所以不会很好地扩展
-
因篇幅问题已回复。
标签: javascript mongodb denormalization