我有一个在线购物车,结账用户输入他的邮政编码。
有两种付款方式,即货到付款和网上银行。快递服务仅运送到某些区域(由邮政编码标识)。允许的COD和网上银行的邮政编码列表有所不同。 (列表长度= COD约为2500,后者约为10,000)
我应该将这些列表存储在数据库还是平面文件中?
对于数据库,我将使用SELECT
查询,对于文件,我可以读取数组中的整个(或部分)列表,然后对其进行二进制搜索。
考虑到以下几点,哪一个会更快 -
我会选择数据库,但我不知道它是否会让事情变得更慢,而且我不想花时间设计数据库,当文件可能更好。
修改 假设有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
。
虽然这对于查找似乎很有用,但添加公司涉及模式的更改。
请考虑未来的变化和设计。
答案 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