Отредактировано после прочтения ответа Франса Бума, так как мой ответ принят и, следовательно, перемещен наверх. Спасибо, Франс.
GUID действительно имеют уникальную ценность, однако из-за их сложной природы они не очень удобочитаемы, что может затруднить поддержку. Если вы собираетесь использовать GUID, вы можете подумать о том, чтобы выполнить некоторый анализ производительности операций с большими объемами данных, прежде чем сделать свой выбор. Примите во внимание, что если ваш первичный ключ «кластеризован», то GUID не подходит.
Это связано с тем, что кластеризованный индекс приводит к физическому переупорядочению строк в таблице при вставках / обновлениях. Поскольку идентификаторы GUID являются случайными, для каждой вставки потребуется перемещение фактических строк в таблице, чтобы освободить место для новой строки.
Лично мне нравится иметь два "ключа" в моих данных:
1) Первичный ключ
Уникальные числовые значения с кластеризованным первичным ключом. Это внутренний идентификатор моей системы для каждой строки, который используется для уникальной идентификации строки и внешних ключей.
Удостоверение может вызвать проблемы, если вы используете репликацию базы данных (SQL Server автоматически добавит столбец "rowguid" для таблиц с репликацией слиянием), поскольку начальное число идентификаторов сохраняется для каждого экземпляра сервера, и вы получите дубликаты.
2) Внешний ключ / Внешний идентификатор / Бизнес-идентификатор
Часто также предпочтительно иметь дополнительную концепцию «внешнего идентификатора». Это часто символьное поле с уникальным ограничением (возможно, включающее другой столбец, например, идентификатор клиента).
Это будет значение, используемое внешними интерфейсами, и будет доступно клиентам (которые не распознают ваши внутренние ценности). Этот «бизнес-идентификатор» позволяет клиентам ссылаться на ваши данные, используя значения, которые что-то для них значат.