0

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

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

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

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

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

  1. 现在只有一种快递服务,但将来会有更多,并且有自己的不同列表。所以我需要在多个列表中搜索。
  2. 主要是读,写会少得多。此外,该列表应该在以后进行自定义。

我会选择数据库,但我不知道它是否会使事情变慢,而且我不想花时间设计数据库,当文件可能更好时。

编辑: 假设有 2 家快递公司 ABC 和 DEF。
对于文件,我将有 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(boolean)、ABC_net(boolean)、DEF_COD(boolean)、DEF_net(boolean)。如果 x 公司为 y 代码提供 cod,则对应列有true,否则false。虽然这看起来有利于查找,但添加公司需要更改架构。

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

4

2 回答 2

3

数据库,毫无疑问。更合乎逻辑,更具可扩展性。

于 2012-06-22T07:18:40.697 回答
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
于 2012-06-22T08:29:41.507 回答