Схема базы для страниц, связанных в нескольких плоскостях

HEm

Сетевой бобер
Извиняюсь за некоторую сумбурность в разъяснении, собственно поэтому и прошу помочь навести порядок. Г-н baev, если название не понравится, просьба помочь с правильной формулировкой.

Вот такое вот дали задание. По нарисованному макету продумать и создать структуру каталога услуг для автосервиса.
ниже приведен скриншот выпадающего меню на ТМ (торговой марке).

Я так понимаю, мысли о том, как все сделать навеяны реализацией на сайте tokyogarage точка ру.

Сначала я предложил было сделать это все обычным рубрикатором страниц, но в связи с тем, что выбор страниц должен влиять и на выпадающее меню по ТМ, то все таки пришел к выводу, что делать надо отдельный модуль.

Исходные данные:
Есть несколько торговых марок - Toyota, Nissan, Mitsubishi и т.д. Для каждой торговой марки есть несколько страниц с услугами (техосмотр, кузовной ремонт, шиномонтаж и т.п.), несколько страниц с дисконтными программами и предложениями, страница прайса, список моделей, возможно какие то еще страницы.
Ссылки, соответственно могут быть такие, например /toyota/ , /toyota/uslugi/ , /toyota/uslugi/to.html , /toyota/uslugi/price.html , /toyota/models/ , /toyota/discount/winter2012.html
У каждой модели (для Toyota например - RAV4, Camry, Corolla и т.д.) также есть аналогичные страницы с услугами, прайсом и т.п., возможно, будут еще какие то свои страницы.
Ссылки будут например, такими /toyota/models/rav4/ , /toyota/models/rav4/uslugi/ , /toyota/models/rav4/uslugi/to.html , /toyota/models/rav4/uslugi/price.html , /toyota/models/rav4/osobennosti_remonta_zastschelki_vyhlopnoi_truby_rav4.html

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

Про третью колонку скажу отдельно. На сайте есть монструозный калькулятор ТО на jQuery, в котором можно выбрать ТМ, модель, пробег. Можно настроить его так, чтобы в зависимости от переданных параметров через GET сразу попадать на нужный шаг. Отсюда еще требование чтобы если выбрана модель RAV4, например, в списке пробегов в третьей колонке ссылки были примерно такие: /megacalc.html?tm=toyota&model=rav4&run=60000, ну и соответственно если модель не выбрана то /megacalc.html?tm=toyota независимо от цифры пробега.
скриншот нескольких шагов калькулятора ТО
Ну и вот - прошу совета, как лучше реализовать структуру таблиц в БД, чтоы потом все это выводить, среди прочего генерируя правильно вложенные адреса для страниц.

В ходе написания темы осознал, что привязка "прочих" страниц относительно проста и выполняется связью с ТМ и моделями через теги.

Вот примерно накидал схему таблицы, кажется, удовлетворяет
PHP:
CREATE TABLE IF NOT EXISTS `cms_service_pages` (
  `id` bigint(20) unsigned NOT NULL auto_increment,
  `parent_id` bigint(20) unsigned NOT NULL,
  `alias` varchar(255) NOT NULL,
  `column` tinyint(3) unsigned NOT NULL default '4',
  `ptitle` varchar(255) default NULL,
  `mtitle` varchar(255) default NULL,
  `wtitle` varchar(255) default NULL,
  `content` text,
  `mk` varchar(255) default NULL,
  `md` varchar(255) default NULL,
  `page_type` enum('tm','model','uslugi','discount','other') NOT NULL default 'tm',
  `hidden` tinyint(4) NOT NULL default '0',
  PRIMARY KEY  (`id`),
  KEY `parent_id` (`parent_id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;
page_type определяет одновременно и тип страницы и уровень (для формирования урла)

таблицы тегов и связей с тегами не привожу, они тривиальны
 

prolis

Новичок
создать структуру каталога услуг для автосервиса.
как видно, в задании не было сказано ни про страницы, ни про модели, ничего другого кроме услуг (и как я понял из сумбура - вычисления тарифа)
Необходимо плясать от сущностей "Услуга" и "Тариф" и создать между ними связь, а не "связанных в нескольких плоскостях"@
 

baev

‹°°¬•
Команда форума
HEm, от «картинки» отвлекитесь и считайте «торговую марку» такой же характеристикой «услуги» как и «модель»/«пробег».
Сразу «несколько плоскостей» исчезнут.
 

HEm

Сетевой бобер
нет, это просто статические страницы с текстом, посмотрите токиогараж, там почти то же, что мне нужно
 

HEm

Сетевой бобер
baev
эм... т.е. примерно так поля:

id, tm_id, model_id (это необязательно), subfolder (это тоже необязательно, может принимать значения uslugi и discount, например)
 

baev

‹°°¬•
Команда форума
HEm, не, есть «услуга», к которой по ID привязаны различные характеристики этой услуги.
 

HEm

Сетевой бобер
ну, я как бы в уме переименовал это слово в "страница", потому что она может быть разной - услуга, рекламная акция, статья, прайс-лист

я представляю теперь так:
таблица "справочник торговых марок" - отсюда собирается список табов
таблица "справочник моделей авто", с привязкой к ТМ - отсюда у каждой ТМ собирается список во второй колонке меню
таблица "страницы" с привязкой к ТМ или к ТМ и модели - все остальные страницы, попадание в первую или четвертую колонку меню делается через отдельное поле column_no
 
Сверху