用于搜索邮政编码的文件或数据库?

时间:2012-06-22 06:40:41

标签: php mysql sql

我有一个在线购物车,结账用户输入他的邮政编码。

有两种付款方式,即货到付款和网上银行。快递服务仅运送到某些区域(由邮政编码标识)。允许的COD和网上银行的邮政编码列表有所不同。 (列表长度= COD约为2500,后者约为10,000)

我应该将这些列表存储在数据库还是平面文件中?

对于数据库,我将使用SELECT查询,对于文件,我可以读取数组中的整个(或部分)列表,然后对其进行二进制搜索。

考虑到以下几点,哪一个会更快 -

  1. 现在只有一个快递服务,但将来会有更多,并且有不同的自有列表。所以我需要搜索多个列表。
  2. 主要是阅读,写作会少得多。此外,该列表应该可以在以后定制。
  3. 我会选择数据库,但我不知道它是否会让事情变得更慢,而且我不想花时间设计数据库,当文件可能更好。

    修改 假设有2家快递公司ABC和DEF 对于 file ,我将有4个文件(比方说)ABC_COD.txt,ABC_net.txt,DEF_COD.txt,DEF_net.txt。因此,如果客户选择COD,我会搜索ABC_COD,如果不在那里,我会搜索DEF_COD,依此类推。好吧,这似乎很昂贵,但它也很容易扩展。

    现在考虑数据库,我将有一个表Allowed_zipcodes,有五列:zipcode(int / varchar(6)),ABC_COD(布尔值),ABC_net(布尔值),DEF_COD(布尔值),DEF_net(布尔值) )。如果x公司为y代码提供cod,则相应的列为true,否则为false。 虽然这对于查找似乎很有用,但添加公司涉及模式的更改。

    请考虑未来的变化和设计。

2 个答案:

答案 0 :(得分:3)

数据库,没有任何疑问。更具逻辑性,更具可扩展性。

答案 1 :(得分:1)

出于某种原因,我认为你应该看看洋红色框架,是不是已经存在于某些软件包中?

但是如果你想自己做:只是为了给你一个关于数据库模型的起点:

carrier
        id(int) | name (varchar)

zipcodes
        start(int) | end(int) | carrier(fk::carrier.id)

例如:

carrier
        1 | UPS
        2 | fedex

zipcodes
        1000 | 1199 | 2
        1000 | 1099 | 1

查询您的邮政编码和可用的运营商:

SELECT carrier.name 
FROM zipcodes 
LEFT JOIN carrier ON zip codes.carrier = carrier.id
WHERE
   zipcodes.end >= :code
AND
   zipcodes.start <= :code