存储数据库

时间:2017-07-10 13:55:40

标签: mysql algorithm

我需要将客户的分发区域存储到数据库的最佳方式。

我销售的每件商品都有此属性:

  • 来自州
  • 来自城市
  • 来自邮政编码
  • To State
  • 到城市
  • 至邮政编码

我的客户经常向我列出他们愿意从我们的产品中购买产品的分销区域。

客户数据示例:

  

1)从CA,FL,HI,AK到邮政编码91367,12345,54321,98765

     

2)从11111,22222,33333到44444,55555,66666

我将数据存储在数据库中的方式如下:

我有一个表,包含:fromState,fromCity,fromZip,toState,toCity,toZip

我存储数据的方式是创建'FROM'和'TO'数据的所有可能组合,对于seocnd示例,我得到以下行:

enter image description here

问题是,有时数据太长​​,以至于我的数据库需要数百万条记录,我正在寻找更好的方法来存储我的客户分布要求,然后检查我的产品是否在他们的区域内分发。

感谢您的任何建议!

1 个答案:

答案 0 :(得分:1)

我认为实现这一目标的最节省空间的方法是制作三个表:FromToClientFrom表格来自您表格中的列,其中包含clientId的附加列,您的To表格将成为表格中的列,其中包含{{1}的其他列},您的clientId表将有一个Client,可能还有客户名称或其他识别标记。这会将你的froms和tos与你的客户联系起来,而不是彼此相关,并且有一个FROM + TO + 1存储空间,而不是FROM * TO存储空间。

要处理clientIdFrom的多对一或多对多关系,请保留建议的ToFrom表结构,但要更改为了示例,提议的To表是关系表,clientFromtoTo表将包含一列FromtoTo关系ID和一列From关系ID。您的ToclientId表格中的From列会更改为这些关系ID。结构的一个例子如下:

To

此处,从请求1匹配到请求1和2,从请求2匹配到请求3。