GUID(PK)&整数(唯一)VS整数(PK)& GUID(唯一)

时间:2018-03-14 08:07:50

标签: sql-server database foreign-keys primary-key guid

我们所处的环境中,在某些情况下,要求我们的数据库中的行具有GUID标识符(在应用程序中生成,而不是由DB生成。原因是因为我们处于分布式/微服务环境)。

目前GUID是主键。

这些表还有另一个整数(标识)标识符,它是唯一的并设置为聚簇索引。这是必需的,因为SQL服务器的默认设置是将PK作为聚簇索引,这对于GUID来说是不好的做法。

鉴于将始终存在GUID,并且始终存在唯一的整数标识符,是否存在将整数标识列作为PK的缺点,和GUID作为一个独特的列?

电流:

  • GUID(PK)
  • INT(Unique,Clustered)

建议:

  • INT(PK,Clustered Index(默认情况下))
  • GUID(唯一)

我已经阅读了一些关于使用GUID以及您需要注意的事项。一般而言,似乎存在“当前”(GUID PK,INT unqiue / clustered)的缺点。据我所知,这些将包括:

  • 性能
  • GUIDS上的外键/连接
  • 大型复合键
  • 大小(包含许多FK的表现在有许多GUID列)
  • 必须在SQL级别使用GUIDS(I.E.调试)
  • 非标准*

非标准的含义是,开发人员需要了解更多内容,并且在使用GUID方法时必须做/改变某些事情以确保其正常运行。

据我所知,在使用“Proposed”(INT PK,GUID唯一)方法时,你没有上述缺点,我很惊讶这不是一个更容易提出的解决方案,这导致我认为我可能会遗漏一些东西。

鉴于要求(总是有两种方法可以唯一标识行,GUID和INT),是否有任何理由说明不会将INT作为主键?

0 个答案:

没有答案