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