Я работаю над новым проектом, и мне нужно настроить таблицу базы данных «Комментарии».
В моем проекте можно будет комментировать «страницу», «пост», «тему форума» или что-то еще.
Теперь мне интересно, как лучше настроить мою таблицу «Комментарии» в среде Laravel, учитывая скорость и работоспособность?
Либо создайте таблицу с несколькими внешними ключами, где один ключ всегда будет заполнен, а другой будет пустым
id (int) — комментарий (текст) — пост (FK) — тема (FK) — страница (FK)
или создайте таблицу без внешних ключей, но только с идентификатором и строкой, которая указывает тип комментария, подобный этому
id (int) — комментарий (текст) — type (varchar — ‘post’ или ‘topic’) — type_id (int — идентификатор ‘post’ или ‘topic’)
Будет лучше, если вы выберете второй подход.
Если позже был добавлен еще один источник для принятия комментариев, таблица будет нуждаться в модификации, если вы будете следовать первому подходу. Кроме того, возможно, что один и тот же пользователь может предоставить комментарии еще раз по той же теме. Этот способ хранения (2-й подход) помогает.
Выборка записей по-прежнему будет эффективной, поскольку, будь то одна строка (1-й подход) или несколько строк (2-й подход), записи для определенной темы будут по-прежнему очень избирательными (и поэтому эффективными) по сравнению с общим размером таблицы ,
Для коэффициента масштабируемости вы должны создать таблицу, в которой будет содержаться тип публикации, под которой будет находиться комментарий, чтобы вы могли добавлять другие типы публикаций в будущем.
Таким образом, структура таблицы комментариев должна быть примерно такой:
id (int) — комментарий (текст) — parent_type (int) — parent_id
parent_id (int) — parent_name (varchar)
В зависимости от типа, вы решаете, с какой таблицей вы собираетесь сделать соединение.
Я думаю, что второй подход лучше, так как он минимизирует пустые ячейки в вашей таблице, а также будет проще запрашивать.