powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как лучше хранить номер телефона?
79 сообщений из 79, показаны все 4 страниц
Как лучше хранить номер телефона?
    #32898881
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сабж. Номер телефона может начинаться с одного или нескольких нулей. Разумеется, строковое представление неприемлимо. Мне пришла мысль хранить его в виде нецелого числа, и всю работу приложения строить с такими числами, а только на клиенте преобразовывать в человекочитаемый вид. Какие будут ещё идеи? Решающий фактор - минимальный объём, занимаемый данными, максимальная скорость работы с таким типом данных. Oracle 9
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32898890
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как в числовом варианте хранить паузу, например:

8W0951111111
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32898895
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пофиг. Это не есть компонента номера телефона. Но сейчас подумал, что номер 10 и номер 100 - не одно и то же. Как бы извернуться? :)
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32898906
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разумеется, строковое представление неприемлимо

А можно объяснить, почему
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32898929
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tru55 Разумеется, строковое представление неприемлимо

А можно объяснить, почему

авторфактор - минимальный объём, занимаемый данными, максимальная скорость работы с таким типом данных
билинг скорее всего...а там этих номеров..
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32898939
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
целыми хранить количество нулей, или ноль если он один, дробная часть - все остальное...
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32898952
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
10 и 100 те же извращения на тему LZW... сначала 0 за ним количество ... максимум получается 9 нулей... думаю хватит..
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32898982
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, хорошая мысль, спасибо. В обобщённом виде нужно написать обратимую функцию, преобразующую номер телефона в уникальное число.
Действительно, биллинг. На десятках миллиардов строк даже 1 сэкономленный байт погоду делает :)
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32899009
Shev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как генерить отчеты, выгрузки и т.п. Не достанет каждый раз преобразовывать к нормальному виду?

Внутри биллинга я бы хранил справочник телефонов:
код(счетчик);
номер телефона (текстовый)
Сжатый номер (для передачи больших объемов на клиента)

Соответственно все ссылки по коду.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32899024
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Scott Tiger]В обобщённом виде нужно написать обратимую функцию, преобразующую номер телефона в уникальное число.
/quot]номер телефона и есть уникальное число... :(
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32899422
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Разумеется, строковое представление неприемлимо.

Кем разумеется?

В данном случае - это единственно правильное решение.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32899437
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Номер телефона не есть число, а есть последовательность цифр, в которой позиции в голове и хвосте могут == 0, но при этом быть значащими. Например, телефон 00700. Если предстваить это в виде числа, это будет число 700, а есть такой номер 700, который совсем не то, что 00700 и 0700, например. Ну и т.д.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32899439
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Строковое представление - это 11 байт. Много.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32899463
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мной разумеется. А что?
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32899581
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Справочник тоже не есть хорошо. Это потом джойнить голову сломаешь.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32899633
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Мной разумеется.

Печально.

> Строковое представление - это 11 байт. Много.

Почему именно 11 байт? В сравнении с чем много?

Для Вашей задачи хорошее решение одно: таблица телефонных номеров, ссылки на эту таблицу в логах. Все остальные решения - кривые до безобразия.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32899776
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аргументы будут?

Много в сравнении, например, с числом. 10-значный телефонный номер в числовом представлении занимает 7 байт, а в строковом - 11. Итого - 4 байта оверхед. В таблице, положим, 2 номера - кто звонил и кому. Итого, 8 байт на строку. На 10 миллиардов строк имеем почти 80 гигабайт. Оно мне надо?. Со справочником я уже говорил - джоинить замучаюсь, если потребуется. Да и зачем? Проще и производительнее применить функцию - ни тебе чтений (даже логических), ни конкатенации строк, только raw cpu power :)
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32899804
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Беда в том, что есть как телефоны типа 10 и 100, так и типа 02 и 03. ;-)))
А если функции написать, которые из 11^11 (11 символов 0...9 или пусто) конвертят в 255^5 (5 символов binary character, кроме chr(0), например) и обратно? 5 символов хватит при таком раскладе. Правда, все равно не очень быстро, но и не очень медленно ;-)
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32899820
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь, что пишу на WatcomSQL, так как PL/SQL не сильно знаю, но думаю что по функциональности будет один в один:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
/* Функция перевода телефона
   в десятичное число */
CREATE FUNCTION _PhoneToBin (
  IN @Phone char( 11 )
)
RETURNS numeric( 13 ,  11 )
BEGIN
  RETURN CONVERT(numeric( 13 ,  11 ), Length(@Phone) || '.' || @Phone);
END;

/* Функция перевода десятичного числа
   в телефон */
CREATE FUNCTION _BinToPhone (
  IN @BinPhone numeric( 13 ,  11 )
)
RETURNS char( 11 )
BEGIN
  RETURN Left((@BinPhone - Truncnum(@BinPhone,  0 )) * 
    Power( 10 , Truncnum(@BinPhone,  0 )), Truncnum(@BinPhone,  0 ));
END;

// Проверяем результат
SELECT _PhoneToBin('0100') AS Phone100, 
       _PhoneToBin('89262500102') AS Phone926, 
       _BinToPhone(Phone100) AS OrigPhone100, 
       _BinToPhone(Phone926) AS OrigPhone926, 
       DataLength(Phone100) AS LenBinPhone100, 
       DataLength(Phone926)  AS LenBinPhone926;
Phone100Phone926OrigPhone100OrigPhone926LenBinPhone100LenBinPhone9264.0111.89262500102'100''89262500102'49

Комментарии:
В ASA тип numeric - плавающий десятичный тип, то есть он занимает ровно столько места, сколько нужно. Я его использовал для хранения телефона, где 2 цифры до знака - это длина телефона, цифры после знака - сам телефон.
Функция "TRUNCNUM" сбрасывает десятичные знаки (то есть не округляет).
Функция "POWER" возводит число в степень.
Остальные функции думаю понятны.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32899849
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Аргументы будут?

Эссно. 1. Нормализация. 2. Компактность (не 11 байт, а 4 или 8). Из 1 вытекает 3. Возможность дополнительных манипуляций с телефонными номерами.

> Много в сравнении, например, с числом.

Не смешно. Я бы понял, если бы Вы приводили аргументы с учетом файловой системы, размера страницы, версии СУБД и способа хранения таблицы.

> На 10 миллиардов строк имеем почти 80 гигабайт.

Если есть задача хранить 10 миллиардов строк, то лишние 80 Гб погоды не сделают. Просто посчитайте накладные расходы для каждой таблицы.

> Со справочником я уже говорил - джоинить замучаюсь, если потребуется.

;)) А в чем здесь проблема, если не секрет? Что значит "замучаюсь"?

> Да и зачем?

А зачем вообще базы данных _проектируют_?

> Проще и производительнее применить функцию - ни тебе чтений
> (даже логических), ни конкатенации строк, только raw cpu power :)

Сравните оба варианта экспериментально.

Через год, когда Вам перестанет хватать функциональности Вашего биллинга, надеюсь, Вы вспомните это обсуждение. ;)
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32899951
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Эссно. 1. Нормализация. 2. Компактность (не 11 байт, а 4 или 8).

Ну это сворачивать если, то возможно. Тоже надо подумать. Насчёт нормализации ради нормализации не стоит, право. Как PK номер подходит, посколько не может измениться (так устроено). Не опускайтесь до уровня теоретиков от СУБД. Иначе - велкам ту су.дбмс.

> Не смешно. Я бы понял, если бы Вы приводили аргументы с учетом файловой системы, размера страницы, версии СУБД и способа хранения таблицы.

Причём здесь файловая система? Таблица - heap-organized. Это не единственная таблица с номером телефона и не единственная очень большая таблица. Остальное писал.

> Если есть задача хранить 10 миллиардов строк, то лишние 80 Гб погоды не сделают. Просто посчитайте накладные расходы для каждой таблицы.

10 старушек - рупь.

> ;)) А в чем здесь проблема, если не секрет? Что значит "замучаюсь"?

Замучаюсь, значит мне для вывода, грубо говоря, отчёта какого-нибудь придётся достаточно много раз читать индекс этого справочника (это в случае, если номер телефона будет в индексе). Не будет - ещё и блоки таблицы. В целом, так или иначе, 90 процентов этого справочника будут читаться достаточно активно. Это будет худший вариант, чем хранение номера as is или в преобразованном так или иначе виде.

> А зачем вообще базы данных _проектируют_?

Ну явно, чтобы не гордиться степенью нормализованности :)

> Проще и производительнее применить функцию - ни тебе чтений
> (даже логических), ни конкатенации строк, только raw cpu power :)

Сравните оба варианта экспериментально.

> Через год, когда Вам перестанет хватать функциональности Вашего биллинга, надеюсь, Вы вспомните это обсуждение. ;)

А при чём здесь функциональность?
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32900036
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Ну это сворачивать если, то возможно.

Imho незачем огород городить. Суррогатный ключ int4 или int8.

> Как PK номер подходит, посколько не может измениться (так устроено).

;) Я придерживаюсь точки зрения, что практически ни одна естественная сущность для первичного ключа непригодна.

> Не опускайтесь до уровня теоретиков от СУБД. Иначе - велкам ту су.дбмс.

Был, спасибо. Не интересно.

> 10 старушек - рупь.

Хм... imho вопрос стоит примерно так: хватит для хранения основной бд массива 4 Тб или купить сразу 8? Какие 80 гигабайт? О чем Вы?

> Замучаюсь, значит мне для вывода, грубо говоря, отчёта какого-нибудь
> придётся достаточно много раз читать индекс этого справочника

Обязательно придется. И какие проблемы, по-Вашему, это создаст? Абонентов - максимум несколько миллионов, лог - десятки миллиардов записей (непонятно, правда, зачем все их держать в оперативной таблице).

> Ну явно, чтобы не гордиться степенью нормализованности :)

;) Оно, понятно, не самоцель.

> А при чём здесь функциональность?

А Вы сами-то как думаете?
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32900219
Фотография PVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Применить шестнащатиричную систему кодирования. В одном байте два символа. Избыточность невелика, т.к. кроме цифр надо использовать спецсимволы P, #,+. Легко кодировать и декодировать.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32900297
Фотография andrushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Усе это напомнило мне один случай. Было сие на SDW-2004. Некий умный мужик (действительно умный, мелкомягким C# сбацал, не люблю его за это, так как он щас C++ "портить" пытаетси) Herb Sutter толкал речь про оптимизацию. Был пример некого сищного цикла - так как пишут 99% (я в том числе) и было показано, где и чо можно соптимизировать - так 7, 8 итераций. После етого, сволочь така, стал спрашивать, а угадайте на скольки увеличилось то. Ну народ стал гадать типа 30-40%, самые смелые 2-3 раза предлогали. А он и выдает в 27-60 раз работает быстрее (в зависимости от компилятора, конечно). Ну все выпали в осадок, а он и добавляет, хрен гнойный "Не делайте ЭТО НИКОГДА!" . Тоесть, как писали, так и пищите, не оптимизируйте, пока это не надо.

Ну и вернемся к нашим баранам. Как правило, пока базу не родили, до стресс-теста (если нужен, конечно) не доползли, об оптимизации думать рано. Конечно, кой-какой опыт имеется, кое-где сразу видно, как лучще сделать. Но такова собачья (наша) жисть, что как правило тебе ТЗ по полной программе не выдаст сначала. По ходу будуть всяки изменения и подкрутки (может и переделки). Так, что даже 4 байта на телефоне - это блохи, будут проблемы и поважнее. А вот сразу усложнять жисть себе (к примеру - нужны все телефоны с третей цифрой 1 и последними 3-мя цифрами 345, попляши ка!) ни к чему. IMHO.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32900352
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> как писали, так и пищите, не оптимизируйте, пока это не надо.

Время оптимизации настанет тогда, когда г-н Scott Tiger осознает необходимость разнесения оперативных таблиц (или баз, что лучше: MySQL для входа, Oracle - для хранилища) и архива, т. е. состоявшихся и закончившихся соединений. И будет в несколько потоков писать, и в несколько потоков этот лог разгребать. А пока речь о том, в каком виде этот лог хранить.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32900403
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Scott Tiger

Если Вы так озабочены размером базы, то справочник с 4-х байтным FK ИМХО самое правильное решение. И вообще самое правильное по-моему. Вместо 7 байт получается 4. От соединений все равно не удастся избавиться, одним больше или одним меньше уже роли играть не будет.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32900507
Фотография andrushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, меня не поняли, однако. Хранить номер надо, как есть - строчкой. Все остальное изврат. IMHO
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32900559
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторХранить номер надо, как есть - строчкойстрока есть последовательность чисе с основанием 255...
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32900682
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А 4-х байтов, как я уже показал выше, не хватает. Надо 5.

Решение ASCRUS всем хорошо, кроме того, что по такому числу очень сложно построить внятный индекс. Ну, например, трудно будет выбрать все номера, начинающиеся с единицы, независимо от длины номера. Хотя, как я понял, индекс в рамках решаемой задачи будет даже лишним и вредным.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32900775
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С FK - это ещё хуже, чем строчкой хранить. Вопрос стоит в выборе из 2 вариантов - строчка как есть или строчка, упакованная тем или иным образом. Ну и ищутся другие варианты.

Что касается применимости естественного ключа - номер телефона есть самостоятельная, даже самодостаточная сущность. Он сам себя уникально идентифицирует. Это как, например, номер паспорта - для идентификации другой сущности - человека - он неприменим, т.к. паспорт может поменяться или у человека вообще может не быть паспорта. А вот для идентификации бланка паспорта, т.е. книжецы краснокожей, он вполне подходит. Другой вопрос - что это не есть самый эффективный вариант с точки зрения объёма хранимой информации. Тоже и с телефонами. Номер может принадлежать абоненту, может не принадлежать, может быть привязан к какому-то оборудованию, может жить сам по себе - абонент и его оборудование идентифицируется другими методами. А номера телефонов образуют номерную ёмкость, которая может расти и сжиматься за счёт добавления и удаления номеров, и у абонента может номер изменяться - но это не изменение того номера, который у него есть сейчас, а отбор старого и выдача нового. Так оно устроено.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32900791
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что касается поиска и т.п. - нужды находить номера каким-либо способом, кроме полного указания номера, почти нет - это нестандартные, разовые задачи, выходящие за рамки приложения. В конце концов, для таких извратов можно держать справочник вида - упакованная_строка - номер_телефона.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32901718
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> С FK - это ещё хуже, чем строчкой хранить.

Чем хуже?

> Вопрос стоит в выборе из 2 вариантов - строчка как есть или строчка,
> упакованная тем или иным образом. Ну и ищутся другие варианты.

Понятно. Если начальный вопрос из разряда "самзнаюблянах", помечайте это, пожалуйста. Жаль бесцельно потраченного времени, честное слово.

> Что касается применимости естественного ключа - номер телефона есть
> самостоятельная, даже самодостаточная сущность.

Хм... Вы ошибаетесь.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32901953
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621
> Хм... Вы ошибаетесь.
А можно описать, в чем ошибка? Я вот не заметил.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32901992
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621
> С FK - это ещё хуже, чем строчкой хранить.

Чем хуже?


Чэм Эрэван Я уже писал выше - если мне нужно зачем-то (пользовательский интерфейс, взаимодействие со внешними системами) получить номер телефона, мне нужно будет прочитать справочник. Т.е., на каждый возвращаемый номер телефона имеем по несколько логических чтений. При массовой загрузке (обработка первичных данных) всё просто ляжет, я буду работать только на вычисление PK по заданному номеру телефона. Если нет справочника - нет этих чтений. По-моему, достаточно просто объяснил. Используем свёртку - нагружаем процессор дополнительными вычислениями, не используем - не нагружаем, но перелопачиваем большее количество данных.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32902189
Фотография andrushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемые Господа,
Вы меня так и не убедили, чем строчкой хранить хуже.

Конечно, надо бы всем разработчикам баз подкинуть идейку добавить новый тип PHONE. Ну и FISRT_NAME, LAST_NAME, FULL_NAME, ADDRESS (можно продолжать) до кучи. А там внутри пусть хранят как хотять (как DATE, TIME к примеру). Ну и разные способы форматирования сей байды
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
MyAddress.FORMAT( "%Z\n%T %C, %S, %H-%K-%A\n%N"); // российский формат  
MyAddress.FORMAT( "%N\n%H %S, %A\n%C, %T %Z"); // американский формат  

иде
%Z индес (zip code)
%T область (state)
%С город (city)
%S улица (street)
%H номер дома
%K корпус
%A квартира
%N имя

Ну, это из области _помечтать_. А шо до сегодняшнего дня, я тут последоватьльноси молекул храню. Для ДНА/РНА алфавит простой - всего 5 букв
ACTGN. Для протеинов чуть сложнее - около 20 букв. Вот чо можно упаковывать, так упаковывать. Ан нет - накладные расходы на упаковку/распаковку съедают достаточно много. Да и в конце концов - что, места на дисках не хватает. У нас базы до 20G доходят, и ничего, шуршать себе потихоньку...
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32902393
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tiger, не слушай никого.
Самое лучшее решение, запаковывать в бинари(5), по 4 бита на цифру, если напрячься - немного сложнее преобразование, то 3.5 бита на цифру, т.е. 35 бит на 10 цифр, но 4 байта не выйдет по-любому - не влезет туда 10 цифр . Емко, не надо держать внешний ключ. Т.к. Здесь нафиг ключ не нужен, если кроме телефона нет никаких свойств, сами данные и есть ключ, если нужно индекс построил - вот и ключ. Если профиль таблицы - быть свалкой, она должна быть такой. Для нее запросы типа третья цифра "5" - не профиль...

Можно расширить идею, раз надо держать пару, тогда и пакуйте их парой. Тогда можно запаковать два номера по 10 цифр в 67 бит - 9 байт, т.е. по 4.5 на номер. Во как! Но такое использовать можно только в одну сторону, сами понимаете. Если возникнет необходимость в выборках по номерам, то либо через геморрой, либо через добавление распакованных полей, с переливкой из запакованных.

А 80Гб - тоже объем не стоит им пренебрегать, и не важен размер базы, даже если 1Тб.
А оптимизация должна быть с самого начала проектирования, а не вдогонку, когда база подошла к 100Гб.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32902441
Астралопитек
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Году в 2000-2001-м мне довелось иметь дело с телефонной базой на ~5 млн записей на ASA 5.5. Моё ИМХО категорическое мнение -- если нужно хоть какое-нибудь быстродействие -- только строковое представление. Как можно меньше функций (арифметических). Очень хороша идея PVP -- HEX-представление, но работать также только с символьным представлением. И ещё добрый совет: по возможности забудьте о нормализации. И, разумеется, никаких FK и констрейнтов. Оставьте их для ОРАКЛа.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32902447
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> При массовой загрузке (обработка первичных данных) всё просто ляжет, я буду
> работать только на вычисление PK по заданному номеру телефона.

Это не так.

Задач в Вашем вопросе на самом деле несколько: 1. регистрация первичных данных, 2. обработка первичных данных, 3. хранение лога. Imho Вы пытаетесь решить их все сразу и одинаково, чего делать не следует, потому как это абсолютно разные задачи. Что нужно для регистрации первичных данных (будем считать, что это текущие соединения)? - скорость. Форма регистрации практически роли не играет: таких данных относительно немного, манипуляций с ними немного. Что нужно для оперативной обработки этих текущих соединений? Получить некоторые данные для конкретного абонента (остаток на счете, возможность дополнительных сервисов etc). Быстро это сделать иначе, чем имея отдельную таблицу номеров - нельзя. Что нужно для хранения лога? - удобный анализ. _Не будет_ анализ удобным, если для любого чиха Вам понадобится преобразование. Не очевидно?

> Если нет справочника - нет этих чтений.

Чего ж Вас чтение небольшой таблицы так пугает? Религия, видимо, мешает держать эту таблицу в памяти?
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32902532
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторИспользуем свёртку - нагружаем процессор дополнительными вычислениями
а как же raw cpu power...?
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32902828
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос к тем кто за FK:
А вы не пробовали делать справочник цен например(Код цены, Цена)? А из товаров, условно говоря, делать ссылку на справочник цен по коду цены. Очень здорово получается. Только это нафиг не нужно никому. Так и в данном случае, справочник есть смысл вводить если есть дополнительные аттрибуты, а в данном применении никаких аттрибутов нет. Есть только номер и больше ничего не нужно. Так нафига плодить избыточность? Ведь когда FK занимает места относительно столько же сколько и сами данные на которые он ссылается, то смысл в нем сводится к нулю. Или если бы система была ориентрована на анализ данных, то структура должна выглядеть по другому, но анализ - не в этой базе, и не с этой таблицей.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32902838
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Urri> А 4-х байтов, как я уже показал выше, не хватает. Надо 5.

Хватает, в случае со справочником это как раз 4 байа + индекс на ПК + (если нужен анализ) индекс на основную таблицу. Все сочетания цифр в телефонных номерах не встречаются, номеров будет меньше чем 2**32.

Было требование - уменьшить размер базы. Справочник этот вопрос решает. Кроме того это стандартный механизм БД, т.е. как-то работать будет, и это еще вопрос что нагрузит базу больше: связывание таблиц или обработка хитро закодированного номера телефона.

iLLer> Т.к. Здесь нафиг ключ не нужен, если кроме телефона нет никаких свойств, сами данные и есть ключ, если нужно индекс построил - вот и ключ.

iLLer> Так и в данном случае, справочник есть смысл вводить если есть дополнительные аттрибуты, а в данном применении никаких аттрибутов нет.

А адрес клиента, ФИО и пр. уже к атрибутам не относится. А если нет атрибутов, то база строится только для анализа закономерностей, но автор вопроса утверждает, что анализа там нет. Значит должны быть атрибуты.

iLLer> Ведь когда FK занимает места относительно столько же сколько и сами данные на которые он ссылается, то смысл в нем сводится к нулю.

ФК занимает в 2.5 раза (на 6 байт) меньше места чем строка. Вроде сначали собирались экономить 3 байта, а тут 5.

iLLer> Или если бы система была ориентрована на анализ данных, то структура должна выглядеть по другому, но анализ - не в этой базе, и не с этой таблицей.

Анализ появится позже.

Scott Tiger> Чэм Эрэван Я уже писал выше - если мне нужно зачем-то (пользовательский интерфейс, взаимодействие со внешними системами) получить номер телефона, мне нужно будет прочитать справочник. Т.е., на каждый возвращаемый номер телефона имеем по несколько логических чтений. При массовой загрузке (обработка первичных данных) всё просто ляжет, я буду работать только на вычисление PK по заданному номеру телефона. Если нет справочника - нет этих чтений. По-моему, достаточно просто объяснил. Используем свёртку - нагружаем процессор дополнительными вычислениями, не используем - не нагружаем, но перелопачиваем большее количество данных.

А что за задача такая хитрая, если можно, пару слов об этом? Какие выходные отчеты?
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32902858
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
c127Хватает, в случае со справочником это как раз 4 байа
Объясните как! Есть номерная емкость 10^10 (10 цифр по 10 в каждой), в пересчете в двоичную систему для кодирования стольких комбинаций необходимо минимум 34 бита(2^33=8,589,934,592<10,000,000,000<2^34=17,179,869,184). Пренебрегать емкостью(мол, всех комбинаций цифр никогда не будет) разработчик не имеет права. А если вдруг будет?
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32902906
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> А вы не пробовали делать справочник цен например(Код цены, Цена)? А из
> товаров, условно говоря, делать ссылку на справочник цен по коду цены. Очень
> здорово получается. Только это нафиг не нужно никому.

Безграмотное решение.

Цены регистрируются посредством третьей таблицы примерно так (на самом деле, совсем не так, но для наглядности подойдет): код поставщика, код товара, цена, валюта, дата регистрации цены, системные маркеры, код условий поставки, код условий оплаты.

Ничего общего с обсуждаемым вопросом нет. Т. е. абсолютно.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32902920
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 c127 - в крайности вдаваться тоже не надо. Уменьшение объёма хранимой информации - не основная цель. Основная цель - повышение производительности, и уменьшение объёма информации здесь - только один из методов, имеющий как плюсы, так и минусы.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32902972
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильно, безграмотное решение. Так и в этом случае, тоже самое. Поскольку
ФК будет явно больше по объему 4 байт(если есть сомнения читай выше), то
можно номер и принять за ПК и ФК:
Номера(номер binary(5),...)
Звонки(номер источник binary(5), номер получатель binary(5), ...)
Делаем два ФК на "Номера".
Вот и все. Ну необычно выглядит номер, ну и что? Никто не заставляет нас
хранить данные также как мы их видим. Отображение - это задача приложения, а
не БД и не СУБД. А хранить данные в разреженном состоянии совершенно нет необходимости.

Объясните зачем делать лишнее соответствие типа
Номера(код номера bigint, номер char(10),...)
Звонки(код номера источника bigint, код номера получателя bigint, ...)
???????
Ведь это тоже самое что и справочник цен!!!!
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32902999
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Ведь это тоже самое что и справочник цен!!!!

Принципиальная разница. Вы ее действительно не видите?

> Объясните зачем делать лишнее соответствие типа
> Номера(код номера bigint, номер char(10),...)

1. Никто нигде никогда никому не обещал, что номер обязан быть десятизначным. Не факт, что завтра не начнут выделяться двадцатизначные номера или - например - вместо числовой последовательности будет использоваться IP.

2. Не факт, что не понадобится дополнительная информация об абоненте или номере. Даже скорее всего понадобится. Где и как ее прикажете хранить?

> код номера получателя bigint

А зачем восемь байт? Какое количество номерной емкости Вы собираетесь регистрировать? Хинт: у национальных операторов количество абонентов - единицы десятков миллионов.

> Ну необычно выглядит номер, ну и что?

Да наплевать, как он выглядит. Неважно это. Важно отсутствие преобразований.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32903009
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще говоря, здесь подразумевается, что все системы оперируют номером телефона как PK, в том числе и CRM. Я же писал выше... Что касается цены: разумеется (мной), что хранение сущности под названием "цена" в справочнике - это однозначный бред, если под ценой подразумевается сумма наличности/безналичности, которую необходимо заплатить за единицу товара. Если понимать под термином "цена" набор свойств, характеризующих продажные качества товара - тогда да, всё верно. Обычно для увеличения производительности подобных систем делается снапшот (materialized view), в котором "собирается" в денормализованном виде нужная информация - потребительские качества товара + его текущие продажные качества. Хотя возможны варианты.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32903020
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621Принципиальная разница. Вы ее действительно не видите?
Вижу принципиальное совпадение. Вы сказали, что цену надо иметь в третей таблице. Так вот в рассматриваемом варианте таблица звонков и есть "третья". И делать оттуда ссылку на данные, когда размер данных равен размеру ссылки - бред. В этом случае данные и ссылка должны совпасть.

guest_20040621
1. Никто нигде никогда никому не обещал, что номер обязан быть десятизначным. Не факт, что завтра не начнут выделяться двадцатизначные номера или - например - вместо числовой последовательности будет использоваться IP.

Это, как я понял, дано по условию задачи и должно быть прописано в ТЗ. Сколько и каких номеров может обслуживать система. Проблема перевода системы с одного диапазона на другой проблема другого уровня.
guest_20040621
2. Не факт, что не понадобится дополнительная информация об абоненте или номере. Даже скорее всего понадобится. Где и как ее прикажете хранить?

Необходима информация - сделайте справочник. Только в качестве ПК в этом справочнике выберете сам номер.
guest_20040621
А зачем восемь байт? Какое количество номерной емкости Вы собираетесь регистрировать? Хинт: у национальных операторов количество абонентов - единицы десятков миллионов.

Сколько в ТЗ написано - столько и должно быть. Написано, что пренебрегаем тем-то и тем-то, то тогда можно и инт заложить. Но опять-таки, никто не мешает сворачивать стринговый номер в инт, и использовать его и в качестве ПК и в качестве ФК. А запаковать и выпаковать 9 цифр в инт вообще не проблема.
guest_20040621
Да наплевать, как он выглядит. Неважно это. Важно отсутствие преобразований.
А вот тут поспорить можно. Что понимается под преобразованиями? К примеру, Вы пишете в базу строку "Альфа", Вы думаете СУБД так и запишет на диск? Нет, пока информация дойдет до физического хранения она перетерпит кучу преобразований, начиная от кодовой страницы(высокоуровневое преобразование) и заканчивая методами записи на магнитный носитель (к примеру манчестерский код и т.п.). Т.е. все эти преобразования идут на лету, Вы их не видите, но это не значит что их нет. Если качественно написать функцию обратимого преобразования, то и не надо заставлять СУБД хранить строковые данные там, где они не должны быть. От избыточности(разреженности данных) надо избавлятся.

Другое дело если СУБД поддерживает упаковку данных на лету, и хранит все запаковано. То тогда физически все будет выглядеть именно так, как я и написал. СУБД запакует эти строковые данные именно в минимально необходимый объем а при запросах будет запаковывать/распаковывать. С одной стороны Вы будете видеть стринги, а на диске это будет занимать места меньше.
Но метод при котором Вы сами закладываете упаковку предметного понятия в тип данных, гораздо лучше, чем встроенное сжатие БД.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32903073
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> И делать оттуда ссылку на данные, когда размер данных равен размеру ссылки -
> бред.

Хотите ходить по граблям - ходите. Мне это дискомфорта не создает.

> Это, как я понял, дано по условию задачи и должно быть прописано в ТЗ.

Ага. Непонятно, правда, откуда у техписателя должна появиться такая информация. Телепатические способности, видимо.

> Сколько и каких номеров может обслуживать система. Проблема перевода
> системы с одного диапазона на другой проблема другого уровня.

Это в данном случае не проблема перевода, а банальная ошибка проектирования.

> Необходима информация - сделайте справочник. Только в качестве ПК в этом
> справочнике выберете сам номер.

Ключевым может быть _независимое_ поле. Понимаете? Номер независимой сущностью не является.

> А запаковать и выпаковать 9 цифр в инт вообще не проблема.

Правильно, давайте ненужной херней грузить процессор. Это такой особый вид извращения - сделать через... в общем, понятно, как, потом эти своими руками созданные проблемы преодолеть? Может, проще не создавать проблем?

> Что понимается под преобразованиями?

В данном случае - любая функциональная зависимость между данными, требующая вычислений.

> Т.е. все эти преобразования идут на лету, Вы их не видите,

Этими преобразованиями занимается СУБД. И к проектированию структур данных формат хранения данных на жестком диске имеет очень сильно опосредованное отношение.

> От избыточности(разреженности данных) надо избавлятся.

Что, собственно, я и предлагаю.

> Но метод при котором Вы сами закладываете упаковку предметного понятия в
> тип данных, гораздо лучше, чем встроенное сжатие БД.

А зачем мне вообще что-то упаковывать?
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32903292
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 iLLer

>Объясните как!... Пренебрегать емкостью(мол, всех комбинаций цифр никогда не будет) разработчик не имеет права.

Точно так же как в 2**32 вмещаются все существующие фамилии, которые примерно 32**10=2**50. Но Вас это не смущает. Тут переномеровываются все существующие номера, остальное заполняется по мере надобности. Все равно 4млрд номеров в системе не будет.

2 Scott Tiger

>2 c127 - в крайности вдаваться тоже не надо. Уменьшение объёма хранимой информации - не основная цель. Основная цель - повышение производительности, и уменьшение объёма информации здесь - только один из методов, имеющий как плюсы, так и минусы.

Согласен. Так какие отчеты будут требоваться? Может там в большинстве случаев можно обойтись сканированием длинной таблицы без связывания, например посчитать наговоренное за последний месяц время.

Размер не единственный плюс словаря. Еще это стандартное решение. Упаковка номера решение нестандартное в смысле БД, если по нему вдруг нужно будет искать то будут проблемы.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32903314
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мля. Ну что значит "стандартное - нестандартное"? Какие проблемы будут, если я по нему буду искать? Грубо говоря, select some_shit from some_table where compressed_phone_number = to_compressed_phone('phone_number'), где to_compressed_phone - функция, возвращающая упакованную строку/число из полного телефонного номера. Не вижу сложности в таком поиске.

P.S. Из сторонников FK есть хотя бы один практик с опытом реализации?
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32903583
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А никто нам и не мешает заюзать compressed_phone_number как FK!!!
И при необходимости сделать справочник номеров, у которого ПК и есть compressed_phone_number.
Я думаю здесь у некоторых людей проблемы с воображением, которые не могут себе представить номер телефона в виде целого числа. А одно из другого конвертируется в раз.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32903899
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Из сторонников FK есть хотя бы один практик с опытом реализации?

Да нет, конечно; где нам, тупым, базы данных проектировать. Так, погулять выходим и языком потрепать. Посмотреть, опять же, на нереальных гуру с нереальными объемами данных. Правда, остается неясным, кто и когда читал таким гуру курс проектирования, но - они ж уже по факту наличия объема данных гуру, так что чего ж их в нехорошем подозревать.

> И при необходимости сделать справочник номеров, у которого ПК и есть
> compressed_phone_number.

Конечно. Стоя и в гамаке - оно куда как прикольнее.

> Я думаю здесь у некоторых людей проблемы с воображением, которые не могут
> себе представить номер телефона в виде целого числа. А одно из другого
> конвертируется в раз.

Ага. Проблемы и с числами, и с арифметикой, и со здравым смыслом. Вы можете внятно объяснить, _для какой цели_ придумывать извращения?
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32904030
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621, открой личико. Хамишь прилично, а что за этим хамством стоит, не понятно...
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32904712
Фотография andrushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Тигренок Петрик
На шпагах, господа, на шпагах, но не на булавках Тартарен из Тараскона (с).
Обсуждение техницких проблем перерастаеть в драку, однако...

Хотя, я смысла в упаковывании такой мелочи, как телефонные номера - не вижу, не убедили

2 Гость из тьмы
... открой личико! Петруха (с)
Присоединяюсь к Тигренку с сей просьбой.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32904774
Yo!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Yo!
Гость
все предложения не читал но могу предложить :)
упаковывать как ip в виде xxxx.xxxx.xxxx.xxxx
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32905052
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Scott Tiger

>Мля. Ну что значит "стандартное - нестандартное"?

Стандартное это то что написано у Кодда, Дейта и пр. Упаковки я там не встречал.

>Какие проблемы будут, если я по нему буду искать? Грубо говоря, select some_shit from some_table where compressed_phone_number = to_compressed_phone('phone_number'), где to_compressed_phone - функция, возвращающая упакованную строку/число из полного телефонного номера. Не вижу сложности в таком поиске.

Найти все номера like '%324%' звонившие в последний месяц. Выкрутится можно, но зачем крутиться, если можно не крутиться.

>P.S. Из сторонников FK есть хотя бы один практик с опытом реализации?

Мне как-то приходилось связывать таблицы по FK. Вроде работает.

Ну а если серьезно, то можно ответить хотя бы в общих чертах, какие отчеты предполагаются в системе? Может сразу все станет ясно. Например есть ли в базе информация о владельце номера и нужно ее хотя бы изредка светить?
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32905285
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем искать? Нет таких задач - искать номера like '%234%', звонившие в последний месяц. Ну нет в природе, и всё.
Информация о владельце есть, разумеется. А что?
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32905307
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче говоря, есть задача писать таблицу-журнал. Тогда конечно не нужно никаких FK.

Если нет FK:
все сводится к одной операции записи номера телефона в таблицу.
Если номер телефона еще и паковать при этом, то на выполнение операции упаковки придется затратить дополнительно несколько тактов процессора. И все.

Если есть FK:
Ищем значение PK в справочнике телефонов по номеру.
Сначала читаем индекс - это в зависимости от длины таблицы и глубины индексного дерева 3, 4, 5 и более операций чтения.
Потом читаем значение PK. Еще одна операция чтения.
И только потом пишем в таблицу-журнал.

Задача не используется для анализа! Это чистой воды OLTP. В свете этого решение Scott Tiger - правильное.

Кстати, параллельным процессом таблица-лог может разбираться, данные могут перекладываться в сколь угодно сложную структуру данных, но эта структура к рассматриваемой нами сейчас задаче никакого отношения не имеет.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32905311
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
номеров с ведущими нулями мало (по сравнению с остальными).
можно хранить так: 00700 -> (700*10+2(количество нулей)) * (-1) = -7002
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32905507
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Scott Tiger

>А зачем искать? Нет таких задач - искать номера like '%234%', звонившие в последний месяц. Ну нет в природе, и всё.

Так расскажите какие есть. А вообще задачи имеют свойство рождаться в голове у начальства во время разработки системы. :)

>Информация о владельце есть, разумеется. А что?

А как Вы ее будете привязывать к журналу? Раз есть информация о владельце, то ее рано или поздно (скорее рано) нужно будет показывать в отчетах. Т.е. от связывания таблиц не уйти и в случае сколь угодно хитрой упаковки телефона. Но тогда роль ФК будет играть этот упакованный номер. Так зачем мучиться, возьмите integer в качестве ID, привяжите к нему номер телефона, владельца т.д., а в журнал пишите этот integer. И места меньше и работать будет не хуже, раз связываение все равно есть в любом случае.

Вообще непонятно о чем разговор, стандартная задача, тем более что сервер у Вас взрослый.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32905586
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О том и речь - зачем мне оверхед от наличия справочника, когда номер я в явном виде храню во всех таблицах. Но в таблице связки, условно, номера и абонента также будет хранится упакованный номер телефона и id абонента. Для соблюдения консистентности можно, как я и писал выше, создать справочник, в котором PK будет упакованный номер телефона, и навешивать констрейнты по необходимости.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32905663
Mustaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приведу два, как я считаю, весомых аргумента в пользу хранения телефонов как есть, т.е. без справочника:
1. справочник должен существовать заранее, что сами понимаете или невозможно или приводит к неадекватным наладным расходам
2. полный номер телефона для тарификации нуждается в разборе, как то код страны, код региона, собственно телефон
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32905727
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> guest_20040621, открой личико.

Ник - вполне достаточный персональный идентификатор. Рекомендации, рецензии и вакансии мне без надобности, так что давайте обходиться тем, что есть. По существу возражения будут?

> а что за этим хамством стоит, не понятно...

Ну, хамства-то как раз и в помине не было. Количество моих знаний Вам показалось недостаточным для контактов? ОК, нет проблем.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32905813
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UrriЕсли есть FK:
Ищем значение PK в справочнике телефонов по номеру.
Сначала читаем индекс - это в зависимости от длины таблицы и глубины индексного дерева 3, 4, 5 и более операций чтения.
Потом читаем значение PK. Еще одна операция чтения.
И только потом пишем в таблицу-журнал.

Можно еще упростить. Сначала запаковать (запаковать проще, чем искать в индексе по справочнику) в инт, а потом писать в таблицу-журнал. Сделать ПК запакованный номер, т.е. инт. А распакованый вообще не держать.

Запаковать в unsigned int:
32 бита делим на два куска. Первый два бита - код первой цифры (здесь делаем ущемление прав и кодируем только 4 возможных варианта, закладывается заранее). Второй кусок - 30 бит, им кодируем 9 цифр номера. Да использовать инт тоже нехорошо, а вдруг так получится, что все возможные номера будут в системе, что тогда делать-то? Никакой справочник не спасет.
Если не нравится ущемление, то можно вынести первую цифру в отдельное поле и сделать ключ составным, но это уже изврат.

Можно использовать в качестве хранилища binary(5) - здесь никаких ущемлений диапазонов не будет, и ПК будет простым.

Но поскольку, вероятно определять код страны и т.д. То для улучшения выборок можно сделать это поле составным. binary(3) - для хранения только номера (7 цифр), smallint(2) - для хранения префикса(3 цифр). Более того, в этот smallint можно еще засунуть кол-во впередиидущих нулей: 10 бит - префикс, 2 бит - кол-во нулей, 4 бит - резерв....


А можно забить на это делать и сделать стринг(10)+ПК инт(4). К этому вырастет нагрузка на справочник, т.к. постоянно будет дергаться для того, чтобы выяснить, а какой же ID у такого-то номера... А дергать справочник(чтение памяти, индекса, диска) - это гораздо хуже, чем произвести чистый бинарный расчет(проц и всё).
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32906391
zz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а нельзя просто в начало цифирь добавить? ну девятку, к примеру?
Т.о.:
00100 ->900100
100->9100
получим не 10 цифр, а 11. Невелика разница. А когда надо узнать номер, девятку отбросим.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32906412
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тоже мысль, кстати.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32907213
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Scott Tiger

>О том и речь - зачем мне оверхед от наличия справочника, когда номер я в явном виде храню во всех таблицах. Но в таблице связки, условно, номера и абонента также будет хранится упакованный номер телефона и id абонента.

Это я понял. Но номер сам по себе ничего не дает, все равно прийдется связывать журнал с чем-то еще. Приведите пример отчета, в котором используется только номер и ничего больше. Врядли такой есть. А если есть, то это какя-то аналитика и этот же отчет можно построить по ID.

Справочник будет все равно, в этом справочнике будет лежать информация о клиенте. Так зачем в таком случае сражиться с упаковкой номера телефона, не лучше ли сделать по-человечески без всей этой возни.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32908350
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Именно для OLTP работы хранить распакованный номер в справочнике и его ИД накладно. Для того чтобы вставить запись в журнал о чем-либо связанном с номером, в одном случае необходимо дернуть справочник(ИД фактически вычисляется по таблице), а в другом ИД можно вычислить алгебраически.
Для отчета, да, подключаете справочник и дергаете доп. инфу о номере, а для банального поиска номера в журнале или его вставки в журнал - не надо.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #32909013
vybegallo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrushok2 Тигренок Петрик
На шпагах, господа, на шпагах, но не на булавках Тартарен из Тараскона (с).
Обсуждение техницких проблем перерастаеть в драку, однако...

Хотя, я смысла в упаковывании такой мелочи, как телефонные номера - не вижу, не убедили

2 Гость из тьмы
... открой личико! Петруха (с)
Присоединяюсь к Тигренку с сей просьбой.

1. Он не Тигренок, он гольфист.
2. Это, что-ли, называется - "открытое личико" ?
Информация об авторе: Scott Tiger
E-Mail: скрыт
URL:
ICQ:
Откуда:
Интересы:
Работа:
Информация: Я тебя люблю
Сообщений: 4023
Зарегистрирован: 24 декабря 2002, 00:44
Последнее сообщение: сегодня, 11:07 (0 дней 8 часов 20 минут назад)
Сообщений в день: 5,1643
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как лучше хранить номер телефона?
    #37348755
Фотография analiza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хранить 5 байт:
1 - число нулей в начале (до 255 нулей).
2,3,4,5 - число, следующее за нулями.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #37348890
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
analiza, ну ты и некромант!
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #37350160
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор, как там биллинг?
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #37350294
Фотография analiza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychanaliza, ну ты и некромант!
Мы СУБД небольшую делали на С++, она хранила сотни МЛН простых записей в 10 гигах ОЗУвия: один байт в записи сэкономил - несколько сот метров освободилось.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #37350555
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
analiza,

ты на даты сообщений посмотри внимательно, люди давно уже решили свои проблемы в этом топике, за 6-то лет
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как лучше хранить номер телефона?
    #38194152
KaPuS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На первый взгляд с хранением телефонов в БД все просто, но вот когда начинаешь с ними работать, понимаешь, что это не так :) Например, если у одной организации - несколько телефонов: процесс хранения, вроде бы элементарен, а вот когда понадобилось выводить только один телефон для списка организаций - пришлось добавлять порядковые номера телефонов с единицы до N без разрывов, чтобы не пускать более медленные вложенные SQL запросы. Чтобы не наступать на грабли, на которых споткнулся уже не один программист советую в дополнению к сообщениям в этой ветки форума прочитать статью: хранение номеров телефонов в MySQL - тут про хранение даты в БД все собрано в одной небольшой статье.
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #38195684
полином
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KaPuS

ты на даты сообщений посмотри внимательно, люди давно уже решили свои проблемы в этом топике, за Х -то лет (с)


номер телефона 0000001 или 0100001
ничем существенным не отличается от
номера телефона 10000001 или 10100001

а хранится уже не как строка...
...
Рейтинг: 0 / 0
Как лучше хранить номер телефона?
    #38195712
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полином,

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


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