Вам не нужно использовать автоинкрементные первичные ключи, но я использую. И вот почему.
Во-первых, если вы используете int, они меньше, чем UUID.
Во-вторых, гораздо проще выполнять запросы с использованием целых, чем UUID, особенно если ваши первичные ключи отображаются как внешние ключи в других таблицах.
Также рассмотрите код, который вы напишите на любом уровне доступа к данным. Многие из моих конструкторов принимают один идентификатор как int. Он чистый, и на языке, безопасном для типов, таком как C #, любые проблемы обнаруживаются во время компиляции.
Недостатки автоинкрементаторов? Потенциально не хватает места. У меня есть таблица, которая на данный момент находится на 200M в поле id. Если я уйду, как есть, это приведет к нарушению 2-миллиардного лимита в год.
Вы также можете утверждать, что автоинкрементный идентификатор не имеет внутреннего значения, но то же самое верно и для UUID.