Normalização / validação para conjuntos de dados internacionais em um banco de dados?

Digamos que você esteja lidando com seu banco de dados de contatos normal (você sabe ... nome, número de telefone, endereço, email, etc ...). Se você está preocupado com isso localmente, geralmente não é um grande problema para lidar, mas quando olhamos para os conjuntos internacionais, é.

Olhando para o sistema de número de telefone, você pensaria que é simples, mas realmente não é. Na América do Norte, geralmente temos o formato 1-222-333-4444 para ligar para as pessoas. É claro que isso está dividido em seu código de discagem internacional, código de área, prefixo de troca e número da linha. Problema: os números de telefone reais são limitados, existem cerca de 220 códigos de área nos EUA entre os 1000 em potencial, cada código de área possui apenas um número limitado de trocas e os números de linha são restritos ao uso específico nesse país (por exemplo, os padrões com 911 são restritos, apenas cerca de 3/4 dos 10.000 estão em uso). Leve isso para o Reino Unido, eles têm seu próprio conjunto de regras para números de linha, como reservar a maior parte do bloco 0300-0399 para uso específico e outras restrições. Os códigos internacionais também são limitados. A normalização dos códigos de área, trocas e verificação de validação de dados nos números de telefone ficou complicada. Não vou entrar em detalhes sobre quando entramos em lugares que não fazem parte doEsquema NPA, mas vamos apenas identificar que não podemos realmente confiar no modelo norte-americano, relaxar e encerrar o dia.

Como normalizamos coisas como esta? Como validamos os dados? Como lidamos com esses códigos de extensão aparentemente ad-hoc ou instruções para discagem interna?

Endereços internacionais não são muito melhores, as diferenças entre não apenas os dados retidos, mas também os formatos de saída não são os mesmos em geral. Como lidamos com códigos postais internacionais, quando no Canadá o formato é A1A1A1 e os EUA têm um sistema como o 55555 [-4444]?

Fico tentado a escrever classes para cada uma dessas situações à medida que as encontro, armazená-las no banco de dados como XML / JSON / similar, mas como relacionar campos e pesquisar facilmente meu conteúdo? Não quero acabar criando uma lista de milhares de tabelas para cada país. Quero uma solução facilmente escalável em que possa normalizar meus endereços e validar o conteúdo. É pedir muito?

questionAnswers(3)

yourAnswerToTheQuestion