Armazenando um endereço para correspondência em um banco de dados: Qual estrutura devo usar para aplicativos internacionais?


8

Vou fazer com que usuários internacionais usem meu banco de dados, mas não sei como o sistema de correspondência opera fora dos EUA.

Os conceitos "Cidade", "Estado, País e possivelmente" CEP "são suficientes para capturar qualquer hierarquia (mesmo que tenha apenas 2 níveis de profundidade: (cidade / país)


1
Você sempre pode adicionar outro campo intl_addrs_line_3para obter informações adicionais que não são capturadas por cidade, estado / província, país, código postal.
FrustratedWithFormsDesigner

Respostas:


8

Use um único campo de texto sem formatação!

A menos que você esteja construindo um banco de dados para otimização da entrega ou outro uso altamente local, basta seguir em frente e armazenar o endereço completo como um campo de texto com quebras de linha padrão.

Se houver informações adicionais necessárias, como código postal ou rua para classificação e agrupamento para obter um desconto por correspondência em massa, você poderá armazená-las em um campo adicional ou apenas determiná-las na hora do correio por meio de algumas lógica bastante simples. (Ou você pode atribuir a cada endereço uma chave permanente e obter informações sobre descontos fornecidas por meio de outras tabelas.)

Agora, não estou dizendo que você não deve fornecer um formulário de endereço com várias partes com listas de cidades e estados e talvez uma referência automática à API de endereço de serviço postal de um país , mas não perguntou sobre como criar um formulário para entrada do usuário, você perguntou como armazenar o endereço em um banco de dados.


Obviamente, se você fizer esse formulário, poderá armazenar um blob JSON ou XML para que os campos possam ser preenchidos novamente, mas esses dados não são necessariamente necessários para o banco de dados ...


... E que 'lógica simples' permitiria determinar qual é o código postal de um único blob? Os códigos postais americanos têm 5 dígitos (9, na verdade) e são colocados no final de um endereço; Os códigos postais canadenses têm o formato A0A 0A0 e são colocados no final; Os códigos postais japoneses têm 7 dígitos e geralmente são colocados no início : no mínimo, você deseja armazenar o país (embora isso tenha problemas políticos), apenas para saber qual deve ser o formato. Por motivos de desempenho, qualquer coisa que você procurar / ordenar por devem estar em um campo separado, em que ponto você provavelmente deve fragmentá-lo ...
Clockwork-Muse

SELECT * FROM Customers C INNER JOIN PostalCodes P ON C.Address LIKE '%'+P.code + '%' E já observei que é possível incluir os campos distintos de agrupamento e classificação, no mesmo registro ou em uma tabela separada com uma relação de muitos para muitos entre endereços e aspectos de classificação.
DougM 8/13/13

Bem, espero que nenhum endereço possua dados com aparência de código postal de outro país! Embora o maior problema seja que em bancos de dados de qualquer tamanho, isso ignore os índices ... e é por isso que, como você diz, eles devem estar em campos separados.
Clockwork-Muse

6

Como em tudo, existe um padrão internacional. Nesse caso, é a ISO / IEC 19773 Parte 08: Estrutura de dados para dados postais da UPU . Mas, como sempre, com os padrões internacionais, eles são realmente complexos. Este possui 30 páginas e define cerca de 50 elementos possíveis que podem fazer parte de um endereço postal completo para cobrir qualquer esquema de endereçamento possível usado em algum lugar do mundo.

Embora essa possa ser a maneira correta de armazenar um endereço, pode não ser a praticável .

Para obter uma visão geral de como os endereços em diferentes países são exibidos, consulte o artigo da Wikipedia sobre endereços postais . Como você vê, quase todos os países usam pessoa, número da casa, rua e cidade (mas existem alguns casos estranhos, como o Irã, onde os edifícios têm nomes em vez de números ou o Japão, onde algumas cidades usam sistemas de coordenadas ). Além disso, alguns países são divididos em regiões e alguns os dividem ainda mais em sub-regiões. A maioria dos países usa CEPs de tamanhos diferentes, e geralmente você pode esperar que eles carreguem as mesmas informações que região, sub-região e cidade, mas geralmente ainda se espera que essas informações verifiquem se o CEP está correto.

Então, o que isso significa para o desenvolvedor de um banco de dados de endereços verdadeiramente internacional? Seja flexível. Não faça nenhum campo obrigatório e permita alguns campos opcionais de uso geral que podem ser usados ​​para representar peculiaridades regionais.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.