Poin utama
- Pertahankan rawAddress serta bidang yang diurai
- Simpan kode pos dan nomor rumah sebagai teks
- Gunakan tingkat administratif opsional, bukan satu field negara bagian yang kaku
- Simpan snapshot alamat saat pesanan dibuat
Penulis dan tinjauan
Prinsip editorial- Ditulis oleh
- Tim Editorial Penghasil Alamat Acak
- Ditinjau oleh
- Tim Pemodelan Data dan Peninjau QA
- Pembaruan substantif terakhir
- Ditulis ulang seputar internasionalisasi, pelestarian nilai mentah, jenis kode pos, dan pembuatan versi alamat.
Pisahkan masukan, komponen yang diurai, dan keluaran yang dirender
Masukan mentah adalah bukti, kolom yang diurai mendukung penelusuran dan logika bisnis, dan baris yang dirender mengikuti urutan yang berlaku di tiap negara. Menyimpan hanya satu akan mencegah audit dan peningkatan parser di kemudian hari.
Menyimpan rawAddressLines, parsedComponents, normalizedAddress, dan penyedia/versi normalisasi. Kegagalan normalisasi tidak boleh merusak catatan mentah.
| Bidang | Ketik | Tujuan |
|---|---|---|
| countryCode | CHAR(2) | ISO kode negara |
| addressLines | JSON / TEXT[] | Jumlah baris variabel |
| adminArea1..3 | TEXT nullable | Tingkat administrasi yang fleksibel |
| locality | TEXT nullable | Kota, pinggiran kota, atau Post Town |
| postalCode | TEXT nullable | Huruf dan angka nol di depannya |
| rawAddress | JSON | Audit dan pemrosesan ulang |
Pengidentifikasi yang terlihat numerik masih berupa teks
Kode pos dan nomor rumah dapat berisi angka nol, huruf, spasi, tanda hubung, dan rentang di depannya. Tipe bilangan bulat kehilangan data dan memaksakan patch khusus negara.
Gunakan teks Unicode secara keseluruhan. Dapatkan batas panjang dari kumpulan data nyata dan batasan bisnis, bukan sampel bahasa Inggris rata-rata.
type PostalAddress = {
countryCode: string;
addressLines: string[];
adminArea1?: string;
adminArea2?: string;
adminArea3?: string;
locality?: string;
postalCode?: string;
rawAddress: unknown;
};Jangan mencampur string kosong, null, dan hilang
Tentukan apakah baris kedua yang hilang dihilangkan, nol, atau kosong, lalu normalkan pada batasnya. Jika tidak, kueri, deduplikasi, dan ekspor akan memperlakukan satu negara bagian sebagai tiga negara bagian.
Jangan pernah mengisi baris yang hilang dengan N/A atau tanda hubung; placeholder bocor ke dalam label.
Gunakan snapshot untuk pesanan dan catatan audit
Entri buku alamat dapat berubah, sedangkan pesanan atau faktur harus mempertahankan alamat historisnya. Jika hanya merujuk addressId saat ini, riwayat alamat ikut berubah.
Snapshot baris yang dirender, komponen, status verifikasi, dan stempel waktu.
- Pesanan tidak berubah dengan buku alamat
- Rekam penyedia dan versi normalizer
- Status verifikasi stempel waktu
- Jangan mencatat alamat asli lengkap jika tidak perlu
Verifikasi migrasi dengan fixture dari beberapa negara
Fixture pulang-pergi yang berisi lokasi bernama Inggris, kode pos alfanumerik Kanada, Unicode Jerman, teks sumber Jepang, dan angka nol di depan. Bandingkan bidang semantik dan JSON mentah, bukan jumlah baris saja.
Latihan migrasi harus menghitung nilai terpotong, kegagalan penguraian kode, dan perubahan string kosong ke nol. Keberhasilan database tidak cukup jika aplikasi tidak dapat merekonstruksi baris aslinya setelah membacanya kembali. Menghasilkan perbedaan struktural antara rekaman lama dan baru dan menyiapkan jalur pemutaran ulang dari data rawAddress yang disimpan untuk transformasi yang tidak dapat diubah.
Jalankan rangkaian ini pada database pengujian yang bersih dan salinan skema berbentuk produksi yang sudah dibersihkan. Indeks realistis, batasan, dan null warisan sering kali mengungkapkan perilaku yang tidak dapat direproduksi oleh skema kosong yang ideal.
Ukur jalur baca aplikasi serta tugas migrasi. Serializer ORM, indeks pencarian, cache, atau ekspor analitik mungkin masih mengambil bentuk kolom sebelumnya setelah database menerima yang baru. Untuk setiap catatan representatif, bandingkan apa yang dilihat pelanggan, apa yang diterima pemenuhannya, dan apa yang dipertahankan oleh ekspor audit. Rilis hanya ketika konsumen tersebut menyetujui versi alamat yang sama, dan pertahankan titik keputusan rollback sebelum kolom lama atau muatan mentah dihapus. Dokumentasikan perbandingan akhir bersama dengan catatan rilis migrasi.
- Bandingkan string Unicode dan struktur JSON
- Hitung pemotongan, pengkodean, dan konversi nol
- Baca seluruh lapisan aplikasi
- Simpan alat pemutaran ulang alamat mentah
Pertanyaan umum
Haruskah tabel memiliki kolom baris alamat tetap?
UI mungkin menampilkan jumlah tetap, namun array addressLines lebih fleksibel untuk variasi negara.
Haruskah Kode Pos menggunakan VARCHAR?
Ya. Kode pos dapat berisi huruf, spasi, tanda hubung, dan angka nol di depan.
Mengapa mempertahankan rawAddress?
Ini mendukung audit, debugging parser, dan pemrosesan ulang setelah peningkatan parser.
