Модель с дополнительными столбцами на основе модели - PullRequest
0 голосов
/ 27 марта 2011

Я строю базу данных продуктов. Каждый товар относится к категории. Там могут быть только продукты в подкатегориях. У каждого товара есть атрибуты, такие как имя, номер_анары, цена, ширина, высота, глубина, вес и т. Д. Но есть некоторые пользовательские атрибуты, основанные на категории! Как energy_class, number_of_programs, sound_volume и т. Д.! Я говорю о чем-то вроде этого:

Category
  |
  |--Category <- This Category have extra information about extra attributes for Products
  |    |
  |    |--Category
  |         |
  |         |--Product
  |         |
  |         |--Product
  |
  |--Category <- This Category have extra information about extra attributes for Products
       |
       |--Category
       |    |
       |    |--Product
       |    |
       |    |--Product
       |
       |--Category
            |
            |--Product
            |
            |--Product

Я не уверен, как его построить. Мне нужна база данных для категорий и продуктов. Но тогда категории нужно знать, какие дополнительные атрибуты добавить в товар. Так что, возможно, мне нужно сделать таблицу для extra_attributes? И затем сделать связь has_many между категорией и extra_attributes? Но тогда продукт должен знать и об этой ассоциации! Может быть, я думаю в совершенно неправильном направлении ...! Может быть, я должен сделать разные типы продуктов? Я надеюсь, что вы можете вести меня !!

1 Ответ

0 голосов
/ 27 марта 2011

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

Например:

Продукт

NamedProduct <Продукт (определяет проверки на: имя) </p>

ByWeightNamedProduct

ColorProduct <Продукт (определяет валидации на: цвет) </p>

CoolColorProduct

...