Soy programador y para ser sincero no conozco las estructuras de las direcciones de las calles del mundo, 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 las direcciones de las calles? Debe ser tan simple de usar, rápido de consultar y dinámico para almacenar todas las direcciones de las calles del mundo que está identificando con una sola identificación
Muchas gracias¿Existe un diseño común de la base de datos de direcciones para todas las direcciones del mundo?
Respuesta
Es posible representar las direcciones de las porciones de diversos países en un conjunto estándar de campos. La idea básica de una ruta de acceso (vía) nombrada en la que se encuentran los edificios nombrados o numerados es bastante estándar, a excepción de 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 dirección para muchos países en un standard format. 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 la siguiente:
- líneas de dirección 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 tales como:
- Edificio
- Sub-Edificio número
- La premisa (número de casa)
- Rango Premisa
- , Vías
- Sub-Vías
- Localidad doble Dependiente
- Sublocalidad
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ínea, lo que significa que la información aún se puede capturar.
Normalmente el análisis de los datos se realizará 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 ser clara, en particular 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 localidad postal oficial.
¿Puedes dar una URL para la UPU? (Sí, sé que podría encontrarla, pero las mejores respuestas no hacer que las personas realicen la búsqueda.) –
Pruebe http://www.upu.int/post_code/en/postal_addressing_systems_member_countries.shtml y elija el país apropiado en el menú desplegable – barrowc
URL agregada para UPU Código postal * producto –
Eche un vistazo a Database Answers. En concreto, este abarca muchos casos:
(Todo tipo de datos de longitud variable de caracteres)
AddressId
Line1
Line2
Line3
City
ZipOrPostcode
StateProvinceCounty
CountryId
OtherAddressDetails
No he votado negativamente, pero creo que la única forma de que esto funcione es si todos los campos, excepto AddressId y Line1, son opcionales. En ese caso, no es demasiado útil. –
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
@Eric: Aparte de los campos Id, todos esos campos son tipos de datos de caracteres –
No, en absoluto. Si compara la forma en que US y Japanese addresses funcionan, verá que no es posible.
ACTUALIZACIÓN:
Pensándolo bien, nada se puede hacer, pero hay un trade-off.
Un enfoque es modelar el problema con las tablas address_attribute y address, con una relación 1: m entre ellas, todo se puede modelar. La tabla address_attribute tendría un pk, un nombre, un valor y un fk que apunta a su dirección parent's pk. Es casi como usar un Mapa con nombre, pares de valores.
El trade-off es tener que hacer un JOIN cada vez que quiera una dirección. También debe interrogar los nombres de los atributos de dirección para descubrir con qué trata cada vez.
Otro enfoque sería realizar una investigación más exhaustiva sobre cómo se modelan las direcciones en todo el mundo. En un mundo orientado a objetos, puede tener la clase Dirección occidental (calle1/calle2/ciudad/estado/postal) y otras para Japón, China, tantas como sea necesario para delimitar el espacio de direcciones. Luego tendría una tabla de direcciones maestra y tablas secundarias para los otros tipos con una relación 1: 1 entre ellos.
¿Cómo lo hace Amazon o eBay? Ellos envían internacionalmente. ¿Tienen características de interfaz de usuario específicas de la configuración regional? Solo he usado la configuración regional de EE. UU.
¿Qué sucede si necesito la mayoría de las direcciones? –
Lo siento, no lo estoy siguiendo aquí. – duffymo
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 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 de calles" en todas partes.
Le recomiendo que no intente hacerlo demasiado inteligente.
A diferencia de otras respuestas aquí, creo que es posible tener una base de datos de direcciones estructuradas.
Justo de la chistera, se me ocurre 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 la que siempre creo que se puede lograr es solicitar 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.
Len Silverston de Universal Data Model fama recomienda una jerarquía separada de GEOGRAPHIC BOUNDARIES
y dependiendo de la cantidad libre de forma-ción que está dispuesto a aceptar, ya sea simples o derivados STREET ADDRESS LINE
s por el país.
El modelo Sin embargo, es una locura ... –
La realidad es locura también ... –
Cierto, y los modelos que Silverston ideó son bastante buenos y cubren mucho terreno, pero todavía no creo que esa complejidad sea aplicable a la web (en este punto), especialmente desde la perspectiva del usuario final. Al final, la usabilidad (casi) siempre gana. –
Pregúntese ¿cuál es el principal propósito de almacenar esta información? ¿Tiene la intención de enviar un correo a la persona en la dirección? Rastrear datos demográficos, poblaciones? ¿Puede pedirle a las personas que llaman su dirección correcta como parte de una autenticación/verificación básica? Todas las anteriores? ¿Ninguna de las anteriores?
Dependiendo de su necesidad real, determinará a) en realidad no importa, y puede optar por un enfoque de texto libre, ob) campos estructurados/específicos para todos los países, o c) específicos del país arquitectura.
Tiene sentido. Estoy buscando una buena solución a este problema, pero hay muchas diferentes. Como usted dijo: Probablemente sea mejor elegir entre los requisitos reales. – displayname
Para direcciones internacionales, es notablemente difícil encontrar una forma de formatear la información si está desglosada en campos. Como por ejemplo, una dirección italiana utiliza:
<street address>
<zip> <town> <region>
<country>
Tal como
Via Eroi della Repubblica
89861 Tropea VV
Italy
Eso es bastante diferente de la resolución de direcciones de los EEUU - en la segunda línea.
Ver también los SO preguntas:
- How many address fields would you use for a UK database?
- Do you break up addresses into street/city/state/zip?
- How do you deal with duplicate street suffixes?
- Best practices for storing postal addresses in a database (RDBMS)?
También puedes ver la etiqueta 'postal-code'.
Edición: Orden inverso de la región y de la ciudad - por UPU
Su diseño debe depender fuertemente de su propósito. Algunas personas han publicado cómo estructurar los datos. Entonces, si simplemente desea enviar correos electrónicos a alguien, lo hará. Las cosas comienzan a complicarse si desea utilizar estos datos para la navegación. La navegación del automóvil requerirá estructuras adicionales para contener información de tráfico (por ejemplo, caminos de dirección única), 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 se encuentra el antiguo aeródromo (de hecho, uno de los más antiguos de Europa) convertido en museo de aviación. Junto al museo de aviación hay un parque empresarial. El número de la calle para el museo es 39, mientras que los números del parque de negocios comienzan con 39A. Entonces, puede parecer que 39 y 39A están cerca, pero se tarda aproximadamente una milla en caminar de uno a otro (y aún más si se va en automóvil).
Este es solo un pequeño ejemplo tomado de mi ciudad, creo que probablemente puedas encontrar muchas excepciones (especialmente en partes rurales o más salvajes de cada país).
A veces, lo más cercano que se puede llegar a una calle es la ciudad.
Una vez tuve un proyecto para poner todas las escuelas secundarias de la India en Google Maps. Escribí un programa espectacular usando la API de Google y pensé que sería bastante fácil.
Luego obtuve los datos del cliente. Algunas direcciones escolares eran cosas como "Al otro lado del mercado, al lado del barbero" o "Cerca de la parada de autobús antiguo".
Hice mi tarea mucho más difícil ya que, lamentablemente, la API de Google no es compatible con ese formato.
Tal vez esto es útil: https://gist.github.com/259744 Para un proyecto que recogí una tabla de información sobre todos los países del mundo, incluyendo los códigos ISO, dominio de nivel superior, prefijo telefónico, muestra del coche, la longitud y expresiones regulares de cremallera. Los nombres de los países y los comentarios lamentablemente solo en alemán ...
Gracias @Hraban great link –
No, no hay un esquema de direccionamiento estándar. Por lo general, varía de un país a otro. Incluso el Universal Postal Union dijo en Adressing the world, an address for everyone que no hay ninguno. 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á desesperado por utilizar herramientas de fácil acceso para su proyecto, puede probar Google Place API.
¡Me gusta mucho la idea de ver cómo Google Place API maneja las cosas! –
- 1. Diseño de la base de datos de la libreta de direcciones: desnormalizar?
- 2. ¿Cómo representar mejor las direcciones en una base de datos
- 3. Calculando todas las direcciones dentro de una subred ... para IPv6
- 4. IP todas las direcciones en una subred
- 5. Obtener todas las direcciones IP asignadas a un servidor
- 6. Script Bash para obtener todas las direcciones IP
- 7. ¿Diferencia entre direcciones lógicas y direcciones físicas?
- 8. ¿hay un servicio gratuito que completa automáticamente las direcciones postales (nombres de calles) para todos los países del mundo?
- 9. Obtener todas las direcciones IP en la máquina
- 10. .htaccess redirigir a todas las direcciones IP, pero la mía
- 11. Rieles: bloquear todas las direcciones IP excepto las seguras
- 12. Mejores prácticas para el almacenamiento de direcciones coherente y completo en una base de datos
- 13. Encontrar el rango de direcciones del segmento de datos
- 14. Rangos de direcciones IPv6
- 15. Comprobando las direcciones IP
- 16. C# - Buscar todas las direcciones de correo electrónico para un usuario de Active Directory
- 17. Cómo hacer que Fiddler escuche todas las direcciones IP
- 18. Aleación de diseño de espacio de direcciones (ALSR) y mmap
- 19. ¿Cómo diseñar mejor las ubicaciones de direcciones en cualquier base de datos SQL?
- 20. algoritmo para verificar las direcciones de las coincidencias?
- 21. reescriba las direcciones URL del nombre del producto
- 22. encontrar direcciones duplicadas en la base de datos, ¿evita que los usuarios las ingresen temprano?
- 23. Delphi, ¿Cómo obtener todas las direcciones IP locales?
- 24. Necesito un algoritmo de coincidencia de direcciones
- 25. ¿Direcciones públicas estándar de ISO?
- 26. El diseño de las direcciones URL de descanso para páginas web
- 27. abiertos Google Maps para direcciones de bus
- 28. ¿Cómo se asignan las mismas direcciones virtuales para diferentes procesos a diferentes direcciones físicas?
- 29. cómo no permitir todas las direcciones URL dinámicas robots.txt
- 30. ¿La fuente más completa de formatos de direcciones internacionales?
Vea también: http://stackoverflow.com/a/21023793/59087 –
Ha preguntado sobre direcciones, pero todas las respuestas son sobre direcciones postales ([¿cuál es la diferencia?]) (Http://painintheenglish.com/ caso/3604)). Tal vez el título debería ser cambiado? – wrygiel