Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Использовать одну таблицу или разделить  [new]
ReAppear
Member

Откуда:
Сообщений: 2
Всем привет!

Помогите, пожалуйста, с таким вопросом. Есть таблицы page, comment и др. Необходимо сделать к этим таблицам функционал дополнительных полей, например, сделать таблицу field. Встал вопрос, либо сделать таблицу field, в которой будут колонки reference_table и reference_id для связки с источником, либо делать для каждой сущности отдельную таблицу page_field, comment_field. У самой таблицы field в будущем тоже могут появится свои связанные таблицы и т.д. Вариант с jsonb пока не рассматриваем.

Какие вы видите подводные камни у этих решений? Сильно ли будет просадка по скорости при выборке, если все будет в одной таблице, но при этом мы будем индексировать reference_table по сравнению с тем, что у нас будет отдельная таблица?
22 июл 20, 06:40    [22171381]     Ответить | Цитировать Сообщить модератору
 Re: Использовать одну таблицу или разделить  [new]
ReAppear
Member

Откуда:
Сообщений: 2
Или более подходящий пример. Есть таблицы page и image. Предположим, нам нужно сделать возможность оставлять комментарии к страницам и картинкам. Встает вопрос, как будет правильнее: сделать 2 таблицы page_comment и image_comment с одинаковыми структурами или сделать одну таблицу comment, в которой будет reference_table и reference_id. Подход с одной таблицей выглядит более простым в реализации и поддержке: не нужно будет дублировать таблицы сейчас и в будущем, если нужно будет прикреплять комменты к новым таблицам, в коде не нужно будет дублировать модели, и если какие-то изменения в структуре, то не нужно будет их дублировать в разных таблицах и т. д. То есть тут много дублирования всякого, нарушение принципа DRY, но насколько он применим в этом случае?

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

То есть в таких случаях надо делать таблицы с одинаковыми структурами сколько потребуется? Или вариант с одной таблицей тоже возможен?
27 июл 20, 03:47    [22173962]     Ответить | Цитировать Сообщить модератору
 Re: Использовать одну таблицу или разделить  [new]
Павел Лузанов
Member

Откуда:
Сообщений: 722
ReAppear,

Для принятия решения важно понимать как этот комментарий будет использоваться.
Если при каждом обращении к страницам/картинкам нужно считывать и комментарий, то возможно поле comment стоит в каждую таблицу добавить.
Если комментарии нужны лишь иногда, по отдельному запросу, то отдельная таблица вполне себе вариант.
Например, в системном каталоге постгреса есть одна таблица pg_description, где хранятся комментарии ко всем объектам (ну почти ко всем).
27 июл 20, 09:56    [22174034]     Ответить | Цитировать Сообщить модератору
 Re: Использовать одну таблицу или разделить  [new]
Maxim Boguk
Member

Откуда: Melbourne, Австралия
Сообщений: 4230
ReAppear,

Мое мнение - это логически разные вещи и лежать им в физически разных таблицах пусть даже одинаковой структуры.
27 июл 20, 11:06    [22174063]     Ответить | Цитировать Сообщить модератору
 Re: Использовать одну таблицу или разделить  [new]
Алексей Роза
Member [заблокирован]

Откуда: РФ
Сообщений: 557
обычно комменты по всему проекту делаются на одном движке
следовательно и архитектура таблицы должна быть одна
т.е. там исходная таблица наследуется всеми таблицами с комментами
либо вообще 1 таблица
я голосую за несколько, так ещё и поменять движок будет проще в будущем.

Сообщение было отредактировано: 27 июл 20, 14:49
27 июл 20, 14:50    [22174208]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить