Создать Guid PK в базе данных VS.в коде - PullRequest
0 голосов
/ 13 марта 2012

Что «лучше» генерировать первичные ключи в базе данных или генерировать их в коде приложения, особенно при использовании типа данных GUID / UniqueIdentifier для ключей.

Я прочитал о разнице между использованием типов данных Guid и int, и похоже, что Guids осуществимы для так называемой "генерации в автономном режиме".

* 1005 Е.Г. *

вместо NEWID() contstraint в базе данных. В одном проекте (где мы используем Entity Framework) мы используем в коде приложения Guid.NewGuid() для генерации PK при вставке данных.

Это плохой подход?

Мои опасения:

  • Индексы базы данных: производительность базы данных, поскольку идентификаторы могут быть не последовательными
  • Вероятность того, что ключ уже используется, составляет 64 миллиарда. (учитывая, что приложение не будет огромным, но может потребоваться пространство для роста)
  • Возможно, есть и другие недостатки?

1 Ответ

1 голос
/ 13 марта 2012

на самом деле, GUID может быть последовательным из SQL Server 2005. Здесь есть функция с именем NEWSEQUENTIALID(), ссылка здесь

Создает GUID, который больше любогоGUID, ранее созданный этой функцией на указанном компьютере с момента запуска Windows.После перезапуска Windows GUID может начаться снова с более низкого диапазона, но все еще остается глобально уникальным.Когда в качестве идентификатора строки используется столбец GUID, использование NEWSEQUENTIALID может быть быстрее, чем использование функции NEWID.Это связано с тем, что функция NEWID вызывает случайную активность и использует меньше страниц кэшированных данных.Использование NEWSEQUENTIALID также помогает полностью заполнить страницы данных и индекса.

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