База данных MySQL; лучшая схема

0

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

Когда кто-то добавляет объявление в базу данных, он выбирает категорию и заполняет фильтры, относящиеся к выбранной категории, поэтому каждый может легко найти свое объявление, просмотрев категорию и выбрав фильтры, такие как:

[bluetooth] да

[камера] 3 - 5 мегапикселей.

Et cetera

Каков наилучший способ хранения этих фильтров в базе данных? Это то, что у меня есть до сих пор:

Схема http://img98.imageshack.us/img98/5089/database2.jpg

Это всего лишь идея, но она никогда не отправит объявления со значениями для "мегапикселей" фильтра от 3 до 5, так как filter_value имеет тип VARCHAR.

  • 0
    Эта схема выглядит изящно. Могу я спросить, какую программу вы используете для ее создания?
  • 0
    Я второй запрос Яда.
Показать ещё 1 комментарий
Теги:
filter

3 ответа

0
Лучший ответ

Рассматривали ли вы дополнительную таблицу, filter_value_list с идентификаторами столбцов, filter_id и значением? Эта таблица будет содержать список ответов VARCHAR, которые будут предоставлены пользователю в виде раскрывающегося списка для каждого фильтра, связанного с категорией объявления, которое размещается.

Для фильтра "Bluetooth" возможными значениями будут "Да" и "Нет". Для фильтра "Камера" возможные значения могут быть "Меньше 1 мегапикселя", "1 или 2 мегапикселя", "от 3 до 5 мегапикселей", "от 5 до 10 мегапикселей", "Более 10 мегапикселей" (мы планирование будущей технологии здесь).

Преимущества:

  • Пользователь выбирает, а не типы, свой ответ.

  • Каждый фильтр гарантированно понимается вашей системой.

  • Согласованность во всех рекламных объявлениях.

  • Список возможных значений также можно использовать в боковой панели "добавить/удалить фильтры", как вы видите на многих сайтах в наши дни.

  • 0
    Привет, Ларри, спасибо за ваш комментарий! Итак, что вы сказали: не будет особых типов значений фильтра, таких как INT и VARCHAR, но только VARCHAR. И вы правы, у них есть эти четыре преимущества. Однако люди вынуждены добавлять точное описание количества мегапикселей (например, «3,2 мегапикселя») в описании, поскольку они могут выбрать только «от 3 до 5 мегапикселей». Это не так просто, как добавить слайдер на странице объявлений, где вы можете выбрать продукты с мегапикселями от 2 до 8 или от 6 до 8. Конечно, речь идет не только о мегапикселях;) Итак, спасибо за вашу идею, но, возможно, есть даже лучший:]
  • 0
    Да, это правда, что пользователь не может добавлять случайные значения. Однако вы можете создавать значения для всех общих разрешений вместо использования диапазонов, если хотите. Важно то, что для вас важнее, чтобы ответы всегда соответствовали определенной категории или нет.
0

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

Еще одна вещь Что такое filter_value? и почему это невозможно в таблице фильтров?

  • 0
    Первичные клавиши из одного столбца значительно упрощают программирование внешнего интерфейса. Значение_фильтра - это значение, указанное лицом, размещающим объявление, которое описывает отдельный рекламируемый элемент. Камера, которую я размещаю на сайте, может иметь «Да» для «Bluetooth», но ваша может иметь «Нет».
0

Я бы сделал с таблицами для:

  • объявления
  • имена фильтров (категория - только один из фильтров)
  • значения фильтра
  • связь между объявлением и значениями фильтра

Сохраните его любым способом, но для эффективного запроса на основе этих фильтров установите Solr и используйте фасетный поиск.

  • 0
    Это не очень полезно. Просто напрашивается больше вопросов.
  • 0
    Мне кажется, ты прав. Это не ответ. Это просто хороший совет на потом. Я собираюсь изменить это, чтобы включить фактический ответ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню