Отказ от ответственности: я уверен, что на этот вопрос уже был дан ответ, но я не могу найти что-либо в SO или Google.
Итак, у меня есть CMS, которая по существу состоит из формата Page, Region, Widget. Одна страница может иметь неограниченное количество регионов, а регион может иметь неограниченное количество виджетов.
Прямо сейчас моя схема выглядит так:
Table: pages
Columns: id, title, uri, ...
Table: regions
Columns: id, page_id, name, title
Table: widget_types
Columns: id, title, active
Table: widget_assignments
Columns: id, region_id, widget_type_id, data
(data represents content/settings for a specific instance of a Widget)
Это прекрасно работает для простых виджетов. Я хочу, чтобы у каждого типа виджетов были свои таблицы. Например, простой виджет контента будет иметь такую таблицу:
Table: wt_content
Columns: id, content
Пример более сложного виджета (например, форумов) может выглядеть примерно так:
Table: wt_forums
Columns: id, ...
Table: wt_forum_threads
Columns: id, ...
Table: wt_forum_categories
Columns: id, ...
Table: wt_forum_settings
Columns: id, ...
Единственный способ, которым я знаю, как это сделать, - это добавить столбец table
и reference_id
в таблицу widget_assignments
, например:
Table: widget_assignments
Columns: id, region_id, widget_type_id, table, reference_id
Я ненавижу это из-за того, что мне придется делать кучу запросов при каждой загрузке страницы. Я должен буду:
- ВЫБЕРИТЕ все назначения виджетов и регионы для текущей страницы (это один запрос с объединениями)
- Затем переберите каждое назначение виджета и найдите фактический виджет.
Это потенциально дерьмовая нагрузка на запросы! Там должен быть лучший путь. Я открыт для всего на данный момент.
Спасибо.