Как правильно организовать хранение продуктов для доски объявлений?

Доброго времени суток. Есть задача сделать доску объявлений.

Есть категории:
  1. Авто
  2. Квартиры
  3. Телефоны
  4. И т.д...


Суть в том что у продуктов могут быть свои характеристики. Например у квартир есть площадь, а у телефонов нет. Или, допустим, у авто есть свойство объем двигателя, тип кузова.

Как правильно организовать хранение продуктов и категорий в базе?

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

Если у кого есть мысли, направьте на правильный путь
  • Вопрос задан
  • 55 просмотров
Пригласить эксперта
Ответы на вопрос 3
Eridani
@Eridani
Мимо проходил
Есть категории, есть таблица со всеми характеристиками, где у каждой характеристики проставлен родительский ID категории.
Ответ написан
ThunderCat
@ThunderCat Куратор тега MySQL
{PHP, MySql, HTML, JS, CSS} developer
Вариантов реализации просто неисчислимое множество, все они имеют свои плюсы и минусы, в зависимости от того что и с чем вы будете комбинировать. Конечно, наихудший вариант - одна таблица со всеми свойствами, вам нужно смотреть в сторону решений с максимальной нормализацией (смотрите материал по нормальным формам бд), и создав схему с нормальной формой, уже в нужных местах произвести денормализацию, необходимую для какого-либо особого функционала.
Проще говоря - (почти)все свойства объявлений должны храниться отдельно от записей объявления, и связываться через промежуточную таблицу по ключам. то же относится и к свойствам пользователей.
Ответ написан
Комментировать
usdglander
@usdglander
Yipee-ki-yay
1. Создаёте таблицу с общими полями для продукта. + поле type
2. На каждый тип продукта создаёте таблицу с полями ТОЛЬКО для этого типа продукта.
3. В зависимости от значения поля type делаете JOIN той или иной таблицы в запросе.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы