обычно используют many to many связь между заказом и товаром как выше написали про order и order_item.
для оптимизации можно эту связь развернуть в плоскую таблицу, но тогда получаем некоторое нарушение связности данных.
А вообще — в БД можно держать данные в нормализованном виде, а в кешах держать развёрнутую таблицу, для быстрого поиска, но тут опять накладные расходы на генерацию этой таблицы при изменениях и поддержание актуальности данных в кешах и БД.
Ну или нафиг отказаться от sql и посмотреть в сторону nosql БД.
Я считаю недалёкими людьми всех(плюсовиков в частности), кто не знает ничего помимо любимого инструмента.
Нижеследует ИМХО:
среди плюсовиков таких вот «несталкивающихся» замечено много и плюсы они пихают куда ни попадя, хотя на жаве или шарпе то же самое написать быстрее и проще, пусть и ресурсов жрать будет втрое больше(утрируя).
Сишникам это знать тоже полезно, но они сами приходят к пониманию этого, например при написании гуя.
Функциональщики — люди с подвывертом и обычно про C# или java знают вполне адекватно.
И да, я C++ очень не люблю, но в случае, когда он оправдан, я его буду использовать.