如果不是商品对于销售城市的划分相对固定的话
可以考虑使用分组的方式来做
也就是说 有 商品表,城市表,组表,城市组关系表,商品组关系表
1万个商品 和 880个城市 组成的关系表 如果全部添加 有880万数据
而
1万个商品 20个组 880个城市 如果全部添加 只有
(10000X20)+(20X880)
20万(商品组关系表)+19360(城市组关系表)的数据
并且实际上也不可能有这么多的数据
而且这是在 允许 一个商品对应多个组的情况下
如果一个商品只允许对应一个组
那么数据量会更小(虽然组的数据量可能会增加)
→。→被提醒了。
在极端条件下 分组的方式 也有很大的数据量
也就是说 1万个商品,有1万个分组的情况。
这种情况下 虽然数据会比 原本的多对多模式要少,但是依旧会有很大的数据量。
而还有可能的方式,就是使用位运算的方式
例{
北京的八大城区,可以用 10011001八位二进制数代替是否在该地区销售。
而在存储进数据库时 二进制数可以转化为整数存储。
}
而直接存储880位的全部城市 则数据过大,查找起来并不方便。
因此,还是需要进行分组。
而在这种分组中,每一组代表了一些城市,这些城市可以是销售区域,也可以是非销售区域。
通过位运算的方式来确定该组中每个城市是否销售。
还可以通过各种位运算来快速确定哪些城市属于销售区域。
比如,分段运算。
比如,将第一位设置成为1则代表该分组下所有城市皆属于销售区域。
位运算的方式,虽然会记录你可能用不到的信息(非销售区域的信息)
但是这些记录仅占1位的位置。
而位运算的方式,则没有了分组方式中存储关系的空间和过程。
因为位运算方式的分组,是“约定俗成”的。
相比分组的方式,位运算的方式会进行更多的运算。
并且对于每个组中的每一位代表了什么,也要进行存储——不一定存储在数据库中了。
位运算的方式并不一定适合你现在遇到的问题,
只是可能在遇到类似问题的时候比分组的方式更合适。
因此在这里记录下来。