2009-05-15 61 views
4

テーブルに住所を1回だけ格納することについては、私は再発明を避けようとしています。一意性制約は、いくつかの一般的な状況では動作しません。データベーステーブルに重複アドレスを避ける

100 W 5th Ave 
100 West 5th Ave 
100 W 5th 

200 N 6th Ave Suite 405 
200 N 6th Ave #405 

私は挿入する前に、すべてのフィールドを正規化し、テーブル内のいくつかのフィールド全体で一意性制約を使用するためにいくつかのビジネスロジックやトリガーを実装することができますが、それはに簡単だろういくつかのケースでは、通りの住所と同じように変化するものがあります。

おそらくGPS座標に基づいて、各アドレスの普遍的な識別子になります。新しいアドレスを保存する前に、そのGUIDを参照し、GUIDがすでにAddressテーブルに存在するかどうかを確認してください。

Mapquest、Postal Serice、FedEx、または米国政府のような組織はおそらくこのようなシステムを持っています。

誰にでもこれに対する良い解決策が見つかりましたか?

は、ここで(JPAによって生成された)今、私のアドレステーブルです:

CREATE TABLE address 
(
    id bigint NOT NULL, 
    "number" character varying(255), 
    dir character varying(255), 
    street character varying(255), 
    "type" character varying(255), 
    trailingdir character varying(255), 
    unit character varying(255), 
    city character varying(255), 
    state character varying(255), 
    zip integer, 
    zip4 integer, 
    CONSTRAINT address_pkey PRIMARY KEY (id) 
) 

答えて

0

私はUSC WebGISのサービスに満足しています。いいサービスですから、簡単に申し込むことができます。

ジオコードは、ストリートアドレスのユニークなキーとしては適していませんが、いくつかの理由があります。たとえば、ジオコーディングでは、コンドミニアム・コンプレックスまたはアパートメント・ビルディングの異なるユニットを区別できません。

私は、ジオコーディング結果から解析されたアドレスを使用して、ストリート番号、ストリート名、単位、市区町村、州、および郵便番号にユニークな制約を付けることにしました。それは完璧ではありませんが、私がやっていることのために働きます。

+0

「私は車輪を再発明するのを避けようとしています。似たような質問をしている開発者は、それが決して前に行われたとは思わないようです。とにかく、私はあなたのニーズに応えるソリューションを見つけられたことをうれしく思っています...でも、私はSmartyStreetsと呼ばれる会社で働いています。アドレスリストを確認し、重複のフラグを立てます。リストをアップロードするか、彼らはLiveAddressのAPIで入力されます。私たちはこれらの作業を行うためにCASS認証を取得しています。住所データに関するご質問があれば、私はあなたを個人的にお手伝いいたします。 – Matt

4

は、Googleマップで住所を検索して、彼らが使用するスペルを使用します。

+0

注意点として、Googleは住所の存在を確認していません。それはそれらを近似するだけです。したがって、Googleが「結果」として返すアドレスの中には、最良の推測、重複、またはまったく存在しないものがあります。 – Matt

+0

これをエンタープライズソフトウェアのオプションとして調査し、Maps for BusinessジオロケーションAPIは1年あたり10,000ドル以上の範囲で開始します – Caleb

0

構文などの正規表現をサポートする必要があります。あなたは、トークンを解析し、それらを照合して、それらを略語に展開または縮小する、ある種のオートマトン関数を思いつくことができます。私は*へのサポートを与える関数のようにglob()を調べるでしょうか? UNIX上での迅速なダーティ修正など。

0

私はアドレス検証や正規化を求めていませんでしたが、アドレス検証は良い考えです。重複したレコードを避けるために、各住所に固有の識別子が必要です。

ジオコーディングが解決策を提供できるようです。ジオコーディングを使用すると、入力は通りの住所になり、出力は特定の建物を解決するのに十分な精度で緯度と経度の座標になります。

私が思ったよりも、ストリートアドレスのあいまいさにはより深刻な問題があります。これは、ジオコーディングに関するWikipediaのページのものです。

"マサチューセッツ州ボストンには複数の都市があり、ストリート名を変更せずに複数のワシントンストリートがあります。"

ジオコーディングに関するWikipediaのページには、ジオコーディングを実行するためのリソースのリスト(無料)があります。

2

最初に、アドレスを一度しか格納せず、一意のIDで識別するように強制された理由を慎重に考え直してください。それは複雑さを増し、変化する性質とさまざまなアドレスに対抗し、実際に解決しようとしている実際の問題に実際には正しく対処しないかもしれません。重複アドレスの問題については、http://semaphorecorp.com/mpdd/mpdd.htmlを参照してください。

次一意米国メールを受信するアドレスを識別する35文字の識別子作成:

ハウスまたは私書箱番号[USPS 10文字最大]
オプションユニットの略称[APT/STE /など、USPS 4文字の最大]
オプションのアパートの番号[USPS 8つの文字の最大]
ZIPコード[USPS 5文字]
+4コード[USPS 4文字]
MMYR [月年、4つの文字]

同じ建物内のSTE 1とAPT 1のような(まれな)ケースを区別するために、ユニットの略語が必要です(すべてのユニットタイプのリストについては、usps.comの出版物28を参照してください)。 +4コードは、郵便配達を受けていない(例えば、郵便局のPOボックスを使用する)住所(通常は田舎)では利用できないため、それらの住所のIDを作成することはできません。 UPSストアのような場所でプライベートメールボックス(PMB)を区別する場合は、PMB番号を追加する必要がありますが、PMBは郵便番号ではなく店舗によって管理されるため、必要な文字数は予測できません4または5文字で十分です)。同じ住所に異なる+4コードまたは別の月の別のコンポーネントがある可能性があるため、識別子はUSPS ZIP + 4データベース月/年版でのみユニークに保証されます。

関連する問題