您何时使用GUID作为主键?

时间:2009-05-22 09:35:52

标签: sql-server primary-key guid uuid microsoft-sync-framework

  

可能重复:
  Advantages and disadvantages of GUID / UUID database keys

在任何情况下,必须将GUID用作SQL Server 2005/8数据库中的主键。例如,使用MS Sync Framework强制执行此操作还是数据复制?

3 个答案:

答案 0 :(得分:16)

如果您需要通过复制同步多个数据库,则可以使用guids作为密钥。

使用guids的另一个原因是,如果您想在某个远程客户端上创建行,例如winforms应用程序,然后通过Web服务等将其提交给服务器。

如果你这样做,我强烈建议你确保根据一个非唯一的自动递增int指定你自己的聚集索引。将行插入到聚簇索引是guid的表中可能是一个相当大的开销。

更新:以下是如何设置这样的表的示例:

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插曲,谈论这值得倾听 - Show #447

答案 1 :(得分:3)

我使用GUID作为主键,因为在构建具有分布式数据库的应用程序和一个与来自所有分布式数据库的数据同步的中央数据库时,我不希望拥有复合主键。使用GUID,我确信(几乎*)当我将数据从所有数据库中提取到中央数据库时,我不会发生冲突(约束违规)。

*极不可能在两个不同的地方生成相同的GUID,但并非不可能。

答案 2 :(得分:2)

当数据库未集中或某些集合是远程执行时。