Points clés
- Préserver rawAddress ainsi que les champs analysés
- Stocker les codes postaux et les numéros de maison sous forme de texte
- Utiliser des niveaux administratifs facultatifs au lieu d’un champ d’État fixe
- Capturer l'adresse utilisée par une commande
Auteur et révision
Principes éditoriaux- Rédigé par
- Équipe éditoriale du générateur d'adresses aléatoires
- Révisé par
- Équipe de modélisation des données et d’examen de l’assurance qualité
- Dernière mise à jour substantielle
- Réécrit autour de l'internationalisation, de la préservation de la valeur brute, des types de codes postaux et de la gestion des versions des adresses.
Entrée séparée, composants analysés et sortie rendue
Les entrées brutes constituent une preuve, les champs analysés prennent en charge la recherche et la logique métier, et les lignes rendues suivent l'ordre des pays. N’en conserver qu’un seul empêche les audits ultérieurs et les mises à niveau de l’analyseur.
Stockez rawAddressLines, parsedComponents, normalizedAddress et le fournisseur/version de normalisation. Un échec de normalisation ne doit pas détruire l’enregistrement brut.
| Champ | Tapez | Objectif |
|---|---|---|
| countryCode | CHAR(2) | Code pays ISO |
| addressLines | JSON / TEXT[] | Nombre de lignes variable |
| adminArea1..3 | TEXT nullable | Des niveaux administratifs flexibles |
| locality | TEXT nullable | Ville, banlieue ou Post Town |
| postalCode | TEXT nullable | Lettres et zéros non significatifs |
| rawAddress | JSON | Audit et retraitement |
Les identifiants qui semblent numériques sont toujours du texte
Les codes postaux et les numéros de maison peuvent contenir des zéros non significatifs, des lettres, des espaces, des traits d'union et des plages. Les types entiers perdent des données et imposent des correctifs spécifiques au pays.
Utilisez le texte Unicode partout. Dérivez les limites de longueur à partir d'ensembles de données réels et des limites de l'entreprise, et non d'échantillons anglais moyens.
type PostalAddress = {
countryCode: string;
addressLines: string[];
adminArea1?: string;
adminArea2?: string;
adminArea3?: string;
locality?: string;
postalCode?: string;
rawAddress: unknown;
};Ne mélangez pas les chaînes vides, nulles et manquantes
Définissez si une deuxième ligne absente est omise, nulle ou vide, puis normalisez-la à la limite. Sinon, les requêtes, la déduplication et les exportations traitent un état comme trois.
Ne remplissez jamais les lignes manquantes avec N/A ou un tiret ; les espaces réservés s'infiltrent dans les étiquettes.
Utiliser des instantanés pour les commandes et les enregistrements d'audit
Une entrée du carnet d'adresses peut changer, tandis qu'une commande ou une facture doit conserver son adresse historique. Le fait de référencer uniquement un addressId actuel mute l’historique.
Instantané rendu des lignes, des composants, de l'état de vérification et de l'horodatage.
- Les commandes ne changent pas avec le carnet d'adresses
- Fournisseur et version du normalisateur d'enregistrement
- Statut de vérification de l'horodatage
- N'enregistrez pas inutilement les adresses réelles complètes
Vérifier les migrations avec des fixtures de plusieurs pays
Fixtures aller-retour contenant un local nommé au Royaume-Uni, un code postal alphanumérique canadien, un Unicode allemand, un texte source japonais et des zéros non significatifs. Comparez les champs sémantiques et le JSON brut, et non le nombre de lignes uniquement.
Une répétition de migration doit prendre en compte les valeurs tronquées, les échecs de décodage et les modifications de chaîne vide à null. Le succès de la base de données n'est pas suffisant si l'application ne peut pas reconstruire les lignes d'origine après les avoir relues. Produisez une différence structurelle entre les anciens et les nouveaux enregistrements et préparez un chemin de relecture à partir des données rawAddress conservées pour des transformations irréversibles.
Exécutez cette suite à la fois sur une base de données de test propre et sur une copie nettoyée des schémas en forme de production. Les index réalistes, les contraintes et les valeurs nulles héritées révèlent souvent un comportement qu'un schéma vide idéal ne peut pas reproduire.
Mesurez le chemin de lecture de l'application ainsi que le travail de migration. Un sérialiseur ORM, un index de recherche, un cache ou une exportation d'analyses peuvent toujours prendre la forme de colonne précédente une fois que la base de données a accepté la nouvelle. Pour chaque enregistrement représentatif, comparez ce que le client voit, ce qu'il reçoit et ce qu'une exportation d'audit préserve. Ne publiez que lorsque ces consommateurs sont d'accord sur la même version d'adresse et conservez un point de décision de restauration avant que les anciennes colonnes ou les charges utiles brutes ne soient supprimées. Documentez la comparaison finale avec l’enregistrement de la version de migration.
- Comparez les chaînes Unicode et la structure JSON
- Compter les troncatures, les encodages et les conversions nulles
- Lire la couche application
- Conserver un outil de relecture d'adresses brutes
Questions fréquentes
Le tableau doit-il avoir des colonnes de lignes d'adresse fixes ?
L'interface utilisateur peut afficher un nombre fixe, mais un tableau addressLines est plus flexible en fonction des variations nationales.
Le code postal devrait-il utiliser VARCHAR ?
Oui. Les codes postaux peuvent contenir des lettres, des espaces, des traits d’union et des zéros non significatifs.
Pourquoi conserver rawAddress ?
Il prend en charge l'audit, le débogage de l'analyseur et le retraitement après les mises à niveau de l'analyseur.
