0

オンライン ショッピング カートがあり、チェックアウト時にユーザーが郵便番号を入力します。

お支払い方法は、代金引換とネットバンキングの2種類。宅配便は、特定の地域(郵便番号で識別)にのみ発送されます。また、代金引換とネットバンキングでは、許可されている郵便番号のリストが異なります。(リストの長さ = 代金引換の場合は約 2500、後者の場合は約 10,000)

これらのリストをデータベースまたはフラット ファイルに保存する必要がありますか?

データベースの場合は を使用してクエリを実行しSELECT、ファイルの場合は配列内のリスト全体 (または部分的) を読み取ってから、バイナリ検索を実行できます。

次の点を考慮して、どちらが速いでしょうか-

  1. 現在、宅配サービスは 1 つしかありませんが、将来的にはさらに多くのサービスがあり、独自のさまざまなリストがあります。したがって、複数のリストを検索する必要があります。
  2. 主に読み取りがあり、書き込みははるかに少なくなります。また、リストは後でカスタマイズできるようにする必要があります。

私はデータベースを選択したでしょうが、それによって処理が遅くなるかどうかはわかりません。また、データベースの設計に時間をかけたくありません。ファイルの方が優れている場合もあります。

編集: ABC と DEF という 2 つの宅配会社があるとします。ファイルには、ABC_COD.txt、ABC_net.txt、DEF_COD.txt、DEF_net.txt の 4 つのファイル (たとえば) があります
。したがって、顧客が代金引換を希望する場合は ABC_COD を検索し、そこにない場合は DEF_COD などを検索します。これはコストがかかるようですが、簡単に拡張できます。

ここで、データベースを考えてみましょうAllowed_zipcodes。5 つの列を持つテーブルがあります。x 社が y コードに対してタラを提供している場合、対応する列はtrue、そうでない場合はfalseです。これはルックアップには適しているように見えますが、会社を追加するとスキーマが変更されます。

今後の変更やデザインも併せてご検討ください。

4

2 に答える 2

3

疑いの余地のないデータベース。より論理的で、よりスケーラブルです。

于 2012-06-22T07:18:40.697 に答える
1

何らかの理由で、magenta フレームワークを確認する必要があると思いますが、既にいくつかのパッケージに含まれているのではないでしょうか?

ただし、自分でやりたい場合: データベース モデルの出発点を示します。

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 に答える