¿Existe un diseño de base de datos de direcciones comunes para todas las direcciones del mundo?


Soy programador y, para ser honesto, no conozco las estructuras de direcciones de calles del mundo, simplemente cómo se estructura en mi país :) entonces, ¿cuál es el mejor y más común diseño de base de datos para almacenar direcciones de calles? Debe ser tan simple de usar, rápido de consultar y dinámico para almacenar todas las direcciones del mundo que se identifica con un solo id
Muchas gracias

Author: Matt, 2009-05-30

12 answers

Es posible representar direcciones de muchos países diferentes en un conjunto estándar de campos. La idea básica de una ruta de acceso con nombre (vía pública) en la que se encuentran los edificios nombrados o numerados es bastante estándar, excepto en China a veces. Otros conceptos casi universales incluyen: nombrar el asentamiento (ciudad / pueblo / pueblo), que se puede denominar genéricamente como una localidad; nombrar la región y asignar un código postal alfanumérico. Tenga en cuenta que los códigos postales, también conocidos como códigos postales, son puramente numéricos solo en algunos países. Necesitarás muchos campos si realmente quieres ser genérico.

La Unión Postal Universal de la UPU proporciona datos de direcciones para muchos países en un formato estándar . Tenga en cuenta que el formato UPU contiene todas las direcciones (hasta la precisión de campo disponible) para todo un país, por lo tanto es relacional. Si se almacenan direcciones de clientes, donde solo se almacenará una pequeña fracción de todas las direcciones posibles, es mejor usar una sola tabla (o formato plano) que contiene todos los campos y una dirección por fila.

Un formato razonable para almacenar direcciones sería el siguiente:

  • Líneas de dirección 1-4
  • Localidad
  • Región
  • Código postal (o código postal)
  • País

Las líneas de direcciones 1-4 pueden contener componentes como:

  • Edificio
  • Subconstrucción
  • Número de local (número de casa)
  • Premisa Rango
  • Vía pública
  • Sub-Vía
  • Localidad Doblemente Dependiente
  • Sub-Localidad

Con frecuencia solo se usan 3 líneas de dirección, pero esto a menudo es insuficiente. Por supuesto, es posible requerir más líneas para representar todas las direcciones en el formato oficial, pero las comas siempre se pueden usar como separadores de líneas, lo que significa que la información aún se puede capturar.

Por lo general, el análisis de los datos se realizaría por localidad, región, código postal y país y estos elementos son bastante fáciles de entender para los usuarios al introducir datos. Esta es la razón por la que estos elementos deben almacenarse como campos separados. Sin embargo, no obligue a los usuarios a proporcionar código postal o región, no se pueden usar localmente.

La localidad puede ser poco clara, particularmente la distinción entre localidad del mapa y localidad postal. La localidad postal es la considerada por una autoridad postal que a veces puede ser una gran ciudad cercana. Sin embargo, el código postal generalmente resolverá cualquier problemas o discrepancias allí, para permitir la entrega correcta incluso si no se utiliza la post-localidad oficial.

 107
Author: Edward Ross,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-30 11:10:43

Echa un vistazo a Respuestas de la base de datos. Específicamente, esto cubre muchos casos:

(Todo tipo de datos de caracteres de longitud variable)

AddressId
Line1
Line2
Line3
City
ZipOrPostcode
StateProvinceCounty
CountryId
OtherAddressDetails

introduzca la descripción de la imagen aquí

 41
Author: Mitch Wheat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-25 03:37:26

Pregúntese cuál es el principal propósito de almacenar estos datos? ¿Tiene la intención de enviar correo a la persona en la dirección? ¿Rastrear demografía, poblaciones? ¿Ser capaz de pedir a las personas que llaman su dirección correcta como parte de una autenticación/verificación básica? Todo lo anterior? ¿Ninguna de las anteriores?

Dependiendo de su necesidad real, determinará a) realmente no importa, y puede optar por un enfoque de texto libre, o b) campos estructurados / específicos para todos países, o c) arquitectura específica de cada país.

 25
Author: andora,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-30 19:51:35

A veces lo más cercano a una dirección es la ciudad.

Una vez tuve un proyecto para poner todas las escuelas Secundarias en la India en Google Maps. Escribí un programa elegante usando la API de Google y pensé que sería bastante fácil.

Luego obtuve los datos del cliente. Algunas direcciones de la escuela eran cosas como "Frente al mercado, al lado del barbero" o "Cerca de la vieja parada de autobuses".

Hizo mi tarea mucho más difícil ya que, desafortunadamente, la API de Google no admite ese formato.

 10
Author: Emily,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-02 12:20:28

Para las direcciones internacionales, es muy difícil encontrar una manera de formatear la información si se desglosa en campos. Por ejemplo, una dirección italiana utiliza:

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

Como

Via Eroi della Repubblica
89861 Tropea VV
Italy

Eso es bastante diferente de la orden para las direcciones de EE.UU. - en la segunda línea.

Ver también las preguntas SO:

También echa un vistazo a la etiqueta ' código postal'.


Editar : Orden inverso de región y ciudad - por UPU

 9
Author: Jonathan Leffler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:10:30

Tal vez esto sea útil: https://gist.github.com/259744 Para un proyecto recopilé una tabla de información sobre todos los países del mundo, incluidos los códigos ISO, el dominio de nivel superior, el código telefónico, el letrero del automóvil, la longitud y la expresión regular del código postal. Nombres de países y comentarios desafortunadamente solo en alemán...

 5
Author: Hraban,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-15 20:40:43

A diferencia de otras respuestas aquí, creo que es posible tener una base de datos de direcciones estructurada.

Justo fuera del sombrero, puedo pensar en la siguiente estructura:

  • País
  • Región (Estado / Provincia)
  • Localidad (Ciudad / Municipio)
  • Sub-Localidad (Condado / otra subdivisión de una localidad)
  • Street

Pero ¿cómo consultarlo lo suficientemente rápido?

Una forma en que siempre pienso que se puede lograr es pedir el Código Postal (o Código postal) que varía de un país a otro, pero es sólido dentro del país.

De esta manera puede estructurar sus datos en torno a la información proporcionada por las oficinas postales de todo el mundo.

 3
Author: Paulo Santos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-30 13:01:39

Depende de la forma libre que esté preparado para ir con los campos. Un campo de dirección de forma libre obviamente siempre servirá, pero será de relativamente poca ayuda para reducir la geografía.

El problema que tendrá es que hay demasiada variación en el nivel de jerarquía geográfica entre los países. Diablos, algunos países ni siquiera tienen "direcciones" en todas partes.

Te recomiendo que no intentes hacerlo demasiado inteligente.

 2
Author: jerryjvl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-30 12:51:40

Len Silverston de Universal Data Model fame recomienda una jerarquía separada de GEOGRAPHIC BOUNDARIES y dependiendo de la cantidad de formación libre que esté dispuesto a aceptar ya sea simples STREET ADDRESS LINEs o derivados por país.

 2
Author: David Schmitt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-30 13:02:13

No, no hay un esquema de direccionamiento estándar. Por lo general, varía de un país a otro. Incluso la Unión Postal Universal dijo en Dirigiéndose al mundo, una dirección para todos que no hay ninguna. La mejor solución para esto es usar los estándares de código de país de 2/3 letras conocidos como ISO 3166 y tratar todo lo demás según los estándares del país.

Sin embargo, si realmente estás desesperado por usar herramientas de fácil acceso para tu proyecto, puedes probar Google Coloque API .

 2
Author: Abel Callejo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-23 13:44:06

No, absolutamente no. Si comparas la forma en que funcionan las direcciones US y japonesas, verás que no es posible.

ACTUALIZACIÓN:

Pensándolo bien, cualquier cosa se puede hacer, pero hay una compensación.

Un enfoque es modelar el problema con tablas address y address_attribute, con una relación 1:m entre ellas, cualquier cosa puede ser modelada. La tabla address_attribute tendría un pk, un nombre, un valor y un fk que apunta hacia el pk del padre de su dirección. Es casi como usar un mapa con nombre, pares de valores.

La compensación es tener que hacer una UNIÓN cada vez que desee una dirección. También tienes que interrogar los nombres de los address_attributes para averiguar con qué estás lidiando cada vez.

Otro enfoque sería hacer una investigación más exhaustiva sobre cómo se modelan las direcciones en todo el mundo. En un mundo orientado a objetos, es posible que tenga la clase de dirección occidental (street1/street2/city/state/zip) y otras para Japón, China, tantos como sea necesario para el espacio de direcciones. Luego tendría una tabla de direcciones maestra y tablas secundarias a los otros tipos con una relación 1: 1 entre ellos.

¿Cómo lo hace Amazon o eBay? Hacen envíos internacionales. ¿Tienen características de interfaz de usuario específicas de la configuración regional? Sólo he usado el local de Estados Unidos.

 1
Author: duffymo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-30 13:46:09

Su diseño debe depender en gran medida de su propósito. Algunas personas han publicado cómo estructurar los datos. Así que si simplemente desea enviar s-mail a alguien, lo hará. Las cosas comienzan a complicarse si desea utilizar estos datos para la navegación. La navegación de automóviles requerirá estructuras adicionales para contener información de tráfico (por ejemplo, carreteras de un solo sentido), mientras que la navegación a pie requerirá una gran cantidad de datos adicionales. Aquí hay un pequeño ejemplo: en mi ciudad, mi vecindario está cerca del parque. Al lado del parque es antiguo aeródromo (de hecho, uno de los más antiguos de Europa) se convirtió en museo de la aviación. Junto al museo de la aviación hay un parque empresarial. El número de calle del museo es 39, mientras que los números del parque empresarial comienzan con 39A. Por lo que puede parecer que 39 y 39A están cerca, pero se necesita aproximadamente una milla para caminar de uno a otro (y aún más si se va en coche) .
Este es solo un pequeño ejemplo tomado de mi ciudad, creo que probablemente se pueden encontrar muchas excepciones (especialmente en las partes rurales o más salvajes de cada país).

 1
Author: smok1,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-02 10:30:21