Как лучше хранить блоки с однотипной информацией в бд?
Имеются разные блоки, например о нас, преимущества и тд.
Все они имеют примерно схожую структуру (заголовок, изображение, описание, ссылка и тд). Некоторые блоки могут иметь только описание и заголовок, другие весь перечень полей.
Интересует как в таком случае лучше их хранить?
Первый вариант: создавать под каждый отдельный блок свою таблицу. В этом варианте смущает, что чем больше их будет таких блоков будет на странице, тем больше селектов придётся сделать. Также из минусов при появлении нового блока придется каждый раз лезть в код, описывать новую сущность.
Второй вариант: создать одну таблицу (условно blocks), полем block_type, с помощью которого маркировать записи, относящиеся к конкретному блоку и скидывать в нее все. Это даст возможность использовать один селект, но в таблице будет бардак.
А какова конечная цель? Подобное вроде обычно прямо в HTML вставляют, без использования базы данных.
Либо используют шаблонизаторы, если нужно в разных местах использовать.
Все они имеют примерно схожую структуру (заголовок, изображение, описание, ссылка и тд)
1) "и тд." это 50 разных возможных свойств, или еще 5 возможных значений?
Некоторые блоки могут иметь только описание и заголовок, другие весь перечень полей.
Пустые поля не проблема, главное не путать сущности, это у вас именно блоки, или страницы?
Второй вариант: создать одну таблицу (условно blocks), полем block_type, с помощью которого маркировать записи, относящиеся к конкретному блоку и скидывать в нее все.
А чем отличаются типы блоков? Есть какие-то особые правила для разных блоков?
Это даст возможность использовать один селект, но в таблице будет бардак.
Все еще не понятно что это за блоки, но похоже как раз с 1 таблицей бардака будет меньше. Пока что неплохо бы понятно описать что за блоки, что за block_type и что есть кроме блоков.
"и тд." это 50 разных возможных свойств, или еще 5 возможных значений?
Думаю максимум 7-10 значений наберется
Пустые поля не проблема, главное не путать сущности, это у вас именно блоки, или страницы?
Да, именно блоки. Т.е страница будет строиться из этих блоков. Выделяю их в отдельное хранилище для переиспользования.
А чем отличаются типы блоков? Есть какие-то особые правила для разных блоков?
Тип - по сути это id для выборки элементов, относящихся к одной сущности. Условно существует блок "Наши партнеры", который содержит 5 элементов, у каждого есть логотип, название, описание. В таком случае в таблице будет храниться 5 строк, с типом partners.
Все еще не понятно что это за блоки, но похоже как раз с 1 таблицей бардака будет меньше. Пока что неплохо бы понятно описать что за блоки, что за block_type и что есть кроме блоков.
Помимо блоков - страницы, пользователи, товары с торговыми предложениями и тд. Набор типичного интернет магаза.
В принципе, я уже склонился к использованию одной таблицы
Ну, вообще, ничего критически плохого во втором варианте с одной таблицей не вижу.
Если смущает "бардак" - используйте вынесите поля в отдельную таблицу. Классическая реализация этого - EAV (Entity–attribute–value)