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

122

Soy programador y, para ser sincero, no conozco las estructuras de direcciones de calles del mundo, sino cómo está estructurado en mi país :) ¿Cuál es el mejor y más común diseño de base de datos para almacenar direcciones de calles? Debería ser tan simple de usar, rápido de consultar y dinámico para almacenar todas las direcciones de calles del mundo que se identifica con solo una identificación
Muchas gracias

Arsen Mkrtchyan
fuente
Ver también: stackoverflow.com/a/21023793/59087
Dave Jarvis el
Preguntaste sobre las direcciones de las calles, pero todas las respuestas son sobre las direcciones postales ( ¿cuál es la diferencia? ). Quizás el título debería ser cambiado?
wrygiel

Respuestas:

123

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 / aldea), que se puede denominar genéricamente como 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á muchos campos si realmente quiere ser genérico.

La UPU Universal Postal Union proporciona datos de direcciones de 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 almacena 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 contenga todos los campos y una dirección por fila.

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

  • Dirección líneas 1-4
  • Localidad
  • Región
  • Código postal (o código postal)
  • País

Las líneas de dirección 1-4 pueden contener componentes como:

  • edificio
  • Subconstrucción
  • Número de premisa (número de casa)
  • Rango de premisa
  • Vía pública
  • Sub-vía
  • Localidad doblemente dependiente
  • Sublocalidad

Con frecuencia solo se utilizan 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ínea, 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 ingresar datos. Es por eso que estos elementos deben almacenarse como campos separados. Sin embargo, no obligue a los usuarios a proporcionar código postal o región, no pueden usarse localmente.

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

Edward Ross
fuente
1
¿Puedes dar una URL para la UPU? (Sí, sé que podría encontrarlo, pero las mejores respuestas no hacen que la gente haga la búsqueda)
Jonathan Leffler
Pruebe upu.int/post_code/en/… y elija el país apropiado en el menú desplegable
barrowc
URL agregada para el producto UPU Post * Code
Edward Ross
17
Además, algunos países (República de Irlanda, por ejemplo) no utilizan códigos postales. Si tuviera un centavo por la cantidad de veces que he tenido que ingresar un código postal (no aplicable) porque es un hombre de campo obligatorio. . . Ahora tendría cinco o seis centavos :)
Binary Worrier
Si la UPU tiene listas descargables, actualmente ha hecho un buen trabajo al mantenerlas muy bien ocultas.
Jahmic
47

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

(Todos los tipos de datos de caracteres de longitud variable)

AddressId
Line1
Line2
Line3
City
ZipOrPostcode
StateProvinceCounty
CountryId
OtherAddressDetails

ingrese la descripción de la imagen aquí

Trigo Mitch
fuente
No voté en contra, pero creo que la única forma en que esto podría funcionar es si todos los campos excepto AddressId y Line1 fueran opcionales. En cuyo caso, no es demasiado útil.
11
Los tipos de datos son importantes: ¡no todos los países tienen códigos postales enteros! Un compañero de trabajo lo descubrió rápidamente con un cliente en Canadá.
Eric
1
@Eric: Aparte de los campos Id, todos esos campos son tipos de datos de caracteres
Mitch Wheat
2
Para la identificación del país, debe usar el código de país ISO 3166 de 2 letras (o 3 letras). El esquema propuesto le permite almacenar una dirección analizada; no le dice cómo formatearlo. (Ah, y el Reino Unido tiene códigos postales alfanuméricos: IP31 3GH, SE1W 9PQ, etc. Creo que el segundo grupo siempre es NAA; el primer grupo comienza con A y contiene al menos un N (A = alfa, N = dígito), pero nada me sorprendería).
Jonathan Leffler
@Neil: Exactamente. Hay tanta variación por país que no puede usar una sola tabla y esperar que la base de datos la valide.
Dave Sherohman
26

Pregúntese cuál es el propósito principal de almacenar estos datos. ¿Tiene la intención de enviar un correo a la persona en la dirección? ¿Seguir datos demográficos, poblaciones? ¿Puede solicitar a las personas que llaman su dirección correcta como parte de alguna autenticación / verificación básica? Todas las anteriores? ¿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 los países, o c) arquitectura específica del país.

andora
fuente
Tiene sentido. Estoy buscando una buena solución para este problema, pero hay muchos diferentes. Como dijiste: probablemente sea mejor elegir entre los requisitos reales.
mostrar
12

A veces, lo más cerca que puede llegar a una dirección es la ciudad.

Una vez tuve un proyecto para poner todas las escuelas secundarias de la India en Google Maps. Escribí un programa rápido 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 "Al otro lado del mercado, al lado del barbero" o "Cerca de la vieja parada de autobús".

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

Emily
fuente
2
Las direcciones asiáticas también son conocidas por esto. "73rd Block West Ninjang St, Building 2, Take Second Upper Elevator, Complejo de oficinas al lado del patio de comidas, 468th Industrial District, Shanghai 456789" ...
ruhnet
9

Para las direcciones internacionales, es notablemente difícil encontrar una forma de formatear la información si se divide en campos. Por ejemplo, una dirección italiana usa:

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

Como

Via Eroi della Repubblica
89861 Tropea VV
Italy

Eso es bastante diferente del pedido de direcciones de EE. UU., En la segunda línea.

Ver también las preguntas SO:

Consulte también la etiqueta ' código postal '.


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

Jonathan Leffler
fuente
5

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 del teléfono, la señal del automóvil, la longitud y la expresión regular de Código Postal. Los nombres de países y los comentarios, lamentablemente, solo están en alemán ...

Hraban
fuente
2

Depende de qué forma libre esté preparado para ir con los campos. Obviamente, un campo de dirección de forma libre siempre funcionará, 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 países. Diablos, algunos países ni siquiera tienen "direcciones" en todas partes.

Te recomiendo que no intentes hacerlo demasiado inteligente.

jerryjvl
fuente
2

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

Recién salido del sombrero, puedo pensar en la siguiente estructura:

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

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

Una forma en que siempre creo 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 forma, puede estructurar sus datos en torno a la información proporcionada por las oficinas postales de todo el mundo.

Paulo Santos
fuente
2

Len Silverston, de la fama de Universal Data Model, recomienda una jerarquía separada de, GEOGRAPHIC BOUNDARIESy dependiendo de la cantidad de forma libre que esté dispuesto a aceptar, ya sea simples STREET ADDRESS LINEo derivados por país.

David Schmitt
fuente
1
Es cierto, y los modelos que Silverston creó son bastante buenos y cubren mucho terreno, pero todavía no creo que tal complejidad se aplique a la web (en este punto), especialmente desde la perspectiva del usuario final. Al final, la usabilidad (casi) siempre gana.
Alix Axel
2

No absolutamente no. Si compara la forma en que funcionan las direcciones estadounidense y japonesa , verá que no es posible.

ACTUALIZAR:

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

Un enfoque es modelar el problema con las 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 de nuevo al pk de su dirección padre. Es casi como usar un Mapa con nombre, pares de valores.

La compensación es tener que UNIRSE cada vez que desee una dirección. También debe interrogar los nombres de los atributos de dirección para averiguar con qué se enfrenta cada vez.

Otro enfoque sería hacer una investigación más completa 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, tantas como sea necesario para enlosar el espacio de direcciones. Entonces tendría una tabla maestra de direcciones y tablas secundarias para los otros tipos con una relación 1: 1 entre ellos.

¿Cómo lo hace Amazon o eBay? Envían internacionalmente. ¿Tienen características de IU específicas de la localidad? Solo he usado la configuración regional de EE. UU.

duffymo
fuente
1
¿Qué pasa si necesito la mayoría de las direcciones?
Arsen Mkrtchyan
Lo siento, no te estoy siguiendo aquí.
duffymo
2

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 Adressing the world, una dirección para todos que no hay ninguno. La mejor solución para esto es utilizar 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á desesperado por utilizar herramientas de fácil acceso para su proyecto, puede probar la API de Google Place .

Abel Callejo
fuente
¡Realmente me gusta la idea de ver cómo la API de Google Place maneja las cosas!
Andrew Steitz
1

Su diseño debe depender fuertemente de su propósito. Algunas personas han publicado cómo estructurar datos. Entonces, si simplemente desea enviar un correo electrónico a alguien, será suficiente. Las cosas comienzan a complicarse si desea utilizar estos datos para la navegación. La navegación en automóvil requerirá estructuras adicionales para contener la información del tráfico (por ejemplo, carreteras de un solo sentido), mientras que la navegación a pie requerirá muchos datos adicionales. Aquí hay un pequeño ejemplo: en mi ciudad, mi vecindario está cerca del parque. Al lado del parque se encuentra el antiguo aeródromo (de hecho, uno de los más antiguos de Europa) convertido en museo de aviación. Al lado del museo de la aviación hay un parque empresarial. El número de la calle para el museo es 39, mientras que los números del parque empresarial comienzan con 39A. Por lo tanto, puede parecer que 39 y 39A están cerca, pero se tarda aproximadamente una milla en caminar de uno a otro (e incluso más si se va en automóvil).
Este es solo un pequeño ejemplo tomado de mi ciudad, creo que probablemente pueda encontrar muchas excepciones (especialmente en zonas rurales o más salvajes de cada país).

smok1
fuente