У меня есть вопрос о схеме базы данных для определенного веб-сайта, где люди могут продавать и покупать вещи.
Когда кто-то добавляет объявление в базу данных, он выбирает категорию и заполняет фильтры, относящиеся к выбранной категории, поэтому каждый может легко найти свое объявление, просмотрев категорию и выбрав фильтры, такие как:
[bluetooth] да
[камера] 3 - 5 мегапикселей.
Et cetera
Каков наилучший способ хранения этих фильтров в базе данных? Это то, что у меня есть до сих пор:
Схема http://img98.imageshack.us/img98/5089/database2.jpg
Это всего лишь идея, но она никогда не отправит объявления со значениями для "мегапикселей" фильтра от 3 до 5, так как filter_value
имеет тип VARCHAR
.
Рассматривали ли вы дополнительную таблицу, filter_value_list с идентификаторами столбцов, filter_id и значением? Эта таблица будет содержать список ответов VARCHAR, которые будут предоставлены пользователю в виде раскрывающегося списка для каждого фильтра, связанного с категорией объявления, которое размещается.
Для фильтра "Bluetooth" возможными значениями будут "Да" и "Нет". Для фильтра "Камера" возможные значения могут быть "Меньше 1 мегапикселя", "1 или 2 мегапикселя", "от 3 до 5 мегапикселей", "от 5 до 10 мегапикселей", "Более 10 мегапикселей" (мы планирование будущей технологии здесь).
Преимущества:
Пользователь выбирает, а не типы, свой ответ.
Каждый фильтр гарантированно понимается вашей системой.
Согласованность во всех рекламных объявлениях.
Список возможных значений также можно использовать в боковой панели "добавить/удалить фильтры", как вы видите на многих сайтах в наши дни.
Дизайн работает очень хорошо в соответствии со мной, мне любопытно, почему вы включили дополнительное поле id в таблицу соединений, например, между объявлениями и категориями. Думаю, вы могли обойтись без них. Дизайн в целом довольно хорош, потому что он позволяет вам вносить изменения в базовые таблицы, например, рекламу позже.
Еще одна вещь Что такое filter_value? и почему это невозможно в таблице фильтров?
Я бы сделал с таблицами для:
Сохраните его любым способом, но для эффективного запроса на основе этих фильтров установите Solr и используйте фасетный поиск.