Заметил, что в некоторых проектах (в .NET стеке) в качестве идентификатора строки в БД используется не целочисленный тип, а GUID. Есть ли преимущества у такого подхода?
Тип поля ID для хранения в реляционной базе - long/int или GUID?
Лучший ответ:
Использование в качестве PK столбца типа GUID имеет как достоинства, так и недостатки. Вы же изначально настроены услышать только про достоинства ;).
Использование Global Unique ID имеет смысл, когда проектируется распределенная информационная система и запись может "кочевать" из одной БД в другую. В этом случае никаких проблем с пересечением PK не возникнет, поскольку подразумевается, что GUID уникален во всей Вселенной. Справедливости ради надо заметить, что такое решение не единственной из возможных. При использовании штатных методов репликации MSSQL (с этой СУБД я знаком лучше всего), использование столбца типа GUID - фактически обязательное требование.
К недостаткам использования GUID можно отнести случайный характер их генерации, что приводит к фрагментации индексов по таким столбцам, а как известно PK всегда поддерживаются индексами (не считая экзотических СУБД). Для СУБД MSSQL и прочих, поддерживающих кластерные индексы (например, IOT в Oracle), может стать проблемой для нагруженных OLTP-систем. Хотя эта проблема вполне разрешима, в MSSQL есть newsequentialid(). Но лично я предпочитаю старые добрые нумерованные ID. Избежать пересечения PK можно и другими способами.
Новые ответы
Использование GUID удобно ещё и тем что ты в программе сразу задаешь ID и можешь его использовать, а уже затем всё "кучей" сохранить. При ID типа long, придёться крутиться с ID типа -1, или сразу сохранять сущность и получать id
А зачем сохранять "кучей"? Batch updates - штука известная, но ограниченная по применению. Обычно при работе с БД оператор заносит одну сущность, но не "пачками".
Во-первых, не все же приложения являются АРМ для операторов, которые заносят по одной записи в БД. Во-вторых, не все сохраняют данные в БД с помощью DataSet (Batch Updates).
А причем тут DataSet'ы? Я про сохранение коллекций "пачками". Просто вспомнился термин batch updates. Лично мне генерация PK на клиенте не кажется клевым решением. Считай, что причины религиозного плана. :)
Ну понятно. Я подумал про метод датасета. Ничего, кстати, против не имею генерации ключей в БД.