По вашему описанию кажется, что Продукт является членом одной или нескольких Групп Продуктов, и эти Группы Продуктов могут иметь параметры, применимые ко всем продуктам в них.
Таким образом, я бы добавил таблицу ProductGroup, добавил таблицу отношений ProductGroupOptions, чтобы вы могли применить опцию к ProductGroup, и таблицу отношений ProductGroupProduct, чтобы вы могли определить, какие продукты входят в какие группы продуктов.
например. Cake X входит в группу товаров «Торты», которые могут иметь вкус A, B, C
Возможно, вам также необходимо сгруппировать ProductOptions, чтобы можно было применить набор параметров продукта к ProductGroup или Product как к пакету.
например. Cake X является членом группы продуктов "Cakes", которая использует группу продуктов ProductOptionsGlavors "Flavors", которая включает в себя "A", "B", "C".
Вам нужно будет решить, разрешить ли также прямые негруппированные отношения между Продуктами и разновидностями или же на самом деле проще сказать, что все взаимодействия теперь происходят через группы, и если вам нужен один продукт -> Дополнительное соединение, вы просто создайте группу для каждого и примите, что у нее есть только один участник.
В общем, тогда у вас будет что-то вроде: -
Продукт принадлежит одной или нескольким группам продуктов
ProductOption принадлежит одной или нескольким группам ProductOption
ProductGroups имеет много-много связей с ProductOptionGroups
Так что в LINQ вы можете просто сделать что-то вроде Product.ProductGroups.SelectMany(gp => gp.ProductOptionGroups.SelectMany(pog => pog.ProductOptions))
, чтобы получить все опции для данного продукта.