Когда вы будете использовать GUID в качестве первичных ключей?[дубликат]

StackOverflow https://stackoverflow.com/questions/897083

Вопрос

Возможный дубликат:
Преимущества и недостатки ключей базы данных 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 будет сгенерирован в двух разных местах, но не невозможно.

Когда база данных не централизована или часть сбора данных выполняется удаленно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top