¿Cómo debe geográfica internacional, las direcciones se almacenan en una base de datos relacional?

Dado a la tarea de almacenar internacional de domicilios geográficos en una tabla relacional, lo que es más flexible esquema? Debe cada parte de la dirección se divide en sus propios campos, o en caso de ser más como texto libre?

Hay ningún sentido en la separación de diferente formato de dirección en diferentes tablas? Por ejemplo, tenemos una tabla para USAAddress, CanadianAddress, UKAddress…?

InformationsquelleAutor Bob | 2009-07-21

9 Kommentare

  1. 93

    Voy a resumir mis pensamientos de mi blog post – Una lección en la dirección de almacenamiento.

    En mi proyecto actual [yo trabajo para una empresa de logística] estamos almacenar internacional de direcciones. He hecho una investigación de las direcciones de todo el mundo en el diseño de esta parte de la base de datos. Hay un montón de formatos diferentes. En el mundo Occidental se tiende a utilizar de una manera bastante uniforme formato – un par de diferencias, pero la mayoría son:

    • Número De La Calle Numéricos
    • Casa o Edificio Nombre de – [VarChar – en el reino unido algunas casas/edificios son identificados por nombre, no por el número]
    • Número de la calle Sufijo [VarChar, aunque en la mayoría de los casos, de tipo Char(1) sería suficiente]
      • A, B, etc
    • Nombre De La Calle [VarChar]
    • Tipo de calle [Int VarChar o si usted tiene un StreetTypes tabla]
      • Hasta ahora, he encontrado 262 tipos únicos en el mundo de habla inglesa, hay probablemente más, y no se olvide de otros idiomas es decir Strasse, la calle, etc.
    • Dirección De La Calle [VarChar(2)]
      • N, E, S, W, NE, SE, NW, SW
    • Tipo de dirección [Int VarChar o si usted tiene un AddressTypes tabla]
      • PO Box
      • Apartamento
      • Edificio
      • Piso
      • Oficina
      • Suite
      • etc…
    • Dirección Del Identificador Del Tipo De [VarChar]
      • es decir, el Cuadro de Número, Número de Apartamento, en el Piso Número recordar el numero de apartamentos y oficinas, a veces, han alfanumérico de información – como 1A
    • Municipio Local [Int VarChar o si usted tiene un Municipios de la tabla]
      • Por ejemplo, si su aldea/pueblo que aparece en la dirección antes de la ciudad.
    • Ciudad/Pueblo [Int VarChar o si usted tiene una de las Ciudades de la tabla]
    • Consejo de Distrito [Int VarChar o si usted tiene una Distritos de la tabla]
      • Estado (de estados UNIDOS)
      • Provincia (Canadá)
      • Distrito Federal (México)
      • County (reino unido)
      • etc…
    • Postal De La Zona [VarChar]
      • Zip (estados UNIDOS)
      • Código Postal (Canadá, México)
      • Código postal (reino unido)
    • País [Int VarChar o si usted tiene un de los Países de la tabla]

    Este aparece para cubrir la mayoría de los países pero el orden de los campos se muestran de forma diferente. Usted puede encontrar una lista de los formatos de visualización en http://www.bitboost.com/ref/international-address-formats.html#Formats

    Por ejemplo, en muchos países, el código postal cae antes de que el nombre de la ciudad y el número de la calle de las caídas después de el nombre de la calle. En Canadá, estados UNIDOS y el reino unido, el número de la calle precede el nombre de la calle y el código postal (ZIP o) viene después de el nombre de la ciudad.

    En respuesta a su pregunta acerca de la separación de las direcciones en diferentes países, yo no lo recomendaría, que se acaba de hacer la vida más difícil en otras áreas – por ejemplo, la presentación de informes. El formato me ha proporcionado cubre todas las direcciones en nuestra base de datos de logística que cubre los estados UNIDOS, Canadá, México y el reino unido sin ningún tipo de problemas. También cubre todos los de nuestro Europea, China, japón y Malasia direcciones. No puedo hablar por otros países, pero todavía no he tenido para almacenar una dirección de un país que estos campos no apoyo.

    No sugiero ir con el Ip1, Ip2, Address3 formato sugerido por los demás y visto en muchas bases de datos debido a que el análisis de la información de la dirección de una cadena alfanumérica no es tan simple como podría parecer a primera vista – especialmente si los datos no se escribe correctamente, debido a la desinformación, error ortográfico, falta de ortografía, etc. Si a separar los campos que se pueden utilizar de distancia algoritmos de verificación para que probable que el significado, el uso de la probabilidad para comprobar el nombre de la calle contra el código postal y número de la calle o a la verificación de la provincia y la ciudad en contra del nombre de la calle, etc. Trate de hacer alguna de que cuando tienes una cadena que denota toda su dirección de la calle. No es un asunto trivial por cualquier tramo de la imaginación.

    QA en una base de datos de direcciones es un dolor de cabeza, período. La manera más fácil para simplificar tu vida en esta zona es asegurarse de que todos los campos contienen una sola pieza de información que pueden ser verificadas automáticamente como correcta en el tiempo de entrada. Probabilidad, la distancia algoritmos y expresiones regulares puede comprobar la validez de entrada y proporcionar información al usuario en cuanto a lo que su error fue y sugieren adecuado correcciones.

    Una advertencia a tener en cuenta es las carreteras con nombres que son también los tipos de la calle – si usted está cubriendo el Canadá, usted necesita estar consciente de «Avenue Road» en Toronto que va a cometer un gran tiempo si usted está utilizando la Dirección 1, 2, 3 formato. Esto ocurre probablemente en otros lugares también, aunque no soy consciente de ellos – esta sola instancia fue suficiente para mí para gritar WTF?!

    • 262 tipos de calles? Puedo preguntar cómo se obtuvo esta información?
    • Montones y montones de búsqueda y la lista de mantener. Australia, reino unido, Irlanda, Canadá, estados UNIDOS, Islas del Canal, Francia. Fue una tarea ardua, sin llegar a cada país en la postal de la base de datos.
    • No hay que olvidar que en el inglés partes del mundo, que a menudo robar nombres de otros países – es decir, el NOS usa nombres en español en un montón de lugares y Canadá utiliza francés también.
    • ¿Cómo manejar solicitar esta información de los usuarios? Lo que realmente tiene este muchos campos para leer y descifrar? Entiendo la necesidad de ello, pero también hay una necesidad de mantener los datos de entrada extremadamente simple para los usuarios, especialmente cuando complicadas formas puede perder una venta o de un nuevo miembro.
    • Error: tienes un par de opciones, ofrecen distintos campos que el usuario moverse entre ellos, o analizar los datos y almacenarla en los campos correctos en el camino, o analizarlo en el camino cuando usted está informando sobre ella. Dependiendo de cómo se usa el sistema determina el método más apropiado. Si es pesado en la elaboración de informes de análisis en el tiempo de entrada, si es pesado en la entrada, y la luz sobre la presentación de informes, análisis en tiempo del informe.
    • El título de la pregunta «¿Cómo debería de internacional geográfica de las direcciones se almacenan en una base de datos relacional», así que tu comentario es irrelevante en este contexto.
    • Lo siento, no debería haber caído de la en la línea de direcciones locales. Este tema es visto por la gente que quiere la dirección en tanto locales como internacionales. Línea De Fondo. Demasiado complejo! especialmente para los internacionales de direcciones. la mayoría de los desarrolladores no pueden pasar la enorme cantidad de tiempo para equivocarse en la final como Rubén señala. Me gustaría que hubiera una píldora corrige todos pero no la hay. simple es mejor. con fuertes funciones de búsqueda y, posiblemente, la intervención del operador cuando un potencial de errores de los cultivos.
    • ¿hay alguna posibilidad de ser capaz de leer su publicación del blog?. He intentado acceder al enlace que te dio, pero el acceso es denegado. Gracias.
    • el tema es visto por la gente que quiere la dirección en tanto locales como internacionales. Parte Inferior De La Línea. Entonces ellos están buscando la pregunta equivocada. Línea de fondo.
    • Disculpas, esto ha sido corregido
    • Cómo cuánto debe cada varchar campo?

  2. 21

    Tenga cuidado de no sobre-analizar formatos de dirección. Cuando usted lo hace, usted es bastante probable que termine con una especificación de la mayoría de los usuarios tendrán que trabajar alrededor de, lo que obliga a utilizar los campos incorrectos, o sólo el llenado de los campos primarios y haciendo caso omiso de los campos adicionales.

    Mantener las cosas simples.

    Un StreetType como se mencionó por BenAlabaster causará problemas al comenzar a trabajar con idiomas diferentes desde el aislamiento de idiomas como el inglés o el español.

    Para mostrar lo mal que se lo puede obtener en la naturaleza: la «Henriette Roland Holststraat» en Amsterdam, construido a partir de «Henriette» + «de Roland Holst» + «straat», que se puede abreviar como «Roland Holststraat», o «Roland Holststr.», o mal escrito como «H. R. Holststr.» o «Henriette Roland-Holst straat», dependiendo del clima. A menos que tengas un up-to-fecha de calle registrar para cada país en la tierra, que va a ir a ninguna parte.

    Y, finalmente, tenga cuidado de que en algunos países multilingües, los nombres pueden ser diferentes de un idioma a otro! Por ejemplo, en Bruselas, donde muchas calles tienen un francés y un holandés de nombre de: «Avenu du Port» y «Havenlaan», dependiendo del destinatario, en el idioma que prefiera. (Google Maps muestra ambos nombres alternativamente, sólo para estar en el lado seguro.)

    Usted puede tratar de idear todo tipo de trucos aquí, pero son los representantes de ventas. va a entender esto?

    • Usted hace aumentar un buen punto de que yo no había cubierto en mi respuesta. Este es sin duda algo que debe ser considerado cuando la contabilidad para el holandés, alemán y otros no-aislamiento de idiomas.
  3. 8

    Que depende de lo que quieras hacer con ella.

    He encontrado que es siempre más fácil el uso de direcciones para otros fines, tales como la verificación en contra de USPS datos o conseguir las tarifas de envío de UPS/FEDEX) si están separados.

    Esto es lo que normalmente se utiliza para direcciones:

    • Línea De La Dirección 1
    • Línea De La Dirección 2
    • Línea De La Dirección 3
    • Ciudad
    • Región
    • Código Postal
    • Condado de
    • País

    En Respuesta a la edición: Para la mayoría de las situaciones no veo el uso. La tabla I se enumeran anteriormente, se ha de suficientes campos (y es lo suficientemente genérico) para la mayoría del país las direcciones.

    • Línea de dirección 1, 2 y 3 son sin duda lo suficientemente genérica pero cuando se trata de análisis de direcciones mediante programación, vas a ser regado. Análisis de direcciones mediante programación no es una tarea trivial cuando se considera internacional formatos de dirección.
    • No todos los países tienen los condados de tho…
    • Axel – y para los países, deje el campo en blanco
  4. 6

    Dirección

    Como un polo opuesto a la excelente respuesta de @BenAlabaster ha proporcionado, usted podría simplemente tener:

    address       TEXT(300)
    postal_code   VARCHAR(15)
    country_code  VARCHAR(2)
    

    Su lado del cliente diseños de formas todavía puede ser tan complejo como mejor le parezca (o el uso de un multi-entrada de línea donde el usuario puede escribir manualmente su dirección). A continuación, puede agregar los saltos de línea en la dirección cuando sea necesario.

    País

    Su país de la tabla quedaría como sigue:

    country_code  VARCHAR(2)
    country_name  VARCHAR(255)
    

    Además, usted podría tener uno de los siguientes:

    postal_code_required  TINYINT(1)
    postal_code_regex     VARCHAR(255) NULL DEFAULT NULL
    

    A continuación, utilice las siguientes listas para el diseño de su país tabla:

  5. 4

    Aquí una anécdota para cualquier persona que se tropieza en esta pregunta:

    Hablo como una persona que ha vivido y trabajado en muchos de los continentes (Europa, Asia, América del Norte). En mi experiencia, y la experiencia de la gente con la que trabajo, ha sido mucho más fácil para nosotros el uso de sistemas que hacer lo siguiente:

    1. Proporcionar tres líneas en el que yo le escriba una dirección. Pasar estas tres líneas a su servicio postal local como me escriba ellos, pie de la letra. Permítanme usar cualquier conjunto de caracteres que quiero; el uso de UTF-8 o algo mejor.
    2. Si su sistema tiene los requisitos de negocio que necesita de mí para especificar información en particular ( como el código postal, la prefectura, estado, etc. ), se ha de pedir por separado. Por los requisitos de negocio, me refiero a cosas como google analytics; estos bits de información no debe ser compartida con su servicio postal local ( a menos que también me pasa a escribir la misma información en una de las tres líneas del Punto 1 anterior ).
    3. Tener un desplegable en el que me pide que especifique la categoría de ubicación de la dirección que he proporcionado en las líneas del Punto 1 anterior, quizás País.
    4. Si se debe analizar la información que yo provea en las líneas de Punto 1, uso mi respuesta al Punto 3 para seleccionar regex. De ejecución que regex en contra de la información en el Punto 1 para analizarlo. Trate de llenar los elementos de interfaz de usuario del Punto 2, usando la salida de su expresión regular. Si estoy en lo correcto que autofilled información–utilice el hecho de que he cambiado para mejorar su expresión regular. Del mismo modo, tanto como sea posible, dame una oportunidad para revisar y corregir la salida de su regex: nadie sabe mejor lo que quiere comunicar que a mí.

    Sistemas construido como este, me parece, hacer mi vida más fácil. Especialmente cuando estoy de envío de correo a un sistema postal acerca de que su empresa no tiene prácticamente ninguna funcional interna de conocimientos.

    Si su empresa tiene conocimiento interno sobre el particular, los sistemas postales, uso mi selección en el Punto 3 para informar a la vista de la pantalla para mí. Mucha gente sabe lo que el sistema postal de los estados unidos espera que en el embalaje, si puedo elegir NOSOTROS en el Punto 3, siéntase libre de hacer la vista look adecuado para una dirección en los estados unidos. Si selecciono un país sobre el que su firma no sabe nada–mostrar un genérico de tres líneas y me deja hacer el resto; no me obligues a utilizar ASCII.

    Y vamos a ser real aquí-la construcción completa, enciclopédico de la base de datos de todos postal mundial de sistemas ( público y privado ) es una tarea titánica, en el mejor, si no imposible. Hay, por ejemplo, los sistemas postales en los que sólo el local, la «última milla» portador sabe realmente cuando el domicilio se encuentra. A veces, ser capaz de pasar las notas para que la compañía aérea en el envase es muy útil. De asignación y el conocimiento local de cada caso extremo compañía en su base de datos es de hecho una tarea imposible.

    Sólo pregunte a Gödel. ( Y luego pregúntate si estás tratando de usar un sistema axiomático para el modelo de un universo de discurso, dar o tomar algún tipo de aritmética, como la teoría de conjuntos o relacional el álgebra. )

  6. 1

    El comentario de Ben Alabastro de la Respuesta:
    El formato de las direcciones se basan en el país, se puede utilizar un formato de tabla que tiene el orden de las columnas para cada país por separado de las filas.

    • AddressFormat(Código Del País, FieldName, FieldOrder)

    El orden de los campos puede ser codificado para el uso de complejos diseños de cuadrícula también.

    No hay ningún punto en la separación de los discursos del país. Este será caótico como el número de países que se incrementa y la tierra en problemas si usted quiere encontrar todas las direcciones de decir, un cliente internacional.
    Tener un Tipo de Dirección sugerida por Ben también podría dar lugar a ambigüedades cuando usted tiene una dirección que tiene un número del edificio y un número de apartamento. Yo podría estar en un complejo de apartamentos donde cada edificio tiene un nombre diferente. Esto es muy común en la India.

  7. 1

    Yo uso https://github.com/commerceguys/addressing biblioteca a formato internacional de direcciones y utilizar estos elementos:

    Country
    Administrative area
    Locality (City)
    Dependent Locality (in: BR, CN, IR, MY, MX, NZ, PH, KR, ZA, TH)
    Postal code
    Sorting code
    Address line 1
    Address line 2
    Organization
    Recipient
    

    Este doen’t ayuda si desea analizar la calle (nombre, número de casa, …).

    Por cierto. si usted está buscando un multilenguaje país de la lista: https://github.com/umpirsky/country-list

  8. 0

    La única manera es dividirlas en:

    Name varchar,
    Title varchar,
    StreetAddress varchar,
    StreetAddressLine2 varchar,
    zipCode varchar,
    City varchar,
    Province varchar,
    Country lookup
    

    ya que casi cada país tiene su propio estándar para tener datos de la dirección, y cada país tiene un formato diferente de zipcodes.

    Usted puede tener una pequeña muestra de los problemas en mi post a partir de una pregunta similar.

    Esto no debería tener sentido para separar las direcciones de cada país, ya que hay países donde tiene algunas convenciones de dirección. Algunos populares de convenios incluyen no tener las calles en los pueblos pequeños, sólo el nombre del pueblo y número, mientras que las calles están en las ciudades más grandes de direcciones. He aprendido que en la capital de Hungría – Budapest, hay pocas calles con el mismo nombre (distinto de ellos por ciudad, número de distrito), mientras que otras ciudades no tienen este tipo de direcciones (alguien de Hungría en realidad puede confirmar si esto es cierto). Por lo que el número total de formatos de dirección será numer_of_countries, multiplicado por el número de formatos de dirección en este país… se Puede hacer con diferentes tablas, pero va a ser horrible trabajo que hacer.

    • ¿Cómo es que has utilizado Provincia pero Sabías que? También, el StreetAddress y StreetAddressLine2 son lo suficientemente genérica como para fines de visualización, pero si tienes que hacer EDI o análisis de las direcciones de programación para control de calidad (o por cualquier otra razón), usted va a ser un árbol de la goma.
    • Simplemente depende de lo que necesitan esos datos. Para el envío de correos a los clientes en todo el mundo mi solución va a estar bien. Para todo el mundo EDI usted probablemente necesitará algo así como su respuesta a esta pregunta. Sin embargo, para fines de navegación, necesitará más estructuras de datos que contiene datos SIG y los enlaces entre ellos (para que sepa que adress1 se encuentra en el mismo lugar que adress2, incluso a pesar de que tienen diferentes nombre de la calle, etc). Así que es difícil decir que la solución es aceptar (no demasiado complicado y lo suficientemente preciso) sin conocer el contexto.
  9. 0

    Sé que este es un muy viejo tema que ya está contestada, pero yo pensé que me gustaría lanzar mis dos centavos en el así. Todo depende de lo que las metas de su proyecto y cómo espera que sus usuarios objetivo para introducir direcciones. Ben sugerencia le permitirá analizar direcciones con precisión, pero por otro lado podría ser una más (y posiblemente más frustrante) el usuario el proceso de entrada de datos. Stephen Wrighton la sugerencia es simple, y podría ser más fácil para los usuarios para introducir direcciones como resultado.

    También he visto algunos modelos que simplemente tenía una columna «Dirección» que la captura de un típico número de la calle, el tipo, el nombre de la calle, de la unidad /número de apartamento, etc. todos en una columna, manteniendo Ciudad, País, Región, etc. dentro de las otras columnas. Similar a Esteban modelo, excepto Ip1, Ip2, y Address3 todos consolidado en una sola columna.

    Mi opinión es que la mayoría de los modelos flexibles tienden a ser aquellos que son menos restrictivos, en función de su interpretación de flexible.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea