Приветствую вас.
В общем, есть продукт. Пусть это будут слоны. Как завести один конкретный продукт — дело понятное:
table.products:
----
- id (PK)
- name
- desc
- category_id > FK
- brand_id > FK
- ...
А вот вот когда появляются варианты, то появляется сложность — не могу выбрать вариант. То ли в одной таблице все хранить, то ли разделять на две и более. Рассмотрим два варианта. Предположим, что появляются варианты слонов: розовые и синие. Для справки: могут быть и единичные, весьма конкретные продукты без вариантов. К примеру, просто какие-то там слоны. Сначала был просто один слон, но потом завезли разных слонов или появилась необходимость разделить их на конкретных слонов.
Вариант 1: одна таблица для всех слонов.
table.products:
----
- id (PK)
- name
- desc
- category_id > FK
- brand_id > FK
+ parent_id > self.PK (NULL | int)
+ is_parent (BOOLEAN)
- ...
Вариант 2: две таблицы для слонов и их вариантов
table.products
----
- id
- name
- desc
- category_id > FK
- brand_id > FK
- ...
table.product_variants
----
- id
- parent_id > FK.table.products.id
- name
- desc
- ...
У продуктов будут еще и общие характеристики в таблице product_attribute_values. К примеру, если у родительского продукта есть заполненные поля каких-либо характеристик, то они будут такими же и у «вариантов» продукта, если не определены в конкретном варианте продукта.
Помогите определиться с выбором и если знаете лучшие практики по этой ситуации, буду признателен за ваши рекомендации.