私はプログラマーであり、正直に言うと、世界の住所の構造がわからないのですが、私の国ではどのように構造化されているのでしょうか。1つのIDでちょうど識別され、世界のすべての住所格納するのに使用する、高速なクエリと動的に簡単なので、それはする必要があります
おかげで多くのことを
私はプログラマーであり、正直に言うと、世界の住所の構造がわからないのですが、私の国ではどのように構造化されているのでしょうか。1つのIDでちょうど識別され、世界のすべての住所格納するのに使用する、高速なクエリと動的に簡単なので、それはする必要があります
おかげで多くのことを
回答:
標準的なフィールドセットで、さまざまな国の住所を表すことができます。名前付きまたは番号付きの建物が配置されている名前付きアクセスルート(大通り)の基本的な考え方は、中国を除いてかなり標準的です。その他のほぼ普遍的な概念には、次のものがあります。集落に名前を付ける(市/町/村)。地域に名前を付け、英数字の郵便番号を割り当てます。郵便番号は郵便番号とも呼ばれ、一部の国でのみ純粋に数値であることに注意してください。本当に汎用的にしたい場合は、多くのフィールドが必要になります。
UPU Universal Postal Unionは、多くの国の住所データを標準形式で提供しています。UPUフォーマットは、国全体のすべての住所(使用可能なフィールド精度まで)を保持しているため、リレーショナルであることに注意してください。すべての可能なアドレスのごく一部のみが格納される顧客の住所を格納する場合は、すべてのフィールドと1行に1つの住所を含む単一のテーブル(またはフラット形式)を使用することをお勧めします。
アドレスを格納するための適切な形式は次のとおりです。
アドレス行1〜4は、次のようなコンポーネントを保持できます。
多くの場合、使用される住所行は3つだけですが、これでは不十分な場合がよくあります。もちろん、正式な形式ですべてのアドレスを表すためにさらに多くの行を要求することも可能ですが、コンマを常に行区切り文字として使用できるため、情報を引き続き取得できます。
通常、データの分析は地域、地域、郵便番号、国ごとに行われ、これらの要素はユーザーがデータを入力するときに理解するのがかなり簡単です。これが、これらの要素を個別のフィールドとして格納する必要がある理由です。ただし、ユーザーに郵便番号または地域の提供を強制しないでください。これらはローカルでは使用できません。
局所性、特にマップの局所性と郵便の局所性の違いが不明確になることがあります。郵便局地は、近くの大きな町である可能性がある郵便局によって見なされる地域です。ただし、郵便番号は通常、問題や矛盾を解決し、公式の郵便地名が使用されていない場合でも正しく配信できるようにします。
見ていデータベースの回答を。具体的には、これは多くのケースをカバーします:
(すべて可変長文字データ型)
AddressId
Line1
Line2
Line3
City
ZipOrPostcode
StateProvinceCounty
CountryId
OtherAddressDetails
このデータを保存する主な目的は何ですか?実際にその人にメールを送るつもりですか?人口統計、人口を追跡しますか?いくつかの基本的な認証/検証の一部として、正しいアドレスを発信者に尋ねることができますか?上記のすべて?上記のどれでもない?
実際のニーズに応じて、次のいずれかを決定します。a)それは本当に問題ではなく、フリーテキストアプローチを採用するか、b)すべての国の構造化/特定フィールド、またはc)国固有のアーキテクチャ。
時々、あなたが通りの住所に行くことができる最も近いのは都市です。
私はかつてインドのすべての中学校をGoogleマップに配置するプロジェクトを持っていました。私はGoogle APIを使用して洗練されたプログラムを作成し、それは非常に簡単だと思いました。
次に、クライアントからデータを取得しました。学校の住所には、「市場の向かい、理髪店の隣」や「古いバス停近く」などがありました。
残念ながら、Google APIはその形式をサポートしていないため、作業が非常に困難になりました。
国際住所の場合、情報をフィールドに分割すると、情報をフォーマットする方法を見つけるのが非常に困難になります。たとえば、イタリアの住所では次のものが使用されます。
<street address>
<zip> <town> <region>
<country>
といった
Via Eroi della Repubblica
89861 Tropea VV
Italy
これは、2行目の米国の住所の順序とはかなり異なります。
SOの質問も参照してください。
タグ「郵便番号」も確認してください。
編集:リージョンとタウンの逆順-UPUごと
多分これは便利です:https : //gist.github.com/259744 プロジェクトについて、ISOコード、トップレベルドメイン、電話コード、車の記号、長さ、正規表現など、世界のすべての国に関する情報の表を収集しましたzip。残念ながらドイツ語のみの国名とコメント...
Universal Data Modelの有名なLen SilverstonはGEOGRAPHIC BOUNDARIES
、単純なSTREET ADDRESS LINE
sまたは国ごとの派生物のいずれかを受け入れる自由度の程度に応じて、個別の階層を推奨しています。
いいえ、絶対にありません。米国と日本の住所の動作を比較すると、それが不可能であることがわかります。
更新:
考え直してみると、何でもできますが、トレードオフがあります。
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機能はありますか?私は米国のロケールのみを使用しました。
いいえ、標準のアドレス指定スキームはありません。通常、国によって異なります。でも、万国郵便連合はにした世界では、皆のためのアドレスAdressing何も存在しないことを。これに対する最良の解決策は、ISO 3166として知られる2/3文字の国コード標準を使用し、国の標準で他のすべてのものを扱うことです。
ただし、プロジェクトで簡単にアクセスできるツールを使いたいと本当に思っている場合は、Google Place APIを試すことができます。
設計は目的に強く依存する必要があります。一部の人々はデータを構造化する方法を投稿しました。したがって、単に誰かにsメールを送信したい場合は、それで十分です。このデータをナビゲーションに使用する場合、状況は複雑になります。カーナビでは交通情報(片道)などの構造を追加する必要がありますが、徒歩ナビでは多くの追加データが必要です。これは小さな例です。私の街では、私の近所は公園の近くです。公園の隣には航空博物館になっていた旧飛行場(実際にはヨーロッパで最も古い飛行場の1つ)があります。航空博物館の隣にはビジネスパークがあります。博物館の番地は39ですが、ビジネスパークの番号は39Aで始まります。39と39Aは近いように見えるかもしれませんが、ある場所から別の場所へと歩くのに約1マイル(さらに、車で行く場合はさらに長く)かかります。
これは私の街から取ったほんの小さな例です、おそらくあなたはおそらく多くの例外を見つけることができると思います(特にすべての国の田舎または荒野で)。