Realnewbie
@Realnewbie
Самоучка

Как правильно генерировать меню навигации и организовать сущности данных?

Прошу совета как правильно организовать данные и связи между ними.
Я разрабатываю стандартный веб-проект. В качестве основы один из MVC фреймворков. Для простоты я опущу все сложности.

Основная масса данных это Категория и относящиеся к ней Статьи. Связь: Categories hasMany Articles.
У Categories есть поля: id, name У Articles:id, category_id, title
На основе этих данных строится меню на сайте и вся навигация.

Теперь мне требуется добавить 2 новых типа данных в базу: проекты и люди работающие над этими проектами.
В базе они будут отражены как Projects и Persons. Projects HABTM Persons
Projects: id, title. Persons: id, project_id, name, surname.

Задача которая требует решения: добавить в генерируемую навигацию новые пункты ведущие на разделы со списком проектов и со списком сотрудников.

Мои варианты:
1. Очевидно неподходящий (на мой взгляд): отказ от дополнительных таблиц и попытка запихнуть новые сущности в пределы Articles. Это несомненно плохой вариант, требует дополнительных полей и т.д. Чем больше будет новых сущностей... ну вы поняли.
2. (используется сейчас). Сущности Projects добавлено поле category_id и связь belongsTo Categories. А Categories hasMany Projects.

Раньше меню строилось по принципу: Выбрать все Categories и к каждой выбрать все Articles.
Теперь пришлось изменить на: Выбрать все Categories, к каждой выбрать все Articles, к каждой выбрать все Projects.
Фактически же Projects есть только у одной из Categories.

Минусы данного решения: когда в проекте появятся ещё больше новых сущностей, то придётся добавлять и добавлять (до бесконечности) дополнительные выборки из базы чтоб построить меню.

Вопрос: как решить эту задачу правильно?
  • Вопрос задан
  • 310 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Azperin
Дилетант
Вобщем я бы предложил такое решение:
Есть таблица menu с полями id, title, category_id type
Есть таблица связующая таблица categories с полями id, content_id, name

И выводите любое меню через эту категорию, можете по типу создавать в кссе дополнительное оформление для разных типов.
Вид страницы и код отображения, в зависимости статья это или проект, у вас в любом случае будет отличаться, поэтому и таблицы для статей и проектов у вас тоже будут разными, но привязанными к меню и вы точно будете знать что именно меню означает и куда ведет.

Даже не представляю какие там поля могут быть у проектов, напишу на примере статьи. Имеем таблицы menu, categories.

SELECT menu.id, menu.title, menu.type
FROM menu
INNER JOIN categories ON (categories.id = $выбранная категория для отображения меню)
Ответ написан
Ваш ответ на вопрос

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

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