Какова хорошая структура данных для хранения телефонных номеров в полях базы данных? Я ищу что-то достаточно гибкое, чтобы обрабатывать международные номера, а также что-то, что позволяет эффективно запрашивать различные части номера.
Изменить: просто чтобы прояснить здесь вариант использования: в настоящее время я храню числа в одном поле varchar и оставляю их так же, как их ввел клиент. Потом, когда номер нужен по коду, нормализую. Проблема в том, что если я хочу запросить несколько миллионов строк, чтобы найти совпадающие номера телефонов, это включает в себя функцию, например
where dbo.f_normalizenum(num1) = dbo.f_normalizenum(num2)
что ужасно неэффективно. Кроме того, запросы, которые ищут такие вещи, как код города, становятся чрезвычайно сложными, когда это всего лишь одно поле varchar.
[Редактировать]
Здесь много хороших предложений, спасибо! В качестве обновления вот что я делаю сейчас: я все еще храню числа в том виде, в котором они были введены, в поле varchar, но вместо нормализации вещей во время запроса у меня есть триггер, который выполняет все, что работает при вставке записей или обновлено. Итак, у меня есть целые числа или большие значения для любых частей, которые мне нужно запросить, и эти поля индексируются, чтобы запросы выполнялись быстрее.