Qual é uma boa estrutura de dados para armazenar números de telefone em campos de banco de dados? Estou procurando algo que seja flexível o suficiente para lidar com números internacionais e também algo que permita que as várias partes do número sejam consultadas com eficiência.
Edit: Apenas para esclarecer o caso de uso aqui: Atualmente, armazeno números em um único campo varchar e os deixo exatamente como o cliente os inseriu. Então, quando o número é necessário por código, eu normalizo. O problema é que, se eu quiser consultar alguns milhões de linhas para encontrar números de telefone correspondentes, isso envolve uma função, como
where dbo.f_normalizenum(num1) = dbo.f_normalizenum(num2)
o que é terrivelmente ineficiente. Além disso, as consultas que procuram coisas como o código de área tornam-se extremamente complicadas quando é apenas um único campo varchar.
[Editar]
As pessoas fizeram muitas sugestões boas aqui, obrigado! Como uma atualização, aqui está o que estou fazendo agora: eu ainda armazeno os números exatamente como foram inseridos, em um campo varchar, mas em vez de normalizar as coisas no momento da consulta, tenho um gatilho que faz todo o trabalho conforme os registros são inseridos ou atualizado. Portanto, tenho ints ou bigints para todas as partes que preciso consultar, e esses campos são indexados para tornar as consultas mais rápidas.