Question

Je suis un programmeur et pour être honnête ne sais pas de structures d'adresse de la rue du monde, à quel point mon pays est structuré :) donc qui est la meilleure conception de base de données et commune pour stocker les adresses de la rue? Il devrait être si simple à utiliser, rapide pour interroger et dynamique pour stocker toutes les adresses de la rue du monde qui identifie par un simple identifiant
Merci beaucoup

Était-ce utile?

La solution

Il est possible de représenter les adresses de beaucoup de pays différents dans un ensemble standard de champs. L'idée de base d'une route d'accès nommé (de rue) que les bâtiments nommés ou numérotés sont situés sur est assez standard, sauf en Chine parfois. D'autres concepts universels à proximité comprennent: nommer le règlement (ville / ville / village), qui peut être génériquement appelé localité; indication de la région et l'attribution d'un code postal alphanumérique. Notez que les codes postaux, également connu sous le nom des codes postaux, ne sont que purement numérique dans certains pays. Vous aurez besoin de beaucoup de champs si vous voulez vraiment être générique.

L'Union postale universelle UPU fournit des données d'adresse pour un bon nombre de pays dans un format standard . Notez que le format UPU contient toutes les adresses (jusqu'à la précision sur le terrain disponible) pour tout un pays, il est donc relationnel. Si le stockage des adresses des clients, où seule une petite fraction de toutes les adresses possibles seront stockées, de son mieux d'utiliser une seule table (ou un format plat) contenant tous les champs et une adresse par ligne.

serait comme un format raisonnable pour stocker les adresses suivantes:

  • Les lignes d'adresse 1-4
  • Localité
  • Région
  • Code postal (ou code postal)
  • Pays

Les lignes d'adresse 1-4 peuvent contenir des composants tels que:

  • Bâtiment
  • Sous-bâtiment
  • Numéro Premise (numéro de la maison)
  • Gamme de Prémisse
  • Thoroughfare
  • Sous-Thoroughfare
  • Localité Double-charge
  • Sous-localité

Foire seulement 3 lignes d'adresse sont utilisées, mais cela est souvent insuffisante. Il est bien sûr possible d'exiger plus de lignes pour représenter toutes les adresses dans le format officiel, mais des virgules peut toujours être utilisé comme séparateurs de ligne, ce qui signifie l'information peut encore être capturé.

En général, l'analyse des données sera effectuée par localité, région, code postal et le pays et ces éléments sont assez faciles pour les utilisateurs à comprendre lors de la saisie des données. Voilà pourquoi ces éléments doivent être stockés sous forme de champs séparés. Cependant, ne pas forcer les utilisateurs à fournir le code postal ou la région, ils ne peuvent pas être utilisés localement.

Localité peut être pas clair, en particulier la distinction entre carte localité et localité postal. La localité postal est celle considérée par une autorité postale qui peut parfois être une grande ville voisine. Cependant, le code postal habituellement résoudre les problèmes ou les écarts là-bas, pour permettre la livraison correcte, même si l'après-localité officielle n'est pas utilisé.

Autres conseils

Jetez un oeil à réponses Base de données . Plus précisément, il couvre de nombreux cas:

(Tous les caractères de longueur variable type de données)

AddressId
Line1
Line2
Line3
City
ZipOrPostcode
StateProvinceCounty
CountryId
OtherAddressDetails

Demandez-vous quel est le principal objectif de stocker ces données? Avez-vous l'intention d'envoyer effectivement courrier à la personne à l'adresse? Suivre la démographie, les populations? Être en mesure de demander aux personnes de leur adresse correcte dans le cadre d'une authentification de base / vérification? Tout ce qui précède? Aucune de ces?

En fonction de vos besoins réels, vous déterminerez soit a) il ne compte pas vraiment, et vous pouvez opter pour une approche de texte libre, ou b) des champs structurés / spécifiques pour tous les pays, ou c) pays architecture spécifique .

Parfois, le plus proche, vous pouvez accéder à une adresse de rue est la ville.

J'ai eu un projet de mettre toutes les écoles secondaires en Inde dans Google Maps. J'ai écrit un programme épatant en utilisant l'API Google et pensé que ce serait assez facile.

Alors je suis arrivé les données du client. Certaines adresses scolaires étaient des choses comme « En face du marché, à côté du coiffeur » ou « près de la vieille station de bus ».

Il a rendu ma tâche beaucoup plus difficile puisque, malheureusement, l'API Google ne prend pas en charge ce format.

Pour les adresses internationales, il est remarquablement difficile de trouver un moyen de formater l'information si elle est divisée en champs. En tant que, par exemple, une adresse italienne utilise:

<street address>
<zip> <town> <region>
<country>

Comme

Via Eroi della Repubblica
89861 Tropea VV
Italy

C'est assez différent de l'ordre pour les adresses des États-Unis -. Sur la deuxième ligne

Voir aussi les SO questions:

Consultez également tag ' code postal.


Modifier : Ordre inverse de la région et de la ville - par UPU

Peut-être cela est utile: https://gist.github.com/259744 Pour un projet que je collectionnais une table d'informations sur tous les pays du monde, y compris les codes ISO, domaine de premier niveau, le code de tél, signe de voiture, longueur et regex de zip. Les noms des pays et des commentaires malheureusement en allemand ...

Cela dépend de la forme libre vous êtes prêt à aller avec les champs. Un champ d'adresse de forme libre fera évidemment toujours, mais être d'une aide relativement peu rétrécissement géographie.

Le problème que vous aurez est qu'il ya trop de variation du niveau de la hiérarchie géographique entre les pays. Heck, certains pays ne disposent même pas des « adresses de la rue » partout.

Je vous recommande de ne pas essayer de le rendre trop intelligent.

Différemment d'autres réponses ici, je crois qu'il est possible d'avoir une base de données d'adresse structurée.

Juste du chapeau, je peux penser à la structure suivante:

  • Pays
  • Région (État / Province)
  • Localité (Ville / Commune)
  • Sous-localité (County / autres sous-division d'une localité)
  • Rue

Mais comment interroger assez vite?

Une façon je pense toujours qu'il peut être accompli est de demander le code postal (ou code postal) qui varie d'un pays à l'autre, mais il est solide à l'intérieur du pays.

De cette façon, vous pouvez structurer vos données autour des informations fournies par les bureaux de poste à travers le monde.

Non, absolument pas. Si vous comparez la manière américaine et travail adresses japonaises, vous verrez que il est impossible.

Mise à jour:

À la réflexion, tout peut être fait, mais il y a un compromis.

Une approche consiste à modéliser le problème avec des tables d'adresses et address_attribute, avec un 1: m relation entre eux, tout peut être modélisé. La table address_attribute aurait un pk, un nom, une valeur et un fk qui pointe vers le pk de son parent d'adresse. Il est presque comme l'utilisation d'une carte avec le nom, les paires de valeur.

Le compromis est d'avoir à faire un REJOIGNEZ chaque fois que vous voulez une adresse. Vous devez également interroger les noms des address_attributes à comprendre ce que vous avez affaire à chaque fois.

Une autre approche serait de faire des recherches plus approfondies sur la façon dont les adresses sont modélisés dans le monde entier. Dans un monde orienté objet que vous pourriez avoir la classe d'adresse ouest (street1 / street2 / ville / état / zip) et d'autres pour le Japon, la Chine, autant que nécessaire à la tuile l'espace d'adressage. Ensuite, vous auriez une table tables d'adresses maître et de l'enfant aux autres types avec un 1: 1. Relation entre eux

Comment fonctionne Amazon ou eBay faire? Ils expédient au niveau international. Ont-ils des fonctionnalités d'interface utilisateur spécifiques aux paramètres régionaux? Je ne l'ai utilisé les paramètres régionaux des États-Unis.

Non, il n'y a pas d'adressage standard. Elle varie généralement de pays à pays. Même le Union postale universelle a déclaré le monde Adressage , une adresse pour tout le monde qu'il n'y en a pas. La meilleure solution pour cela est d'utiliser les 2/3 lettres normes du code du pays connu sous le nom ISO 3166 et traiter tout le monde par les normes du pays.

Cependant, si vous êtes vraiment désespéré d'utiliser des outils facilement accessibles pour votre projet, vous pouvez essayer Lieu Google API .

Votre conception devrait dépendre fortement de votre objectif. Certaines personnes ont posté la façon de structurer les données. Donc, si vous voulez simplement envoyer s-mail à quelqu'un, il le fera. Les choses commencent à se compliquer si vous souhaitez utiliser ces données pour la navigation. navigation automobile exigera des structures supplémentaires pour contenir les informations trafic (par exemple les routes à sens unique), tandis que la navigation à pied, il faudra beaucoup de données supplémentaires. Voici petit exemple: dans ma ville, mon quartier est à proximité du parc. À côté du parc est ancien terrain d'aviation (en fait, l'une des plus anciennes d'Europe) transformé en musée de l'aviation. A côté de musée de l'aviation est un parc d'affaires. numéro de la rue pour le musée est 39, tandis que le nombre de parcs d'affaires commencent par 39A. Donc, il peut sembler que 39 et 39A sont proches - mais il faut environ un mile à pied de l'un à l'autre (et même plus si vous allez en voiture)
. Ceci est juste un petit exemple tiré de ma ville, je pense que vous pouvez probablement trouver beaucoup d'exceptions (en particulier dans les régions rurales ou sauvages de tous les pays).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top