Almacenar una dirección de correo en una base de datos: ¿Qué estructura debo usar para las aplicaciones internacionales?

8

Haré que usuarios internacionales usen mi base de datos, pero no sé cómo funciona el sistema de correo fuera de los EE. UU.

¿Son los conceptos "Ciudad", "Estado, País y posiblemente" Zip "suficientes para capturar cualquier jerarquía (incluso si solo tenía 2 niveles de profundidad: (ciudad / país)

goodguys_activate
fuente
1
Siempre puede agregar otro campo intl_addrs_line_3para obtener información adicional que no sea capturada por ciudad, estado / provincia, país, código postal.
FrustratedWithFormsDesigner

Respuestas:

8

¡Use un solo campo de texto plano!

A menos que esté construyendo una base de datos para la optimización de la entrega u otro uso altamente local, debe continuar y almacenar la dirección completa como un campo de texto con saltos de línea estándar.

Si necesita información adicional, como un código postal o una calle para ordenar y agrupar para obtener un descuento por correo masivo, puede almacenarla en un campo adicional o simplemente determinarla al momento del correo por medio de alguna Lógica bastante simple. (O puede dar a cada dirección una clave permanente y obtener información para descuentos a través de otras tablas).

Ahora, no estoy diciendo que no deba proporcionar un formulario de direcciones de varias partes con listas de ciudades y estados y tal vez una referencia automática a la API de dirección de servicio postal de un país , pero no preguntó cómo construir un formulario para entrada del usuario, usted preguntó cómo almacenar la dirección en una base de datos.


Por supuesto, si hace ese formulario, es posible que desee almacenar un blob JSON o XML para que los campos se puedan volver a llenar, pero no son datos que su base de datos necesita necesariamente preocuparse ...

DougM
fuente
... ¿Y qué 'lógica simple' le permitiría determinar cuál es el código postal de un solo blob? Los códigos postales estadounidenses tienen 5 dígitos (9, en realidad) y se colocan al final de una dirección; Los códigos postales canadienses tienen la forma A0A 0A0 y se colocan al final; Los códigos postales japoneses son de 7 dígitos, y generalmente se colocan al principio : como mínimo, querrá almacenar el país (aunque eso tiene problemas políticos), aunque solo sea para saber cuál debería ser el formato. Por razones de rendimiento, cualquier cosa que busque / clasifique debe estar en un campo separado, en cuyo punto probablemente debería separarlo ...
Clockwork-Muse
SELECT * FROM Customers C INNER JOIN PostalCodes P ON C.Address LIKE '%'+P.code + '%' Y ya noté que puede incluir los distintos campos de agrupación y clasificación, ya sea en el mismo registro o en una tabla separada con una relación de muchos a muchos entre las direcciones y los aspectos ordenables.
DougM
¡Bueno, aquí esperamos que ninguna dirección tenga datos de código postal de otro país! Aunque el problema más grande es que en bases de datos de cualquier tamaño, esto ignoraría los índices ... por eso, como usted dice, deberían estar en campos separados.
Clockwork-Muse
6

Como con todo, hay un estándar internacional. En este caso, es la ISO / IEC 19773 Parte 08: Estructura de datos para datos postales de la UPU . Pero como es habitual con los estándares internacionales, son realmente complejos. Este tiene 30 páginas y define alrededor de 50 elementos posibles que pueden ser parte de una dirección postal completa para cubrir cualquier posible esquema de direccionamiento utilizado en algún lugar del mundo.

Si bien esta podría ser la forma correcta de almacenar una dirección, podría no ser la práctica .

Para obtener una descripción general de cómo se ven las direcciones en diferentes países, puede consultar el artículo de Wikipedia sobre direcciones postales . Como puede ver, casi todos los países usan persona, número de casa, calle y ciudad (pero hay algunos casos extraños, como Irán, donde los edificios tienen nombres en lugar de números o Japón, donde algunas ciudades usan sistemas de coordenadas ). Además, algunos países se dividen en regiones y algunos los dividen aún más en subregiones. La mayoría de los países usan códigos postales de diferente longitud, y por lo general puede esperar que lleven la misma información que la región, subregión y ciudad, pero generalmente se espera que esta información verifique que el código postal sea correcto.

Entonces, ¿qué significa eso para el desarrollador de una base de datos de direcciones verdaderamente internacional? Se Flexible. No haga falta ningún campo y permita algunos campos opcionales de propósito general que se pueden usar para representar peculiaridades regionales.

Philipp
fuente