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