На практике встречался с двумя вариантами реализаций:
1. На сайте с мерсами.
Особенность в том, что опции (читай "характеристики") летели из 1С и там менеджеры то лишний символ пробела поставят, то точку, то вообще букву забудут дописать.
Из-за этого хранить "готовый" список в таблице и тягать его через тот же пивот было глупой идеей, поэтому мы реализовали связь один-ко-многим.
2. На другом сайте, CRM, есть чётко предоставленный список характеристик товаров, управляемый строго через CRM.
В этом случае реализована пивот-связь, где доп данные типа цены и количества хранятся в пивот-таблице.
Сделано так потому, что у нас есть несколько складов и у каждого своё количество товара и цена.
Так что всё зависит от того, как эти данные будут прилетать, в каком виде, как будут редактироваться и т.д., а также следует учитывать будет ли меняться эта система в будущем.
Исходя из этого нужно выбрать вариант с наименьшими затратами.