世界のすべての住所に共通の住所データベース設計はありますか?


122

私はプログラマーであり、正直に言うと、世界の住所の構造がわからないのですが、私の国ではどのように構造化されているのでしょうか。1つのIDでちょうど識別され、世界のすべての住所格納するのに使用する、高速なクエリと動的に簡単なので、それはする必要があります
おかげで多くのことを



住所について質問しましたが、すべての回答は住所についてです違いは何ですか?)。おそらくタイトルを変更する必要がありますか?
wrygiel

回答:


123

標準的なフィールドセットで、さまざまな国の住所を表すことができます。名前付きまたは番号付きの建物が配置されている名前付きアクセスルート(大通り)の基本的な考え方は、中国を除いてかなり標準的です。その他のほぼ普遍的な概念には、次のものがあります。集落に名前を付ける(市/町/村)。地域に名前を付け、英数字の郵便番号を割り当てます。郵便番号は郵便番号とも呼ばれ、一部の国でのみ純粋に数値であることに注意してください。本当に汎用的にしたい場合は、多くのフィールドが必要になります。

UPU Universal Postal Unionは、多くの国の住所データを標準形式で提供しています。UPUフォーマットは、国全体のすべての住所(使用可能なフィールド精度まで)を保持しているため、リレーショナルであることに注意してください。すべての可能なアドレスのごく一部のみが格納される顧客の住所を格納する場合は、すべてのフィールドと1行に1つの住所を含む単一のテーブル(またはフラット形式)を使用することをお勧めします。

アドレスを格納するための適切な形式は次のとおりです。

  • 住所行1〜4
  • 地域
  • 領域
  • 郵便番号(または郵便番号)

アドレス行1〜4は、次のようなコンポーネントを保持できます。

  • 建物
  • サブビルディング
  • 構内番号(家屋番号)
  • 敷地範囲
  • 大通り
  • サブ大通り
  • 二重依存ローカリティ
  • 地方

多くの場合、使用される住所行は3つだけですが、これでは不十分な場合がよくあります。もちろん、正式な形式ですべてのアドレスを表すためにさらに多くの行を要求することも可能ですが、コンマを常に行区切り文字として使用できるため、情報を引き続き取得できます。

通常、データの分析は地域、地域、郵便番号、国ごとに行われ、これらの要素はユーザーがデータを入力するときに理解するのがかなり簡単です。これが、これらの要素を個別のフィールドとして格納する必要がある理由です。ただし、ユーザーに郵便番号または地域の提供を強制しないでください。これらはローカルでは使用できません。

局所性、特にマップの局所性と郵便の局所性の違いが不明確になることがあります。郵便局地は、近くの大きな町である可能性がある郵便局によって見なされる地域です。ただし、郵便番号は通常、問題や矛盾を解決し、公式の郵便地名が使用されていない場合でも正しく配信できるようにします。


1
UPUのURLを教えてもらえますか?(ええ、私はそれを見つけることができたと知っています-しかし、最良の答えは人々に検索を行わせることにはなりません。)
ジョナサン・レフラー

upu.int/post_code/en/…を試して、ドロップダウンから適切な国を選択してください
バロウク2009年

UPU Post * Code製品のURLを追加
Edward Ross

17
また、一部の国(アイルランドなど)では郵便番号を使用していません。それが必須のフィールドマンであるため、私が郵便番号としてna(該当なし)を入力しなければならなかった回数に1セントがあった場合。。。今では5〜6セントになるでしょう:)
Binary Worrier

UPUにダウンロード可能なリストがある場合、現在、彼らはそれらを非常によく非表示に保つために良い仕事をしています。
Jahmic 2013年

47

見ていデータベースの回答を。具体的には、これは多くのケースをカバーします:

(すべて可変長文字データ型)

AddressId
Line1
Line2
Line3
City
ZipOrPostcode
StateProvinceCounty
CountryId
OtherAddressDetails

ここに画像の説明を入力してください


私は反対票を投じませんでしたが、これが機能する唯一の方法は、AddressIdとLine1を除くすべてのフィールドがオプションである場合だったと思います。その場合、それはあまり役に立ちません。

11
データタイプは重要です。すべての国に整数の郵便番号があるわけではありません。同僚がカナダの顧客とすばやくこれを見つけた場合。
エリック、

1
@Eric:Idフィールド以外のすべてのフィールドは文字データ型です
ミッチウィート

2
国IDには、ISO 3166の2文字(または3文字)の国コードを使用する必要があります。提案されたスキーマでは、分析された住所を保存できます。フォーマット方法については説明しません。(ああ、英国には英数字の郵便番号-IP31 3GH、SE1W 9PQなどがあります。2番目のグループは常にNAAだと思います。最初のグループはAで始まり、少なくとも1つのN(A =アルファ、N =数字)を含みます)、しかし、私を驚かせるものはありません。)
ジョナサン・レフラー

@ニール:その通り。国ごとに非常に多くのバリエーションがあるため、単一のテーブルを使用してデータベースがそれを検証することを期待することはできません。
Dave Sherohman、2009年

26

このデータを保存する主な目的は何ですか?実際にその人にメールを送るつもりですか?人口統計、人口を追跡しますか?いくつかの基本的な認証/検証の一部として、正しいアドレスを発信者に尋ねることができますか?上記のすべて?上記のどれでもない?

実際のニーズに応じて、次のいずれかを決定します。a)それは本当に問題ではなく、フリーテキストアプローチを採用するか、b)すべての国の構造化/特定フィールド、またはc)国固有のアーキテクチャ。


理にかなっています。この問題の適切な解決策を探していますが、さまざまな解決策があります。あなたが言ったように:実際の要件から選択するのがおそらく最善です。
displayname

12

時々、あなたが通りの住所に行くことができる最も近いのは都市です。

私はかつてインドのすべての中学校をGoogleマップに配置するプロジェクトを持っていました。私はGoogle APIを使用して洗練されたプログラムを作成し、それは非常に簡単だと思いました。

次に、クライアントからデータを取得しました。学校の住所には、「市場の向かい、理髪店の隣」や「古いバス停近く」などがありました。

残念ながら、Google APIはその形式をサポートしていないため、作業が非常に困難になりました。


2
アジアの住所もこのことで悪名高い。"73rd Block West Ninjang St、Building 2、Take 2 Second Upper Elevator、Office complex side side of food court、468th Industrial District、Shanghai 456789" ...
ruhnet

9

国際住所の場合、情報をフィールドに分割すると、情報をフォーマットする方法を見つけるのが非常に困難になります。たとえば、イタリアの住所では次のものが使用されます。

<street address>
<zip> <town> <region>
<country>

といった

Via Eroi della Repubblica
89861 Tropea VV
Italy

これは、2行目の米国の住所の順序とはかなり異なります。

SOの質問も参照してください。

タグ「郵便番号」も確認してください。


編集:リージョンとタウンの逆順-UPUごと


5

多分これは便利です:https : //gist.github.com/259744 プロジェクトについて、ISOコード、トップレベルドメイン、電話コード、車の記号、長さ、正規表現など、世界のすべての国に関する情報の表を収集しましたzip。残念ながらドイツ語のみの国名とコメント...


2

自由形式でフィールドに行く準備ができているかどうかに依存します。1つの自由形式の住所フィールドは常に機能しますが、地理の絞り込みにはほとんど役立ちません。

あなたが持つ問題は、国によって地理的階層のレベルにあまりにも多くの変動があるということです。いや、国によってはどこにも「番地」がないところもあります。

賢くなりすぎないようにしてください。


2

ここでの他の回答とは異なり、構造化された住所データベースを使用することは可能だと思います。

私はすぐに次のような構造を考えることができます。

  • 地域(州/県)
  • 地域(市/地方自治体)
  • 地方(郡/地方の他の下位区分)
  • 通り

しかし、それを十分に速くクエリする方法は?

私が常にそれを達成できると考える方法の1つは、国によって異なりますが、国内ではしっかりしている郵便番号(または郵便番号)を求めることです。

このようにして、世界中の郵便局が提供する情報に基づいてデータを構造化できます。


2

Universal Data Modelの有名なLen SilverstonはGEOGRAPHIC BOUNDARIES、単純なSTREET ADDRESS LINEsまたは国ごとの派生物のいずれかを受け入れる自由度の程度に応じて、個別の階層を推奨しています。


1
確かに、Silverstonが考案したモデルはかなり優れており、多くの分野をカバーしていますが、特にエンドユーザーの観点からは、このような複雑さがWebに(現時点では)当てはまるとはまだ思いません。最後に、ユーザビリティは(ほぼ)常に優先されます。
Alix Axel

2

いいえ、絶対にありません。米国と日本の住所の動作を比較すると、それが不可能であることがわかります。

更新:

考え直してみると、何でもできますが、トレードオフがあります。

1つのアプローチは、addressテーブルとaddress_attributeテーブルの問題をモデル化することです。これらのテーブル間の1:mの関係により、何でもモデル化できます。address_attributeテーブルには、pk、名前、値、およびそのアドレスの親のpkを指すfkがあります。名前と値のペアを持つマップを使用するのとほとんど同じです。

トレードオフは、アドレスが必要になるたびにJOINを実行する必要があることです。また、毎回何を処理しているのかを把握するために、address_attributesの名前を調べる必要があります。

もう1つのアプローチは、住所が世界中でどのようにモデル化されているかについてより包括的な調査を行うことです。オブジェクト指向の世界では、アドレス空間をタイリングするのに必要な数だけ、西洋のアドレスクラス(street1 / street2 / city / state / zip)とその他の日本、中国向けのクラスがあるかもしれません。次に、マスターアドレステーブルと他のタイプの子テーブルを1対1の関係で作成します。

AmazonまたはeBayはどのようにそれを行いますか?彼らは国際的に出荷します。ロケール固有のUI機能はありますか?私は米国のロケールのみを使用しました。


1
ほとんどのアドレスが必要な場合はどうなりますか?
Arsen Mkrtchyan、

ここではフォローしていません。
duffymo 2009年

2

いいえ、標準のアドレス指定スキームはありません。通常、国によって異なります。でも、万国郵便連合はにした世界では、皆のためのアドレスAdressing何も存在しないことを。これに対する最良の解決策は、ISO 3166として知られる2/3文字の国コード標準を使用し、国の標準で他のすべてのものを扱うことです。

ただし、プロジェクトで簡単にアクセスできるツールを使いたいと本当に思っている場合は、Google Place APIを試すことができます


私は、Google Place APIがどのように処理するかを見るアイデアが本当に好きです!
Andrew Steitz、

1

設計は目的に強く依存する必要があります。一部の人々はデータを構造化する方法を投稿しました。したがって、単に誰かにsメールを送信したい場合は、それで十分です。このデータをナビゲーションに使用する場合、状況は複雑になります。カーナビでは交通情報(片道)などの構造を追加する必要がありますが、徒歩ナビでは多くの追加データが必要です。これは小さな例です。私の街では、私の近所は公園の近くです。公園の隣には航空博物館になっていた旧飛行場(実際にはヨーロッパで最も古い飛行場の1つ)があります。航空博物館の隣にはビジネスパークがあります。博物館の番地は39ですが、ビジネスパークの番号は39Aで始まります。39と39Aは近いように見えるかもしれませんが、ある場所から別の場所へと歩くのに約1マイル(さらに、車で行く場合はさらに長く)かかります。
これは私の街から取ったほんの小さな例です、おそらくあなたはおそらく多くの例外を見つけることができると思います(特にすべての国の田舎または荒野で)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.