2012-06-22 97 views
0

我有一個網上購物車,在結帳時用戶輸入他的郵政編碼。用於搜索郵政編碼的文件或數據庫?

有2種付款方式,貨到付款和網上銀行。快遞服務僅發送到某些區域(通過郵政編碼標識)。 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,有五列:郵政編碼(INT/VARCHAR(6)),ABC_COD(布爾),ABC_net(布爾),DEF_COD(布爾),DEF_net(布爾)。如果x公司提供y代碼的鱈魚,則相應的列有true,否則爲false。 雖然這看起來不錯,但增加一家公司會涉及模式的變化。

請考慮未來的變化和設計。

+0

您是否已經在您的應用程序中使用數據庫? – duffy356

+0

@ duffy356:是的,我們正在使用Magento框架購物車。 –

+0

郵編範圍如何?例如2003到2199是具有相同交付細節的一個區域..我想你的數據庫模型應該類似於此。 – stUrb

回答

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 
+0

你的想法看起來不錯!但是我還沒有得到Courier公司的名單。將不得不看它稀疏或密集。我只需要2個zipcodes表,如cod_zipcodes和net_zipcodes。很好,可擴展。 –

+0

當你有兩個完全相同的表(cod_zipcodes和net_zipcodes)時,你應該真的考慮合併它們;這是完全相同的數據分佈在兩個表...例如:我想知道什麼交付方法是可用的9999 - >然後在您的設置,你將不得不查詢兩個表並加入他們;如果你想添加第三個載體怎麼辦?另一張桌子? http://en.wikipedia.org/wiki/Database_normalization – stUrb

+0

你沒有明白我的觀點。鱈魚和網上銀行是2種付款方式。客戶會選擇其中的任何一個。我只需查詢一個表,並且不需要連接。如果它是COD我查詢cod_zipcodes。如果有第三個或更多的承運人,我只是在2表中添加範圍,當然,在「承運人」中。 –

3

數據庫,沒有任何疑問。更合理,更具可擴展性。