поиск в базе данных ruby ​​on rails, хранение - PullRequest
1 голос
/ 30 апреля 2011

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

Допустим, у меня есть следующие две таблицы:

table: cars

+---------------+------------+----------------+--------------+
|     color     |    size    |    capacity    |    origin    |
+---------------+------------+----------------+--------------+

table: users

+----------------+---------------+--------------------+-----------------+
| desired_colors | desired_sizes | desired_capacities | desired_origins |
+----------------+---------------+--------------------+-----------------+

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

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

Теперь я задаюсь вопросом, как наилучшим образом добиться «совпадения» между желаемыми чертами пользователя и каждым транспортным средством.Таким образом, пользователи смогут увидеть топ-матчи автомобилей, которые им нужны.

У меня есть несколько идей о том, как я это сделаю, но мне было интересно, что все здесь думали, что это лучший способ сделать что-то вродеэтот.Я думаю, что лучший способ - это иметь таблицу «совпадений», показывающую совпадение между user_id, car_id и match_score, но я не уверен, как и когда я выполню эти вычисления и сохранюэти данные.Еще одна вещь, о которой стоит подумать, если я решу изменить критерии оценки.

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

Спасибо всем:)

1 Ответ

1 голос
/ 30 апреля 2011

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

select *, 
if(color in ('green', 'red', blue', ...), 10, 0)
 + if(size in (...), 10, 0)
 + if(capacity in (...), 10, 0)
 + if(origin in (...), 10, 0) as score
from cars
where color in ('green', 'red', blue', ...)
or size in (...)
or capacity in (...)
or origin in (...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...