Когда вы будете использовать GUID в качестве первичных ключей?[дубликат]
-
23-08-2019 - |
Вопрос
Возможный дубликат:
Преимущества и недостатки ключей базы данных GUID/UUID
Существуют ли обстоятельства, при которых необходимо использовать GUID в качестве первичных ключей в базе данных SQL Server 2005/8.Например, требует ли это использование MS Sync Framework или репликации данных?
Решение
Вы можете использовать guid в качестве ключа, если вам нужна синхронизация нескольких баз данных посредством репликации.
Другая причина использовать направляющие — если вы хотите создать строки на каком-то удаленном клиенте, например, в приложении winforms, а затем отправить их на сервер через веб-службы и т. д.
Если вы сделаете это, я настоятельно рекомендую вам убедиться, что вы указали свой собственный кластерный индекс на основе автоматического увеличения целого числа, которое не является уникальным.Вставка строк в таблицу, где кластеризованный индекс является направляющим, может потребовать значительных затрат.
Обновлять:Вот пример того, как настроить такую таблицу:
CREATE TABLE [dbo].[myTable](
[intId] [int] IDENTITY(1,1) NOT NULL,
[realGuidId] [uniqueidentifier] NOT NULL,
[someData] [varchar](50) NULL,
CONSTRAINT [PK_myTable] UNIQUE NONCLUSTERED
(
[realGuidId] ASC
)
)
CREATE CLUSTERED INDEX [IX_myTable] ON [dbo].[myTable]
(
[intId] ASC
)
Вы можете вставить в таблицу как обычно, например:
INSERT INTO myTable VALUES(NEWID(), 'Some useful data goes here')
Обновлять:Я слушал действительно хороший выпуск dotnetrocks, в котором об этом говорится, его стоит послушать - Показать № 447
Другие советы
Я использую GUID в качестве первичных ключей, поскольку не хочу иметь составные первичные ключи при создании приложений с распределенными базами данных и одной центральной базой данных, которая синхронизируется с данными из всех распределенных баз данных.С GUID я уверен (почти*), что у меня не возникнет конфликта (нарушения ограничений), когда я перетащу данные из всех БД в центральную.
* крайне маловероятно, что один и тот же GUID будет сгенерирован в двух разных местах, но не невозможно.
Когда база данных не централизована или часть сбора данных выполняется удаленно.