Подскажите по архитектуре

NEOmancer
На сайте с 06.07.2007
Offline
80
395

Добрый день.

Нужно организовать определенный функционал, подскажите более элегантное решение.

Вот, например, http://vse-sto.com.ua/donetsk/sto/ (мне нужно реализовать аналогично)

В этот каталог при добавлении СТО можно галочками отметить все ниши, в которых специализируется СТО, например, По марке авто(Acura, Audi, BMW и т.д.), По видам работ(3D развал-схождение, Автозапчасти, Автозвук, Авторазборка, Аквапечать и т.д.).

Меня интересует архитектура БД. Как мне её реализовать? Каждому объекту присваивать кучу полей? Будет таблица, в которой есть поле sto_id, к которому привязывается marka_acura_id, marka_audi_id, bmw_id и т.д., потом triD_razval_shojdenie_id, avtozapchasti_id, avtozvuk_id, avtorazborka_id, akvapechat_id, и т.д.

Это у меня единственная мысль пока. Но что-то данное решение мне совсем не представляется элегантным и оптимальным. При добавлении новой "галочки" прийдется изменять структуру БД.

website
На сайте с 25.02.2011
Offline
30
#1

нужно создать отдельные таблицы для каждого критерия.

Например марка авто (id, marka, ...), вид покраски (id, color....)

И потом при нажатии чекбокса собираешь все параметры и делаешь выборку по данным критериям. Запросы можно привести к минимуму при помощи INNER JOIN

И дай вам Бог того вдвойне, чего желаете вы мне!
doctorpc
На сайте с 12.07.2009
Offline
112
#2
website:
нужно создать отдельные таблицы для каждого критерия.
Например марка авто (id, marka, ...), вид покраски (id, color....)
И потом при нажатии чекбокса собираешь все параметры и делаешь выборку по данным критериям. Запросы можно привести к минимуму при помощи INNER JOIN

1)В данном подходе есть свои минусы. Нельзя динамически (из админки, например) добавлять новые критерии.

2)Если критериев будет 100, то прийдется создавать 100 таблиц.

Как я реализовывал похожую ситуацию. Окончательный вариант все же будет зависеть от нужд Вашей системы, но примерно так:

Таблица STO (id, name, description, и т.д...) - описание конкретной СТО

Таблица Categories (id, name, type - не обязательно) - здесь будут хранится критерии, например:

100, Марка авто, singleselect.

200, Виды работ, mulitiselect

Таблица Category_Options (id, category_id, value) - все возможные опции для категорий, например:

1, 100, Acura

2, 100, Audi

.............

3, 200, 3D развал-схождение

4, 200, Автозапчасти

.............

Таблица STO_Category_Options (id, sto_id, option_id) - карта между СТО и опциями

Дальше уже дорабатывайте, на свое усмотрение. Поле name.type в моем, более сложном примере было необходимо, т.к у меня были не только singleselect, multiselect свойства, но и например диапазон, который задавался минимальным и максимальным значением в момент добавления СТО, разным для каждой конкретной СТО. Такие значения уже не получится вписать в STO_Category_Options, а создавать отдельную таблицу для этого типа Вида (id, sto_id, category_id, min_value, max_value)

NEOmancer
На сайте с 06.07.2007
Offline
80
#3

doctorpc, спасибо, по-моему это то, что нужно

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий