Это зависит от того, что вы пытаетесь оптимизировать. Таблица sale_product - намного лучший способ, если вам нужна гибкость и способность выполнять сложные запросы. Другой способ может подойти для нескольких сценариев, где производительность одного типа запроса действительно важна.
Если вы только начинаете, я бы сначала рассмотрел нормализованный дизайн, потому что другой дизайн преждевременная оптимизация. При разработке модели базы данных мне нравится думать о том, какие операции должна поддерживать база данных (как веб-интерфейс, так и отчетность), и , а затем проектировать модель.