powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Использовать одну таблицу или разделить
5 сообщений из 5, страница 1 из 1
Использовать одну таблицу или разделить
    #39982479
ReAppear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!

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

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

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

То есть в таких случаях надо делать таблицы с одинаковыми структурами сколько потребуется? Или вариант с одной таблицей тоже возможен?
...
Рейтинг: 0 / 0
Использовать одну таблицу или разделить
    #39984253
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ReAppear,

Для принятия решения важно понимать как этот комментарий будет использоваться.
Если при каждом обращении к страницам/картинкам нужно считывать и комментарий, то возможно поле comment стоит в каждую таблицу добавить.
Если комментарии нужны лишь иногда, по отдельному запросу, то отдельная таблица вполне себе вариант.
Например, в системном каталоге постгреса есть одна таблица pg_description, где хранятся комментарии ко всем объектам (ну почти ко всем).
...
Рейтинг: 0 / 0
Использовать одну таблицу или разделить
    #39984271
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ReAppear,

Мое мнение - это логически разные вещи и лежать им в физически разных таблицах пусть даже одинаковой структуры.
...
Рейтинг: 0 / 0
Использовать одну таблицу или разделить
    #39984359
обычно комменты по всему проекту делаются на одном движке
следовательно и архитектура таблицы должна быть одна
т.е. там исходная таблица наследуется всеми таблицами с комментами
либо вообще 1 таблица
я голосую за несколько, так ещё и поменять движок будет проще в будущем.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Использовать одну таблицу или разделить
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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