Зависит от перегруженности ресурса.
— Если до пары тысяч посетителей в день, то Вам нужен «классический» вариант:
+ Таблица «Коктели»: id, название, ссылка на изображение, описание.
+ Таблица «Ингредиенты»: id, название, ссылка на изображение, описание.
+ Таблица «Состав»: id, id_коктеля, id_индигриента, количество.
— Если нагрузка больше, чем в первом случае, то советую, либо активно использовать кэширование (если это возможно), либо к первому варианту добавить таблицу промежуточных результатов (например, с сериализованными выборками по ингредиентам или вообще полными данными по коктелям) и создать функции формирующие их.