Как правильно спроектировать базу?

Здравствуйте.

Необходимо создать каталог товаров в приложении на Rails. Каждый товар принадлежит определенной категории (например, автомобили, компьютеры и т.п.). Товары в каждой категории имеют общие характеристики, которые нужно выводить в описании товаров. Например, для автомобилей нужно выводить информацию о пробеге, коробке передач и т.п., а для компьютеров - характеристики железа (RAM, CPU и т.п.). То есть товары в каждой категории будут иметь свои уникальные характеристики (возможно иногда они будут похожими).

На данный момент я вижу 2 варианта:
1) Создать 1 таблицу с большим количеством полей, чтобы охватить все категории.
2) Создать отдельную таблицу для каждой категории.

Подскажите как правильно спроектировать структуру таблиц в БД + модели в Ruby On Rails (или другом ЯП).

Спасибо
  • Вопрос задан
  • 682 просмотра
Пригласить эксперта
Ответы на вопрос 5
sim3x
@sim3x
https://en.wikipedia.org/wiki/Entity%E2%80%93attri...

БД проектируется для проекта, а не для фреймворка
Ответ написан
@ComodoHacker
Я бы создал одну таблицу для общих атрибутов и дополнительные для уникальных атрибутов каждой категории.

Модель EAV не подойдет, потому что вам скорее всего нужно будет реализовать сложные фильтры по атрибутам. В модели EAV это будет сложно, да и работать будет небыстро.
Ответ написан
Комментировать
@chronic86
Ruby on Rails junior
computers.gif
картинка нагло стырена с www.sql-tutorial.ru
что то вроде этого вам подойдет....
делать одну большую таблицу? это не ваш случай так как будет много пустых полей.. например для автомобиля будут пустые поля в столбцах RAM и т.д.
Ответ написан
Комментировать
@Renius
дурак восторженный
Если я правильно понял вашу проблему:
1) вы хотите форму заполнения характеристик товара, когда форма соотвествует категории товара
2) вы хотите форму демонстрации товара в виде соотвествущем категории
тогда:
product
  • category_id #/categories_ids/habtm как угодно
  • has_many specifications
  • has_many categories
categories
structure#
hash: { 
title: 'вес', measure: 'кг', ....
title: 'CPU', mesure: 'false' #вроде вы будете писать характеристику? просто строкой
title: 'люк', behavior: radio_button, values: %w(есть нет)
# ипт, можно любым образом организовать

Тоесть структуру данных категории товара можно(я бы) хранить в самой категории.
С таким видом категории вы будете знать, как строить форму и как показывать з товар.

specification
  • product_id
  • title #вес
  • measure #кг
  • value # 100
  • behavior: integer #/string/radio/checkox etc как угодно
specification
  • roduct_id
  • title: люк
  • measure
  • value: true
  • behavior: radio/checkbox итп
Ответ написан
Комментировать
@anasasiakiri4enko
Предложу своё решение:
rails g model title:string about:text category:string img:string

Одна общая база для всех товаров, просто при создании товара в базу отправлять категорию нужных Вам вариантов (в форме отправки просто добавить обычный хелпер select ['first category, 'second category]). К примеру на странице all items, показывать все товары. А если нужно отсортировать по категориям то создайте новый контроллер и тяните в нем все товары нужной вам категории.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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