У амазона и таобао (алиэкспресс) структура примерно следующая (по крайней мере они так отдают в апи).
Дока АмазонаПример данных о товаре АмазонПример данных о товаре Таобао
Есть основной товар. Обычно у него нет никаких характеристик, но есть цена, скидка, картинки, описание и т.п.
Товар входит в одну или более категорий. Если категорий больше одной, то есть одна основная.
Основной товар может иметь список дочерних товаров. Все товары, как основные, так и дочерние имеют идентификаторы, разница только в ссылке на родителя -- основной товар амазона ссылается сам на себя.
У таобао нет дочерних товаров, все варианты комбинаций характеристик (SKU, OtapiConfiguredItem в примере) описываются внутри основного товара.
В результате у амазона все варианты товара независимы (имеют разные урлы), у таобао все привязано к одному товару (и урлу).
У таобао всегда у товара один магазин. У амазона их может быть несколько, и у каждого соответственно свои цены, скидки и способы доставки.
В общем очевидно, что виды характеристик лучше хранить отдельно (хотя можно денормализировать). Так вы получаете возможность работать с ними комплексно (например вы легко сможете видеть все возможные варианты для каждого вида). Вероятно то же самое стоит сделать и с вариантами этих характеристик.
Не пытайтесь sku или характеристики хранить json'ом )).
Так же большой вопрос, меняется ли у вас название товара или описание, свойства, картинки и т.п. в зависимости от набора характеристик (так раньше было у dx.com).
Важно также понять, товар у вас всегда в одной категории или может быть в нескольких одновременно.
Так же подумайте о скидках. Обычно у них бывает ограниченное время действия. Они могут быть на группу товаров. У них могут быть разные условия, например скидка выдается только при выполнении определенных условий. По этой причине я бы хранил скидки отдельно от товара.
Я бы старался держать таблицу с товарами маленькой (в смысле количества колонок и их объема). Вообще проще оперировать маленькими объемами данных, чем пытаться что-то отфильтровать в огромной таблице с кучей индексов и полей.
Статистику по товарам тоже храните отдельно. Описание, если оно большое, храните отдельно. Если у каждого товара большое количество изображений, возможно их тоже стоит хранить отдельно.