要点
- rawAddress と解析済みフィールドを保持する
- 郵便番号と家番号をテキストとして保存する
- 固定の州フィールド1つに頼らず、任意の行政区分レベルを使用する
- 注文時の住所をスナップショットとして保存する
執筆とレビュー
編集・レビュー方針- 執筆
- ランダムアドレスジェネレーター編集部
- レビュー
- データモデリングおよびQAレビューチーム
- 最終更新
- 国際化、生の値の保存、郵便番号の種類、住所のバージョン管理を中心に書き直されました。
個別の入力、解析されたコンポーネント、レンダリングされた出力
生の入力は証拠であり、解析されたフィールドは検索とビジネス ロジックをサポートし、レンダリングされた線は国の順序に従います。 1 つだけを保持すると、後の監査やパーサーのアップグレードを防ぐことができます。
rawAddressLines、parsedComponents、normalizedAddress、および正規化プロバイダー/バージョンを保存します。正規化の失敗によって生のレコードが破壊されることはありません。
| フィールド | 種類 | 目的 |
|---|---|---|
| countryCode | CHAR(2) | ISO 国コード |
| addressLines | JSON / TEXT[] | 可変行数 |
| adminArea1..3 | TEXT nullable | 柔軟な管理レベル |
| locality | TEXT nullable | 都市、郊外、またはPost Town |
| postalCode | TEXT nullable | 文字と先頭のゼロ |
| rawAddress | JSON | 監査と再処理 |
数値に見える識別子もテキストです
郵便番号と家番号には、先頭にゼロ、文字、スペース、ハイフン、および範囲を含めることができます。整数型ではデータが失われ、国固有のパッチが適用されます。
全体を通して 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 を保持する理由は何ですか?
監査、パーサーのデバッグ、およびパーサーのアップグレード後の再処理をサポートします。
