Не являются взаимоисключающими. Оба часто используются при масштабировании массивных наборов данных, но один на самом деле не имеет ничего общего с другим. У вас может быть абсолютно нормализованная база данных ... или ненормализованная база данных без правил.
В шардинге вы просто берете данную схему (нормализованную или нет) и распределяете ее по множеству физических / логических хранилищ данных. Это позволяет, например, иметь всех ваших пользователей с определенной характеристикой (например, фамилия в «A-D») для использования в данном экземпляре базы данных. Обратите внимание, что КАК вы осколите свою базу данных, это решающее решение, и оно будет сильно зависеть от реализации.
Денормализация, с другой стороны, может выполняться с изолированной базой данных или без нее и предназначена для простых запросов путем сокращения соединений / подзапросов, необходимых для ответа на конкретный вопрос. Конечно, тогда вы обычно программно поддерживаете целостность данных.
Немного хорошего чтения:
Теория и практика шардинга
Некоторые реализации хорошо масштабируемой базы данных «в дикой природе»