Я изучал использование идентификаторов GUID в качестве первичных ключей в базах данных. Пока что плюсы перевешивают минусы. Однако я вижу один момент, когда GUID может быть не тем, что я хочу.
В моем приложении пользователи должны иметь возможность идентифицировать объекты на основе удобного идентификатора. Так, например, если они хотят получить конкретный продукт без ввода полного имени, они могут использовать идентификатор продукта. GUID не так легко запомнить для чего-то подобного.
Решением, о котором я думал, является использование как GUID, так и целого числа с автоинкрементом. GUID был бы первичным ключом строки, в то время как автоматически увеличивающееся целое число было бы индексом, используемым функциями фильтрации приложения. Однако все операторы SQL SELECT, UPDATE, DELETE будут использовать GUID.
Основная причина, по которой я хочу использовать GUID, заключается в предотвращении конфликтов при объединении двух баз данных. Если база данных № 1 и база данных № 2 имеют продукт № 2, сценарию импортера придется изменить идентификатор и все внешние ключи, ссылающиеся на него. С GUID мне нужно всего лишь изменить удобный для пользователя идентификатор в самой таблице, в то время как внешние ключи будут использовать GUID, уникальный для каждой импортированной записи, и поэтому будут работать без изменений.
Итак, мой вопрос: есть ли серьезные проблемы (помимо размера поля GUID и легкой фрагментации страницы) с наличием целочисленного индекса с автоинкрементом и первичного ключа GUID?