要点

  • rawAddress と解析済みフィールドを保持する
  • 郵便番号と家番号をテキストとして保存する
  • 固定の州フィールド1つに頼らず、任意の行政区分レベルを使用する
  • 注文時の住所をスナップショットとして保存する

執筆とレビュー

編集・レビュー方針
執筆
ランダムアドレスジェネレーター編集部
レビュー
データモデリングおよびQAレビューチーム
最終更新
国際化、生の値の保存、郵便番号の種類、住所のバージョン管理を中心に書き直されました。

個別の入力、解析されたコンポーネント、レンダリングされた出力

生の入力は証拠であり、解析されたフィールドは検索とビジネス ロジックをサポートし、レンダリングされた線は国の順序に従います。 1 つだけを保持すると、後の監査やパーサーのアップグレードを防ぐことができます。

rawAddressLines、parsedComponents、normalizedAddress、および正規化プロバイダー/バージョンを保存します。正規化の失敗によって生のレコードが破壊されることはありません。

フィールド種類目的
countryCodeCHAR(2)ISO 国コード
addressLinesJSON / TEXT[]可変行数
adminArea1..3TEXT nullable柔軟な管理レベル
localityTEXT nullable都市、郊外、またはPost Town
postalCodeTEXT nullable文字と先頭のゼロ
rawAddressJSON監査と再処理

数値に見える識別子もテキストです

郵便番号と家番号には、先頭にゼロ、文字、スペース、ハイフン、および範囲を含めることができます。整数型ではデータが失われ、国固有のパッチが適用されます。

全体を通して Unicode テキストを使用します。平均的な英語サンプルではなく、実際のデータセットとビジネス境界から長さの制限を導き出します。

type PostalAddress = {
  countryCode: string;
  addressLines: string[];
  adminArea1?: string;
  adminArea2?: string;
  adminArea3?: string;
  locality?: string;
  postalCode?: string;
  rawAddress: unknown;
};

空の文字列、null、欠落文字列を混在させないでください

存在しない 2 行目が省略されるか、null または空であるかを定義し、境界で正規化します。それ以外の場合、クエリ、重複排除、およびエクスポートでは、1 つの状態が 3 つの状態として扱われます。

欠落している行を N/A またはダッシュで埋めないでください。プレースホルダーがラベルに漏れます。

注文と監査記録にスナップショットを使用する

アドレス帳のエントリは変更できますが、注文または請求書では履歴のアドレスを保存する必要があります。現在の addressId のみを参照すると、履歴が変更されます。

レンダリングされたライン、コンポーネント、検証ステータス、およびタイムスタンプのスナップショット。

  • 注文はアドレス帳で変更されません
  • レコードノーマライザープロバイダーとバージョン
  • タイムスタンプ検証ステータス
  • 完全な実アドレスを不必要にログに記録しないでください

複数国のテストフィクスチャで移行を検証する

英国の建物名だけで識別する住所、カナダの英数字郵便番号、ドイツ語 Unicode、日本語のソース テキスト、および先頭のゼロを含む往復フィクスチャ。行数だけではなく、セマンティック フィールドと生の JSON を比較します。

移行リハーサルでは、切り捨てられた値、デコードの失敗、空の文字列から null への変更をカウントする必要があります。アプリケーションが元の行を読み取った後にそれを再構築できない場合は、データベースが成功したとしても十分ではありません。古いレコードと新しいレコードの間で構造的な差分を生成し、元に戻せない変換のために保持された rawAddress データからの再生パスを準備します。

このスイートを、クリーンなテスト データベースと運用環境のスキーマのサニタイズされたコピーの両方に対して実行します。現実的なインデックス、制約、および従来の null によって、理想的な空のスキーマでは再現できない動作が明らかになることがよくあります。

アプリケーションの読み取りパスと移行ジョブを測定します。 ORM シリアライザー、検索インデックス、キャッシュ、または分析エクスポートは、データベースが新しい列を受け入れた後も、以前の列の形状を引き継ぐ可能性があります。すべての代表的なレコードについて、顧客に表示される内容、フルフィルメントで受信される内容、監査エクスポートで保存される内容を比較します。これらのコンシューマが同じアドレス バージョンに同意した場合にのみリリースし、古い列または生のペイロードが削除される前にロールバックの決定点を保持します。最終的な比較を移行リリースの記録とともに文書化します。

  • Unicode 文字列と JSON 構造体を比較する
  • 切り捨て、エンコード、および null 変換のカウント
  • アプリケーション層を読み込む
  • rawアドレス再生ツールを保持する

よくある質問

テーブルには固定の住所行カラムが必要ですか?

UI には固定カウントが表示される場合がありますが、addressLines 配列は国の変動に対してより柔軟です。

郵便番号では VARCHAR を使用する必要がありますか?

はい。郵便番号には、文字、スペース、ハイフン、および先頭のゼロを含めることができます。

rawAddress を保持する理由は何ですか?

監査、パーサーのデバッグ、およびパーサーのアップグレード後の再処理をサポートします。

出典と参考資料

  1. MDN: 住所レベルと自動入力フィールド
  2. W3C: 国際住所パターン