为什么ASP.NET Identity 2.0使用GUID/字符串作为用户id?

正如标题所说,我想知道为什么ASP.NET Identity 2.0使用带有GUID的字符串作为用户表的主聚集键。这对整数id有什么好处吗?我只看到了一个问题,GUID不是聚集索引的最佳选择

我是否遗漏了什么,或者整数仍然是更好的选择

关于guid的使用,有一种观点提倡使用没有“意义”的ID,以便将标识符与其周围的数据完全分离;此id不应在数据存储外部可见。如果我们看一下代理键的一些特征,我们有以下几点

  • 该值在整个系统范围内是唯一的,因此从不重复使用
  • 该值由系统生成
  • 用户或应用程序无法操作该值
  • 该值不包含语义含义
  • 该值对用户或应用程序不可见
  • 该值不是由来自不同域的多个值组成的

因此guid符合要求,因为它确实是由系统生成的,并且与域没有关系。我认为guid的使用主要是这种特殊思维方式的趋势问题;但是,由于他们引入了一种新的“可扩展主键”机制,因此可以更改密钥,因此您可以在PK中使用整数


关于性能,我会向您指出这条线索,其中公认的答案是:

guid似乎是主键的自然选择,如果
你真的必须,你可能会争论把它用于初选
表的键。我强烈建议不要使用
GUID列作为群集键,默认情况下SQL Server会这样做,
除非你明确告诉它不要

您确实需要将两个问题分开:

  • 主键是一个逻辑结构—唯一且可靠地标识表中每一行的候选键之一。这
    可以是任何东西,真的-一个INT,一个GUID,一个字符串-选择什么使
    最适合您的场景
  • 集群键(表上定义“集群索引”的一列或多列)-这是与物理存储相关的
    在这里,一个小的、稳定的、不断增加的数据类型是您的
    最好选择-INT或BIGINT作为默认选项

这完全证实了你的印象

发表评论