1

I have an app where shop owners can enter 10 zip codes in which they can provide services. Currently these zip codes are stored in single table column. Now what is the best and efficient way to do search based on this? Should I store all zip codes(all US zip codes) in a table and establish many to many relationship or do text search based on the current field using thinking sphinx?

4

3 に答える 3

3

データベース担当者の視点 . . .

Sphinx の使用について話しているので、このように 10 個の郵便番号すべてを 1 つの行に格納していると思います。

shop_id  zip_codes
--
167      22301, 22302, 22303, 22304, 22305, 22306, 22307, 22308, 22309, 22310

検索や他のいくつかの理由から、このように保存する方がはるかに良いでしょう。

shop_id  zip_codes
--
167      22301
167      22302
167      22303
167      22304
167      22305
167      22306
167      22307
167      22308
167      22309
167      22310

-- Example in SQL.
create table serviced_areas (
  shop_id integer not null references shops (shop_id), -- Table "shops" not shown.
  zip_code char(5) not null,
  primary key (shop_id, zip_code)
);

この 1 つの変更を行った後は、停止することをお勧めします。

ただし、dbms が正規表現をサポートしている場合は、データベースに他の変更を加えることなく、データの整合性を大幅に向上させることができます。この種の dbms サポートにより、zip_code 列に 5 つの整数のみが含まれ、文字が含まれていないことを保証できます。(5 つの整数と文字なしを保証する他の方法があるかもしれません。)

郵便番号のテーブルを使用すると、データの整合性がさらに向上します。しかし、ショップのオーナーは最初から有効な郵便番号を入力することに既得権を持っており、これ以上努力する価値はないと簡単に主張できます。郵便番号は頻繁に変更されます。郵便番号の「完全な」表が非常に長い間正確であるとは思わないでください。また、新しい郵便番号と期限切れの郵便番号の両方を処理するための明確な手順が必要です。

-- Example in SQL
create table zip_codes (
  zip_code char(5) primary key
);

create table serviced_areas (
  shop_id integer not null references shops (shop_id),
  zip_code char(5) not null references zip_codes (zip_code),
  primary key (shop_id, zip_code)
);
于 2012-10-25T15:32:54.823 に答える
1

sphinx を使用して地理空間検索を行う場合は、データベースに郵便番号と緯度/経度が必要になります (実際には、テキスト ファイルまたは xml を使用できると思います)。

地理空間検索とは、「現在地から 20 マイル以内の店舗を探す」のようなものです。

于 2012-10-25T22:50:48.603 に答える
0

柔軟性と効率性のために、私は 1 番を選びます ....

「すべての郵便番号をテーブルに保存し、多対多の関係を確立する」

...他の郵便番号データ フィールド (都市、州、郡、緯度/経度など) も格納する必要があると仮定します。その場合、交差点は次のようになります: shop_id から zipcode_id(s)。ただし、郵便番号データ フィールドを拡張する必要がない、または拡張していない場合は、実際の郵便番号 (id ではない) への shop_id を持つ単一の個別のテーブルで問題ないと思います。

于 2012-10-29T16:23:47.273 に答える