Подтвердить что ты не робот

Создание GUID

Я собираюсь использовать GUID в своем .net-приложении, которое использует SQL Server. Должен ли я записывать хранимую процедуру, которая генерирует GUID для каждой введенной записи или я должен непосредственно генерировать ее из приложения.

Причины для того, чтобы задать вопрос (если я ошибаюсь в этом):

I (как/pre) sume:

При генерации GUID из базы данных вы можете предположить, что БД запоминает предыдущий сгенерированный идентификатор GUID, где, поскольку приложение, запоминающее его, сложно.

4b9b3361

Ответ 1

В SQL Server создается встроенный GUID. Для этого нет необходимости писать отдельную хранимую процедуру.

Вы можете использовать

Ключевое различие между обеими процедурами будет заключаться в том, что последовательный GUID следует использовать, если он предназначен для основного кластеризованного ключа.

Я не уверен, почему вы хотите, чтобы механизм базы данных помнил предыдущий сгенерированный GUID.

Ответ 2

Нет, ваше предположение неверно: база данных ничего не помнит, поэтому нет никакой пользы от этой точки зрения.

Если вы используете GUID в качестве основного ключа/кластерного ключа в SQL Server, для начала это плохая идея (см. здесь, здесь или здесь, почему это так), вы должен не менее использовать newsequentialid() как ограничение по умолчанию для этого столбца.

CREATE TABLE YourTable(ColumnA uniqueidentifier DEFAULT NEWSEQUENTIALID()) 

Таким образом, база данных будет генерировать псевдо-последовательный GUID для вашего ПК и, таким образом, сделает негативные последствия использования GUID, поскольку PK/CK по меньшей мере терпимо....

Если вы не используете GUID в качестве основного ключа, то я действительно не вижу никакой пользы в создании этого GUID на сервере.

Ответ 3

Мое предпочтение заключается в создании GUID в приложении, а не в db.

Ответ 4

RFC4122 1: "Не предполагайте, что UUID трудно догадаться; они не должны использоваться в качестве возможностей безопасности (например, идентификаторы, чье личное владение предоставляет доступ). Предсказуемый источник случайных чисел усугубит ситуацию".

В простой задаче инкрементный uint64 лучше.

НЕ ИСПОЛЬЗУЙТЕ GUID! Если нужна безопасность.

http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/b37b3438-90f4-41fb-adb9-3ddba16fe07c