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

Тема в разделе "Базы данных", создана пользователем Waki, 9 сен 2013.

Модераторы: latteo
  1. Waki

    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'ом отбирать нужное, но что-то сомнения на этот счет, может кто подскажет по структуре?
     
  2. esche

    esche

    Регистр.:
    9 авг 2009
    Сообщения:
    360
    Симпатии:
    243
    Если "По науке" (третья нормальная форма) - как-то так примерно.

    Таблица Марок (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)
     
    latteo и Waki нравится это.
  3. BDSG

    BDSG

    Регистр.:
    28 фев 2009
    Сообщения:
    203
    Симпатии:
    109
    а вот я бы все транспортные средства в одной таблице хранил, с parent-child связью.. добавить только какое-нить поле для указания типа записи надо (дескать что за запись - марка, модель, кузов, год, объём двигателя, т.п.)..
    тут в чём фишка - у разных производителей разное разделение.. напр. марка -> модель -> кузов -> год выпуска -> движок, или марка -> модель -> модификация -> движок (mini, напр.), или марка -> модель -> движок (привет hammer).. кто в лес, кто по дрова, короче.. про всякие грузовики, автобусы и спец.технику промолчим - там вообще полный разброд и шатание.. с год назад как раз с такой задачей возился.. с разными таблицами может возникнуть путаница (куда/что писать, как сохранить наследование, если через модель перескочить надо, и не уйти в избыточность, т.п.).. parent-child и тип записи эту проблему снимает (точнее перекладывает на приложение, где всё элементарно решается)..

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

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

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

    ззы.. like - адское зло.. ))
     
    latteo и Waki нравится это.
  4. Belora23

    Belora23 Постоялец

    Регистр.:
    27 янв 2009
    Сообщения:
    65
    Симпатии:
    4
    Согласен с esche, тут нужна нормальная структура, не стоит загромождать все данные в 1 или 2 справочника. Потом будет только хуже.
    Не забывайте по наиболее выбираемым полям ставить индексы, чтобы выборки проходили быстрее.
     
  5. AutoLexx

    AutoLexx Создатель

    Регистр.:
    10 ноя 2013
    Сообщения:
    19
    Симпатии:
    3
    ИМХО конечно, но я не представляю все марки/модели в одной таблице. Разобраться, если что, будет сложно. кмк таблицы marka, model обязательны, а может и submodel со ссылкой на id старшей категории
     
  6. BDSG

    BDSG

    Регистр.:
    28 фев 2009
    Сообщения:
    203
    Симпатии:
    109
    AutoLexx, если бы определения автомобилей были формализованы и заключались исключительно в сочетании марка+модель, вы были бы абсолютно правы.. однако 10-15% транспортных средств напрочь ломают эту божественную парадигму.. печаль, конечно..
     
  7. AutoLexx

    AutoLexx Создатель

    Регистр.:
    10 ноя 2013
    Сообщения:
    19
    Симпатии:
    3
    Например?
    Может просто не сталкивался с таким.

    Таблица 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 нет, сейчас ей занимаюсь (из текдока), пока только кузовня, где доп условия редки и можно описать их в комментариях к деталям.
     
  8. BDSG

    BDSG

    Регистр.:
    28 фев 2009
    Сообщения:
    203
    Симпатии:
    109
    да хотя бы так: марка bmw -> модель 3er.... упс -> модификация 316.. а вот у модели 1er модификаций нет.. покопаться если - много перлов и похлеще.. сейчас уже конкретики не помню - не один год прошёл.. но решение, что я предложил, было выбрано совершенно не просто так..
     
  9. AutoLexx

    AutoLexx Создатель

    Регистр.:
    10 ноя 2013
    Сообщения:
    19
    Симпатии:
    3
    У копейки тоже модификации есть, начиная от кабрика (е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 -
    Все это в одной таблице, вместе с марками и моделями верхнего уровня? Ну не знаю.... Не убедили...
     
  10. BDSG

    BDSG

    Регистр.:
    28 фев 2009
    Сообщения:
    203
    Симпатии:
    109
    вы путаете модификацию и тип двигателя.. у bmw 3er 316 тоже есть сборки с разными кузовами и движками.. более того, попадались тс (транспортные средства), у которых моделей вообще небыло, только кузова и движки разные.. а были, у которых марка, модель, модификации, подмодификации, и только там градации по типам..

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