Как лучше всего реализовать дополнительные поля?

Пишу "CMS" на laravel 5.2, для будущих проектов и стал вопрос о дополнительных полях к добавляемым публикациям. Дополнительные поля будут иметь типы: цифровой, текстовый, выпадающий список, дата, шаблон и т.п.
Идея реализации такова: Таблицы:
  • publications - таблица публикаций
  • additional_fields - таблица с добавленными полями
  • pubication_fields- таблица публикаций в которой хранятся значения доп. полей публикации
  • publication_extra - таблица публикаций в которой будут храниться статистические данные публикации (просмотры, кол. комментариев, рейтинг и т.д.)

Вопрос заключается в строении бд. Будет ли это лучшим выходом из ситуации? Вроде, сделал по правилам "нормализации"? Например, в DLE это сделано в колонке "xfields" с типом text, таблица с новостями, где хранятся все значения доп. полей, но мне кажется это не слишком хорошим выходом.
P.s. Пока все описывал, понял, что довольно глупый вопрос :)
  • Вопрос задан
  • 676 просмотров
Пригласить эксперта
Ответы на вопрос 3
zvermafia
@zvermafia
WebDev
P.s. Пока все описывал, понял, что довольно глупый вопрос :)

А я вот не понял почему глупый вопрос? Можете объяснить?
Ответ написан
mcmraak
@mcmraak
php+sql+js+bicycle+crutches
Я тоже изучаю этот вопрос, и я пока что вижу, что самый оптимальный вариант реализации вот такой (типа инфоблоки в битриксе или информационные системы в HostCMS).

Имеем следующие таблицы:
1) Сами записи (id|...|category_id)
2) Категории (вида id|parent_id|customfields_table)
3) Набор кастомных полей для категории (id|custom_1|custom_2|...)
4) Описание кастомных полей для таблицы кастомных полей (custom_{id}|type|name|slug|...)
Как-то так, всё нормализовано и связано, в моём примере наборы кастомных полей привязываются к категориям, как в JBZoo или в HostCMS но в этом же стиле можно привязать их к иным сущностям, как инфоблоки в битриксе, но эти инфоблоки связаны так-же с категориями (ну дальше логика уже зависит от задач).

Есть ли ещё какие-то соображения?
P.S. А вопрос интересный и совсем не глупый.
Ответ написан
@ollisso
Главный вопрос, как часто меняется таблица, сколько планируется доп. полей. и насколько есть данные поля у всех строк?

Т.е. пример:
если есть поле которое есть у 1 из 1000 записей, то имеет смысл выносить в отдельную таблицу.

Такие же поля как "дата создания", "номер автора" и тп , то имеет смысл хранить в основной таблице publications.

Это возможно не совсем полостью нормализированная таблица, но это практичнее :)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы