Естественные и искусственные первичные ключи - это одна из тех проблем, которая широко обсуждается, и ИМХО, похоже, обсуждение только укрепляет позиции.
По моему мнению, оба работают, пока разработчик знает, как избежать недостатков обоих. Естественный первичный ключ (будь то составной или одиночный столбец) почти гарантирует, что повторяющиеся строки не будут добавлены в БД. В то время как с искусственными первичными ключами необходимо сначала проверить, что запись уникальна (в отличие от первичного ключа, который, будучи искусственным, всегда будет уникальным). Одним из эффективных способов достижения этого является наличие уникального индекса или индекса кандидата в полях, которые делают запись уникальной (например, в полях, которые делают кандидата в первичный ключ)
Между тем искусственный первичный ключ облегчает соединение. Отношения могут быть сделаны с одним полем к единственному соединению поля. С помощью составного ключа составитель оператора SQL должен знать, сколько полей нужно включить в объединение.