Je vais résumer mes pensées à partir de mon article de blog -. Une leçon de stockage d'adresses (sur archive.org).
Dans mon projet actuel [je travaille pour une entreprise de logistique], nous stockons des adresses internationales. J'ai fait des recherches sur les adresses du monde entier pour concevoir cette partie de la base de données. Il y a beaucoup de formats différents. Dans le monde occidental, nous avons tendance à utiliser un format assez uniforme - quelques différences, mais elles sont pour la plupart :
-
Numéro de rue - Numérique
-
Nom de la maison ou du bâtiment - VarChar - au Royaume-Uni, certaines maisons/bâtiments sont identifiés par leur nom et non par leur numéro.
-
Suffixe du numéro de la rue [VarChar, bien que dans la plupart des cas, Char(1) suffise].
-
Nom de la rue [VarChar]
-
Type de rue [VarChar ou Int si vous avez une table StreetTypes].
- Jusqu'à présent, j'ai trouvé 262 types uniques dans le monde anglophone, il y en a probablement plus, et n'oubliez pas les autres langues, par exemple Strasse, Rue, etc.
-
Direction de la rue [VarChar(2)]
- N, E, S, W, NE, SE, NW, SW
-
Type d'adresse [VarChar ou Int si vous disposez d'une table AddressTypes].
- Boîte postale
- Appartement
- Bâtiment
- Plancher
- Bureau
- Suite
- etc...
-
Identifiant du type d'adresse [VarChar]
- Par exemple, le numéro de la boîte, le numéro de l'appartement, le numéro de l'étage. Souvenez-vous que les numéros d'appartement et les bureaux ont parfois des informations alphanumériques, comme 1A.
-
Municipalité locale [VarChar ou Int si vous disposez d'un tableau des municipalités].
- Par exemple, si votre hameau/village apparaît dans l'adresse avant la ville.
-
Ville/ville [VarChar ou Int si vous avez une table Cities].
-
District gouvernant [VarChar ou Int si vous avez une table Districts].
- État (États-Unis)
- Province (Canada)
- District fédéral (Mexique)
- Comté (R.-U.)
- etc...
-
Zone postale [VarChar]
- Zip (U.S.)
- Code postal (Canada, Mexique)
- Code postal (Royaume-Uni)
-
Pays [VarChar ou Int si vous avez une table de pays].
Cela semble couvrir la plupart des pays, mais l'ordre des champs peut être affiché différemment. Vous trouverez une liste des formats d'affichage à l'adresse suivante http://www.bitboost.com/ref/international-address-formats.html#Formats
Par exemple, dans de nombreux pays, le code postal précède le nom de la ville et le numéro de la rue suit le nom de la rue. Au Canada, aux États-Unis et au Royaume-Uni, le numéro de la rue précède le nom de la rue et le code postal (ou ZIP) vient après le nom de la ville.
Pour répondre à votre question sur la séparation des adresses en différents pays, je ne le suggérerais pas, cela ne ferait que rendre la vie plus difficile dans d'autres domaines, par exemple pour les rapports. Le format que j'ai fourni couvre toutes les adresses de notre base de données logistique, qui couvre les États-Unis, le Canada, le Mexique et le Royaume-Uni sans aucun problème. Il couvre également toutes nos adresses européennes, chinoises, japonaises et malaisiennes. Je ne peux pas parler pour les autres pays, mais je n'ai pas encore eu à stocker une adresse d'un pays que ces champs ne prennent pas en charge.
Je ne suggère pas d'utiliser le format Adresse1, Adresse2, Adresse3 suggéré par d'autres et que l'on retrouve dans de nombreuses bases de données, car l'analyse des informations relatives à l'adresse à partir d'une chaîne alphanumérique n'est pas aussi simple qu'il n'y paraît, surtout si les données ne sont pas saisies correctement, en raison d'informations erronées, de fautes de frappe, de fautes d'orthographe, etc. Si vous séparez vos champs, vous pouvez utiliser des algorithmes de distance pour vérifier la signification probable, utiliser la probabilité pour vérifier le nom de la rue par rapport au code postal et au numéro de rue ou pour vérifier la province et la ville par rapport au nom de la rue, etc. Essayez de faire tout cela lorsque vous avez une chaîne de caractères indiquant l'adresse complète de votre rue. Il ne s'agit pas d'un problème trivial, loin s'en faut.
L'assurance qualité sur une base de données d'adresses est un casse-tête, point final. Le moyen le plus simple de vous simplifier la vie dans ce domaine est de vous assurer que tous les champs ne contiennent qu'un seul élément d'information dont l'exactitude peut être vérifiée automatiquement au moment de la saisie. Les probabilités, les algorithmes de distance et les expressions régulières peuvent vérifier la validité de l'entrée et fournir à l'utilisateur un retour d'information sur son erreur et suggérer des corrections appropriées.
Il faut faire attention aux routes dont le nom est également un type de rue - si vous couvrez le Canada, vous devez être conscient de l'existence de "Avenue Road" à Toronto, qui vous fera perdre beaucoup de temps si vous utilisez le format Address1, 2, 3. Il est probable que cela se produise dans d'autres endroits également, bien que je n'en aie pas connaissance - ce seul cas a suffi pour que je crie "WTF !
1 votes
schema.org/PostalAddress - utilisé par les moteurs de recherche comme standard