Помогите со структурой базы

Waki

Постоялец
Регистрация
14 Ноя 2012
Сообщения
64
Реакции
21
Не могу сообразить какую структуру сделать для сайта с автозапчастями. Суть такая, при подаче вначале выбирается какая это запчасть (двигатель, ходовая и т.д.), далее выбирается марка, после нужные модели и их года. Тип запчасти, марки, модели, года выпуска может быть несколько в одном объявлении.
примерно так:
Код:
Двигатель, Ходовая  -> Volkswagen   -> Passat -> 1996 — 2005 B5, 2005 — 2010 B6
                                    -> Jetta -> 2005 — 2010 A5, 1999 — 2005 Mk4
                    -> Subaru -> Legacy -> 2003 — 2009, 1998 — 2004
                              -> Impreza -> 2007 — 2012 III, 2000 — 2007 II
И вот не могу сообразить как лучше их хранить в базе, чтобы потом не было сложностью с поиском. Думал все это запихать в json формате в одно поле, и при поиске RLIKE'ом отбирать нужное, но что-то сомнения на этот счет, может кто подскажет по структуре?
 
Если "По науке" (третья нормальная форма) - как-то так примерно.

Таблица Марок (Subaru, Passat ..) id_mark, name
Таблица Моделей (1-много) (Subaru Legacy? ) id_model, id_mark, name
Таблица Модификаций - id-шник модели, название модификации (1-много) (Passat B5, PassatB6) id_modification, id_model

Таблица Запчасти - отдельная таблица (название, производитель и тд) id_part, part_name, part_price ...

и таблица отношений многие-ко-многим
Запчасть - модификация (id_part, id_modification)

т.к. многие запчасти подходят к нескольким маркам-моделям.

Всё это либо JOIN-ить, либо 2-3 запроса делать. (думаю, и тот и другой быстрее, чем RLIKE)
 
а вот я бы все транспортные средства в одной таблице хранил, с parent-child связью.. добавить только какое-нить поле для указания типа записи надо (дескать что за запись - марка, модель, кузов, год, объём двигателя, т.п.)..
тут в чём фишка - у разных производителей разное разделение.. напр. марка -> модель -> кузов -> год выпуска -> движок, или марка -> модель -> модификация -> движок (mini, напр.), или марка -> модель -> движок (привет hammer).. кто в лес, кто по дрова, короче.. про всякие грузовики, автобусы и спец.технику промолчим - там вообще полный разброд и шатание.. с год назад как раз с такой задачей возился.. с разными таблицами может возникнуть путаница (куда/что писать, как сохранить наследование, если через модель перескочить надо, и не уйти в избыточность, т.п.).. parent-child и тип записи эту проблему снимает (точнее перекладывает на приложение, где всё элементарно решается)..

ну и конечно, в таком случае, имеет смысл пользоваться нормальной субд (postgresql, например), т.к. в mysql нет рекурсивных запросов.. конечно задача решается через хранимку (Для просмотра ссылки Войди или Зарегистрируйся), но это немного костыльно..

в плане запчастей, поддерживаю esche..

зы.. писал в своё время парсер каталога тс auto.ru, если интересно, пиши в личку..

ззы.. like - адское зло.. ))
 
Согласен с esche, тут нужна нормальная структура, не стоит загромождать все данные в 1 или 2 справочника. Потом будет только хуже.
Не забывайте по наиболее выбираемым полям ставить индексы, чтобы выборки проходили быстрее.
 
ИМХО конечно, но я не представляю все марки/модели в одной таблице. Разобраться, если что, будет сложно. кмк таблицы marka, model обязательны, а может и submodel со ссылкой на id старшей категории
 
Для просмотра ссылки Войди или Зарегистрируйся, если бы определения автомобилей были формализованы и заключались исключительно в сочетании марка+модель, вы были бы абсолютно правы.. однако 10-15% транспортных средств напрочь ломают эту божественную парадигму.. печаль, конечно..
 
Например?
Может просто не сталкивался с таким.

Таблица marka
marka_id, marka, markarus, keywords
1, audi, ауди, блаблабла
Таблица model
id, marka_id, model, modelrus, keywords
1, 1, Allroad quattro (4B,C5)(2000 - 2006), алроуд, блаблабла
Таблица submodel
id, model_id, fuel, eng_model, eng_pow, eng_vol, wheel, years, keywords
1,1,бензин, AEB, 220, 2226, полный, 03/2000-07/2006, блаблабла

Точнее у меня пока таблицы submodel нет, сейчас ей занимаюсь (из текдока), пока только кузовня, где доп условия редки и можно описать их в комментариях к деталям.
 
да хотя бы так: марка bmw -> модель 3er.... упс -> модификация 316.. а вот у модели 1er модификаций нет.. покопаться если - много перлов и похлеще.. сейчас уже конкретики не помню - не один год прошёл.. но решение, что я предложил, было выбрано совершенно не просто так..
 
У копейки тоже модификации есть, начиная от кабрика (е88), купе (е82), продолжая двигателями:
116i - N45 B16 A - 115 лс, N45 B16 TU2 - 122 лс, N43 B20 A - 122 лс
118i -
120i -
130i - 265 лс, 3 литра:ay:
116d -
118d -
120d -
123d -
Все это в одной таблице, вместе с марками и моделями верхнего уровня? Ну не знаю.... Не убедили...
 
вы путаете модификацию и тип двигателя.. у bmw 3er 316 тоже есть сборки с разными кузовами и движками.. более того, попадались тс (транспортные средства), у которых моделей вообще небыло, только кузова и движки разные.. а были, у которых марка, модель, модификации, подмодификации, и только там градации по типам..

в общем дело хозяйское, я своё слово сказал, и никого убеждать не собираюсь.. осваивайте.. будете делать действительно серьезный каталог тс, сами столкнётесь..
 
Назад
Сверху