Я недавно создал сайт, который имел эти ограничения.Короче говоря, вы захотите провести различие между «продуктами» и «группами продуктов».Думайте об этом как об управлении самыми дискретными блоками данных.В действительности, рубашка среднего размера на самом деле отличается от рубашки большого размера ... вдвойне, если у вас есть цены, которые основаны на этих качествах (это становится более реалистичным, если вы рассматриваете узоры или цвета ткани).
Так или иначе, если у вас есть таблица «groups», таблица «product_groups» и таблица «products», вы можете сохранить все эти идеи различными.В вашей таблице товаров вы можете иметь столбцы для «размера» и «цвета» (и любые другие отличительные свойства, которые вы можете придумать) и столбец для «цены».Кроме того, вы можете пойти еще более жестко и создать отдельные таблицы цен, которые соответствуют ценам на уникальные продукты (это было бы особенно полезно, если вы хотите отслеживать исторические цены и скидки).
Тогда в вашей корзине выможно просто прикрепить product_ids к cart_ids и выполнить пару объединений, чтобы определить, к какой «группе» относится этот продукт, какие изображения находятся в этой группе (или существуют для этого продукта) и т. д.Это не простая проблема, но следование этой мысли должно помочь вам выбрать правильный путь.
И последнее замечание: отслеживание уникальных продуктов, подобных этому, также значительно упрощает учет запасов.