Разница в ключе (извините) между естественным первичным ключом и суррогатным первичным ключом заключается в том, что значение естественного ключа содержит информацию, а значение суррогатного ключа - нет.
Почему это важно? Что ж, естественный первичный ключ по определению гарантированно уникален, но его значение равно , а не , как правило, гарантируется, что он останется прежним. Когда он меняется, вы должны обновить его в нескольких местах.
Значение суррогатного ключа не имеет реального значения и просто служит для идентификации этой строки, поэтому его не нужно менять. Это особенность модели, а не самого домена.
Таким образом, единственное место, где я бы сказал, что суррогатный ключ не подходит, - это таблица ассоциаций, которая содержит только столбцы, ссылающиеся на строки в других таблицах (большинство отношений «многие ко многим»). Единственная информация, которую несет эта таблица, - это связь между двумя (или более) строками, и она уже состоит исключительно из значений суррогатного ключа. В этом случае я бы выбрал составной первичный ключ.
Если бы такая таблица имела семантику сумок или содержала дополнительную информацию об ассоциации, я бы добавил суррогатный ключ.