Категории:
id название и т.п.
Характеристики
id | название | тип (чекбокс, список, текст, строка и т.п.) | варианты выбора, если есть, в каком-нить формате (json, к примеру)
Пример:
1 | Пол | list | [ «женский», «мужской» ]
2 | Цвет | list | [ «синий», «красный», «зеленый» ]
Это нужно для управления выводом формы редактирования/добавления товара какой-либо категории. В итоге у вас будет один и тот же код везде и не нужно заводить таблицу под каждую категорию отдельно. В данном случае ясно, что тип поля list, значит, это select либо группа радиобаттонов, к примеру. А варианты выбора распаковываются из json.
Товары
id | id категории | название…
Как я поняла, у вас товар попадает в одну категорию, значит, можно сделать один ко многим.
Связки:
id характеристики | id категории
Это чтобы было ясно какие поля для редактирования товара доступны в категории, и чтоб можно было привязать характеристику к нескольким категориям.
id товара | id характеристики | значение характеристики
Ну это понятно.
Таким образом, при добавлении категории юзер может сам добавить туда нужные характеристики (или выбрать из уже существующих) и сохранить. Ну а при добавлении товара в эту категорию отрисуется красивая формочка, где можно заполнить значения всех характеристик.