Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
22.07.2020, 06:40
|
|||
---|---|---|---|
|
|||
Использовать одну таблицу или разделить |
|||
#18+
Всем привет! Помогите, пожалуйста, с таким вопросом. Есть таблицы page, comment и др. Необходимо сделать к этим таблицам функционал дополнительных полей, например, сделать таблицу field. Встал вопрос, либо сделать таблицу field, в которой будут колонки reference_table и reference_id для связки с источником, либо делать для каждой сущности отдельную таблицу page_field, comment_field. У самой таблицы field в будущем тоже могут появится свои связанные таблицы и т.д. Вариант с jsonb пока не рассматриваем. Какие вы видите подводные камни у этих решений? Сильно ли будет просадка по скорости при выборке, если все будет в одной таблице, но при этом мы будем индексировать reference_table по сравнению с тем, что у нас будет отдельная таблица? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
27.07.2020, 03:47
|
|||
---|---|---|---|
|
|||
Использовать одну таблицу или разделить |
|||
#18+
Или более подходящий пример. Есть таблицы page и image. Предположим, нам нужно сделать возможность оставлять комментарии к страницам и картинкам. Встает вопрос, как будет правильнее: сделать 2 таблицы page_comment и image_comment с одинаковыми структурами или сделать одну таблицу comment, в которой будет reference_table и reference_id. Подход с одной таблицей выглядит более простым в реализации и поддержке: не нужно будет дублировать таблицы сейчас и в будущем, если нужно будет прикреплять комменты к новым таблицам, в коде не нужно будет дублировать модели, и если какие-то изменения в структуре, то не нужно будет их дублировать в разных таблицах и т. д. То есть тут много дублирования всякого, нарушение принципа DRY, но насколько он применим в этом случае? Вот еще пришло в голову, что с одной таблицей не получится FOREIGN KEY сделать по таким полям, судя по всему. Ну, тут есть вариант, что связи будут в коде между моделями, там возможно их иметь по каким угодно полям. Хотя это уже выходит, что мы получаем ограничение базовой функциональности с такой реализацией. То есть в таких случаях надо делать таблицы с одинаковыми структурами сколько потребуется? Или вариант с одной таблицей тоже возможен? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
27.07.2020, 09:56
|
|||
---|---|---|---|
|
|||
Использовать одну таблицу или разделить |
|||
#18+
ReAppear, Для принятия решения важно понимать как этот комментарий будет использоваться. Если при каждом обращении к страницам/картинкам нужно считывать и комментарий, то возможно поле comment стоит в каждую таблицу добавить. Если комментарии нужны лишь иногда, по отдельному запросу, то отдельная таблица вполне себе вариант. Например, в системном каталоге постгреса есть одна таблица pg_description, где хранятся комментарии ко всем объектам (ну почти ко всем). ... |
|||
:
Нравится:
Не нравится:
|
|||
|
27.07.2020, 11:06
|
|||
---|---|---|---|
|
|||
Использовать одну таблицу или разделить |
|||
#18+
ReAppear, Мое мнение - это логически разные вещи и лежать им в физически разных таблицах пусть даже одинаковой структуры. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
27.07.2020, 14:50
|
|||
---|---|---|---|
|
|||
Использовать одну таблицу или разделить |
|||
#18+
обычно комменты по всему проекту делаются на одном движке следовательно и архитектура таблицы должна быть одна т.е. там исходная таблица наследуется всеми таблицами с комментами либо вообще 1 таблица я голосую за несколько, так ещё и поменять движок будет проще в будущем. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=53&mobile=1&tid=1994558]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
36ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
42ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 136ms |
0 / 0 |