国際住所をデータベースに保存する「最良の」方法は何ですか?
-
09-06-2019 - |
質問
「」とは何ですか?最高「国際住所をデータベースに保存する方法は?スキーマと、その方法で正規化することを選択した (またはしない) 理由の説明の形式で回答してください。各フィールドのタイプと長さを選択した理由も説明してください。
注記:どのフィールドが必要だと思うかを決定します。
解決
プレーンな自由形式のテキスト。
世界中のすべての郵便番号を検証するのは非常に困難です。国の固定リストは政治的に敏感すぎる。必須の州/地域/その他の行政区分はまったく不適切です (住んでいる郡を尋ねられることがよくありますが、住んでいない場合でも、グレーター ロンドンはまったく郡ではないためです)。
もっと言えば、それは単に不必要です。あなたのアプリケーションが深刻な方法でアドレスをモデル化している可能性は非常に低いです。郵便番号が必要な場合は、郵便番号を尋ねてください。ほとんどの人は、住所以外の何かを入力するほど愚かではありません。そうするなら、新しく購入した商品にバイバイのキスをすることができます。
いずれにせよ、自然に 1 つの国に限定されることを行う場合は例外です。この状況では、たとえば、郵便番号、番地 } のペアを尋ねる必要があります。これは郵便番号を識別するのに十分です。米国の拡張郵便番号でも同様のことが達成できると思います。
他のヒント
以前、私は ups/fedex の Web サイトにある配送先住所フォームに倣って、国際的である必要があるフォームをモデル化したことがあります (もし彼らが国際注文の処理方法を知らなかったら、私たちは皆大変だと思いました)。使用するフィールドは、スキーマを設定するための参照として使用できます。
一般に、なぜアドレスが必要なのかを理解する必要があります。発送/郵送用ですか?そうなると、要件はただ一つ、国を分離することです。他の行は自由形式であり、ユーザーが入力します。この理由は、メールの一般的な転送戦略にあります。外国宛ての受信メールは、他のアドレス行を参照せずに転送されます。したがって、詳細情報は、その国にある郵便仕分け機によってのみ解析されます。受信者と同様に、彼らも全国大会に精通しているでしょう。
(UPS はヨーロッパのいくつかの小さな国を束ねる場合があります。すべての低地諸国はおそらくベルギーから提供されていると考えられます。)
国/都市と住所のテキストを追加すると問題ないと思います。国と都市を分けて報告する必要があります。マネージャー いつも このような種類のレポートは予期しないものを要求する必要はありません。また、大規模なデータベースに対して LIKE クエリを実行することは好みません。
Facebook に過度の敬意を払わないこと。しかし、毎日起動される多くの Web アプリケーションでは、データベースの全体的な構造が見落とされているようです。明らかに、苦労せずにアドレス構造を持つすべての潜在的な変数をカバーする完璧なソリューションはないと思います。そうは言っても、Facebook はオートコンプリートと組み合わせることで、位置入力データを取得し、冗長なエントリの大部分を削除することに成功しました。これは、データベースを十分に整理して、低コストかつエラーの少ない方法でオートコンプリート情報をリアルタイムでクライアントに提供し、クライアントが既存のリストから多かれ少なかれ正しい場所を選択できるようにすることで実現されています。
最善の解決策は、希望する地理的範囲を含むサードパーティのデータベースにアクセスし、それを使用してユーザーの位置情報を最初にシードすることだと思います。これにより、独自に作成するという面倒な作業を回避できます。運が良ければ、新しいユーザーが正しいオートコンプリート情報をサードパーティのサプライヤーから直接受信できるようにすることで、サーバーの負荷を軽減できます。最終的には、都市、国などのほとんどの位置情報をオートコンプリートで入力できるようになります。独自のデータベースに含まれる情報から、ユーザー入力データから。
データの使用計画について、もう少し詳しく説明する必要があります。たとえば、市、州、国などのフィールドは、単一のテーブル内のテキストにすることも、外部キーを使用して別のテーブルにリンクするコードにすることもできます。
最も単純なのは
address_line_01(必須、非空白)address_line_02 address_line_03ランドマーク都市(必須)PIN(必須)PROVINCE_DISTRICT STATE(必須)国(必須)
上記はすべて、適切なフィールド長を持つ Text/Unicode にすることができます。
該当する場合は電話番号。