powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / jsonb или дополнительная таблица?
7 сообщений из 7, страница 1 из 1
jsonb или дополнительная таблица?
    #39136659
goodw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет, при проектировании архитектуры назрел такой вопрос:

- Есть список абонентов, у каждого из которых есть телефоны (их может быть несколько, но логично предположить, что не очень много — 2-4 максимум (2 мобильных, 1 домашний, 1-2 рабочих и т.д.)

Как это хранить? Что будет быстрее, удобнее и оптимальнее?

1. В связанной таблице phone
id number type person_id

2. В jsonb-поле в основной таблице person:
id name phones

Потребуется поиск по номеру или фрагменту номера. Абонентов может быть и несколько миллионов.
...
Рейтинг: 0 / 0
jsonb или дополнительная таблица?
    #39136696
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goodwВсем привет, при проектировании архитектуры назрел такой вопрос:

- Есть список абонентов, у каждого из которых есть телефоны (их может быть несколько, но логично предположить, что не очень много — 2-4 максимум (2 мобильных, 1 домашний, 1-2 рабочих и т.д.)

Как это хранить? Что будет быстрее, удобнее и оптимальнее?

1. В связанной таблице phone
id number type person_id

2. В jsonb-поле в основной таблице person:
id name phones

Потребуется поиск по номеру или фрагменту номера. Абонентов может быть и несколько миллионов.

IMHO лучше хранить в связанных таблицах.
План запроса будет понятнее, да и индексирование настроить можно более гибко.
JSONB это скорее, для "большой помойки", когда структура может меняться каждую неделю.
...
Рейтинг: 0 / 0
jsonb или дополнительная таблица?
    #39136825
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goodwВсем привет, при проектировании архитектуры назрел такой вопрос:

- Есть список абонентов, у каждого из которых есть телефоны (их может быть несколько, но логично предположить, что не очень много — 2-4 максимум (2 мобильных, 1 домашний, 1-2 рабочих и т.д.)

Как это хранить? Что будет быстрее, удобнее и оптимальнее?

1. В связанной таблице phone
id number type person_id

2. В jsonb-поле в основной таблице person:
id name phones

Потребуется поиск по номеру или фрагменту номера. Абонентов может быть и несколько миллионов.
а зачем сразу овноджейсон,б, есть же ещё array-и, например.

но array-и ,например, были бы уместны для поиска , если он [поиск] А. по всему "значению" [элементу] (проверка на && ,&> и т.п.), и Б. велико перекрытие (а не так, что 1 тлфн -- только у одного в среднем, у 2-х -- уже либо ошибка, либо общий служебный/домашний, но в следовых количествах), и поиск ведётся по нескольким признакам -- имя + признак из array-я + ....


т.ч. в вашем случае предыдущий оратор безусловно прав. делайте подчиненную.
...
Рейтинг: 0 / 0
jsonb или дополнительная таблица?
    #39136997
goodw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо.

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

Рассматриваю тут несколько вариантов:

1. Обозвать в специальной таблице колонки основными типами данных и класть в соответствующую колонку значение.
value
id varchar text int decimal field_id

field
id name person_id

2. Опять же хранить в jsonb-поле основной таблицы
person
id name data

3. Хранить в формате ключ-значение в подчиненной таблице:
id key value person_id

Как будет лучше? Абонентов миллион, произвольных полей 3-10 на каждого абонента.
...
Рейтинг: 0 / 0
jsonb или дополнительная таблица?
    #39137015
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goodw,

и почему все мордописцы дрочат на овноджейсона,б ?

для плоской коллекции ключ--значение существует hstore.
т.е. именно коллекция "ключ--значение" [%]
правда -- как extension.
но у него куча плюсов искаропки -- типа конкатенации, дилета и т.п. сахарочка
да и при популяции в рекорд, при наличии в исходной (упакованной) записи полей--массивов он не блажит, как грёбаный жейсон

а индексирование у них, кажецца, одинаково где--то как--то функциональное
...
Рейтинг: 0 / 0
jsonb или дополнительная таблица?
    #39137030
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goodw,

ps
что касаемо обоснованности -- решать в каждом случае отдельно -- соображений много. кроме возможности составных индексов для сложного поиска И по вхождениям в коллекции (массивы, хештаблицы, json-ы) -- когда все условия в одной табличке и можно придумывать составной индекс -- есть соображения результирующей ширины записи основной таблицы, которая дублируется целиком в новую версию на каждый чих. Т.е. если поиск не поджимает, а апдейты частые -- лучше по возможности декомпозировать по максимуму на атомы (дубль атома дешевле дубля всего компаунда, в котором сменился единственный атом). Опять же индекс перестраивается [читай --необратимо пухнет] только в табличке атомов, но не все индексы -- в табличке компаундов.

т.е. тут соображения балланса.

Проще таки стартовать из по возможности полностью декомпозированого состояния. А уж по мере возникновения проблем с производительностью выборок -- пускаться в дорогие (для версионников) ухудшения [денормализации].
...
Рейтинг: 0 / 0
jsonb или дополнительная таблица?
    #39137737
goodw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq,

jsonb привлекает своей новизной, не так давно появился, попробовать интересно. Отсюда и вопросы. Это всего лишь технология, одна из. Не стоит на нее злиться :)

Пока что я склоняюсь к такому варианту:
- несколько разных таблиц на каждый из типов данных
- джойнить их в зависимости от типа данных


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


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