powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как хранить телефон?
16 сообщений из 16, страница 1 из 1
Как хранить телефон?
    #37043108
il760
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, как лучше хранить номер телефона?
В основном номера российских операторов.
Большей частью сотовые.
Номеров очень много и надо сделать ОЧЕНЬ быстрый поиск по номерам.
До этого хранение было в виде текстовой строки nvarchar(11).
Сейчас есть идея разбить номер на две части (оператор) + номер.
Т.е. например номер 8919-123-45-67
В базе хранить в двух полях 8919 и 1234567
Сами поля сделать числовыми smallint и int
Т.е. что-то типа этого
Код: plaintext
1.
2.
3.
CREATE TABLE [PHONE](
	[operator] [smallint] NULL,
	[phone] [int] NOT NULL)

По обоим полям сделать индекс.
И если сейчас поиск осуществляется вот так
Код: plaintext
SELECT * FROM phone WHERE phone=’ 89191234567
то по новому будет
Код: plaintext
SELECT * FROM phone WHERE phone= 1234567  AND operator= 8919 

Будет ли быстрее? Мне кажется будет, т.к. индекс станет продуктивнее – не будет одинаковых 4 цифр.
И это будет все-таки число.
...
Рейтинг: 0 / 0
Как хранить телефон?
    #37043113
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
il760Будет ли быстрее? Мне кажется будет, т.к. индекс станет продуктивнее – не будет одинаковых 4 цифр.
И это будет все-таки число.Не будет. Можно просто весь номер хранить в виде числа.

А какие там одинаковые цифры?
...
Рейтинг: 0 / 0
Как хранить телефон?
    #37043136
il760
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Одинаковые 8919, 8917 и что-то типа этого.
Этих кодов операторов получается около 50.
А в каждом таком коде по миллиону номеров.
...
Рейтинг: 0 / 0
Как хранить телефон?
    #37043192
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
il760Одинаковые 8919, 8917 и что-то типа этого.
Этих кодов операторов получается около 50.
А в каждом таком коде по миллиону номеров.А, понятно.

Вообще, если уж честно, первая цифра вообще везде одинаковая (кстати, зачем хранить префис выхода на межгород???), да и вариантов вторых не очень много :-)

Храните просто 9191234567 как целое число, если не планируется выходить за пределы российских номеров.
Или 79191234567, если планирутся
...
Рейтинг: 0 / 0
Как хранить телефон?
    #37043195
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
il760Одинаковые 8919, 8917 и что-то типа этого.
Этих кодов операторов получается около 50.Кстати, это не код оператора, а первые 3 цифры номера. Оператора по ним не определить (для всех случаев, хотя часто можно с большой вероятностью предположить).
...
Рейтинг: 0 / 0
Как хранить телефон?
    #37043349
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
il760 Будет ли быстрее?Ненамного. хотя уменьшится размер индекса 6 байт против 22
А вообще вопрос глупый ибо гораздо проще построить тестовую среду и замерить самостоятельно.
...
Рейтинг: 0 / 0
Как хранить телефон?
    #37043356
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257А вообще вопрос глупый ибо ...к примеру, мой домашний телефон отзывался на 985, потом на 495, а сейчас на 499, и это ещё не конец.
...
Рейтинг: 0 / 0
Как хранить телефон?
    #37043359
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych к примеру, мой домашний телефон отзывался на 985, потом на 495, а сейчас на 499, и это ещё не конец. И какое это имеет отношение к поиску по номеру?

Другой вопрос - всегда ли код города будет заполнен (из ddl этого не видно) будет ли поиск только по точному равенству.
...
Рейтинг: 0 / 0
Как хранить телефон?
    #37043362
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257egorych к примеру, мой домашний телефон отзывался на 985, потом на 495, а сейчас на 499, и это ещё не конец. И какое это имеет отношение к поиску по номеру?прямое, ибо заявлено, что:il760сейчас поиск осуществляется вот так
Код: plaintext
SELECT * FROM phone WHERE phone=’ 89191234567
хочется отметить дополнительно, что сейчас 8 ещё работает, но, вскорости нам обещают повсеместный переход на +7 , а далее, на +10, а далее...
...
Рейтинг: 0 / 0
Как хранить телефон?
    #37043376
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychхочется отметить дополнительно, что сейчас 8 ещё работает, но, вскорости нам обещают повсеместный переход на +7, а далее, на +10, а далее.Ээ... пусть об этом болит голова у аналитиков топикстартера.
Вопрос был стоит ли разбивать строковый телефонный номер на два целых числа?
Ответ: при поиске по точному соответсвию разница по времени отклика будет почти незаметна (ни по логическим чтениям, ни по времени отклика) хотя размер индекса должен сократится, что может повысить вероятность залезания в кэш и т.д. И предложил тупо провести эсперимент.
...
Рейтинг: 0 / 0
Как хранить телефон?
    #37043565
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychно, вскорости нам обещают повсеместный переход на +7 , а далее, на +10, а далее...
Какой еще +10?

Краткий ликбез.
Полный телефонный номер состоит из кода страны, номера зоны и номера абонента. В России код 7, номер зоны состоит из 3-5 цифр, номер абонента занимает еще 7-5 цифр.
Если оба абонента находятся в одной зоне (в применении к ТФОП), то можно набирать просто номер абонента.
Если нужно абоненты находятся в разных зонах, то нужно вначале набрать 8, что означает выход на междугороднюю линию, после чего набрать номер зоны и номер абонента. Если абоненты находятся в разных странах, то нужно набрать 8, затем 10 (выход на международную линию), после чего набрать номер зоны и номер абонента.
Знак + означает выход сразу на международную линию.
Таком образом, +7 соответствует 8-10-7.
+10 вообще никуда не попадет, потому что 1 — это код США или Канады, но номер зоны не должен начинаться с 0 (обычно 0 означает выход на международную линию в проводных аппаратах, в которых нет символа "+").

Лично я бы не парился и хранил строкой. Но код страны, код зоны и номер абонента хранил бы в трех разных полях.
...
Рейтинг: 0 / 0
Как хранить телефон?
    #37043604
Dim666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Храните номера в Е164, т.е. код_страны + код_города + номер_абонента (итого должен получиться номер из 11 знаков; код России - 7, код США например - 1 и т.д.; все эти коды известны - операторы по ним тарифицируют звонки). И не будет никаких проблем.

А все ваши манипуляции с "8" (вызов межгорода) и "810" (международный вызов) - это просто правила трансляции на вашей АТС-ке. Грубо говоря, если абонент вашей АТС-ки набрал номер "1234567", то реально это номер 74951234567 (например если ваша АТС в москве с кодом 495); если кто-то набрал номер 84882123456 (из 11 знаков), то вы должны его транслировать в межгород 74882123456 (код города 4882); если кто-то набрал "81012222333333" (из 14 знаков), то вы его транслируете в междунароный звонок на номер "12222333333" (т.е. отрезаете "810" и получается звонок куда-то в Америку/Канаду).
...
Рейтинг: 0 / 0
Как хранить телефон?
    #37043831
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim666, Alibek B.,

Это, конечно, хорошая идея - хранить код города или региона, только вот откуда их узнать?

Узнать-то можно (есть всякие официальные планы нумерации), но это увеличит объём работы и при этом непонятно зачем, раз требований к работе с кодами регионов нету.
...
Рейтинг: 0 / 0
Как хранить телефон?
    #37043860
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле, если телефон указан в полном формате, узнать легко.
Загружаете полный список кодов (он есть в открытом доступе, например на сайте mtt.ru), сортируете их по длине кода (по убыванию) и сверяете один за одним.
...
Рейтинг: 0 / 0
Как хранить телефон?
    #37043863
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А для простоты можно даже считать код зоны трехзначным.
Есть четырехзначные и пятизначные зоны, но во-первых их не так много, а во-вторых, они все-равно сгруппированы географически вокруг первых трех цифр.
Раньше была даже возможность выхода на "местную междугороднюю линию".
Если, к примеру, есть область/регион, в которой есть несколько городов с кодами 123-22, 123-71, 123-72, 123-73, 123-79, для набора номера можно было использовать 8-123-73-##### или 8-2-73-#####, последний вариант работал только внутри области/региона.
Поэтому даже если полный номер на самом деле 7-12373-12345, то не будет большой ошибки записать его как 7-123-7312345. Местные или рядом проживающие и так поймут, а далекопроживающим все равно.
...
Рейтинг: 0 / 0
Как хранить телефон?
    #37043971
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.А для простоты можно даже считать код зоны трехзначным.
Есть четырехзначные и пятизначные зоны, но во-первых их не так много, а во-вторых, они все-равно сгруппированы географически вокруг первых трех цифр.
Раньше была даже возможность выхода на "местную междугороднюю линию".
Если, к примеру, есть область/регион, в которой есть несколько городов с кодами 123-22, 123-71, 123-72, 123-73, 123-79, для набора номера можно было использовать 8-123-73-##### или 8-2-73-#####, последний вариант работал только внутри области/региона.
Поэтому даже если полный номер на самом деле 7-12373-12345, то не будет большой ошибки записать его как 7-123-7312345. Местные или рядом проживающие и так поймут, а далекопроживающим все равно.В принципе разумно.

Лучьше даже для простоты считать код зоны однозначным - тогда он будет влезать на один экран, и справочник будет маленьким, для быстродействия.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как хранить телефон?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]