Это вопрос выбора на самом деле, и этот вопрос может вызвать основанные на мнении ответы с моей точки зрения.Что я всегда делаю, даже если это избыточно, я создаю первичный ключ в столбце автоинкремента (я называю это техническим ключом), чтобы он оставался согласованным в базе данных, позволяя изменить «первичный ключ» в случае, если что-то пошло не так на этапе проектирования, итакже позволяет сэкономить меньше места в случае, если на ключ указывается ограничением внешнего ключа в любой другой таблице, а также я делаю ключ-кандидат уникальным, а не нулевым.
Технический ключ - это то, что вам не нужнообычно показывают конечным пользователям, если вы не решите.Это может быть то же самое для других технических столбцов, которые вы храните только на уровне базы данных для любых целей, которые вам могут понадобиться, например, изменить дату, создать дату, версию, пользователя, который изменил запись и т. Д.
В этом случаеЯ бы пошел на ваш второй вариант, но слегка измененный:
CREATE TABLE users(
pk INT NOT NULL AUTO_INCREMENT,
id UUID NOT NULL,
.....
PRIMARY KEY(pk),
UNIQUE(id)
);