我正在处理的表有一个主键,它本质上是一个版本号。以下是版本号的几个示例:
1.0.0.0
1.1.2.24
对我来说,varchar似乎是最明显的选择,但我希望将主键设置为聚簇索引 - 我已经在SQL性能站点上阅读过,由于分页问题,您应该避免在群集主键中使用varchars。
鉴于版本号的长度是可变的,因此该列最合适的数据类型是什么?
我正在处理的这个数据库正在运行SQL Server 2005。
感谢您的帮助。
答案 0 :(得分:4)
好吧,你总是可以使用四个INT字段 - MAJOR
,MINOR
,RELEASE
和BUILD
- 这些是16个字节,就像GUID一样 - 也不错。
这种方法的唯一缺点是,如果需要在外键约束中引用此表,则通常必须连接所有四个表。
我不会使用VARCHAR - INT更好(通常更快)。此外,由于VARCHAR的可变性,事情可能会变得有点混乱(VARCHAR字段可能会增长并导致各种问题,而INT总是保持4个字节)。
另一个非常流行的选择是将这四个字段用于实际版本,并使用额外的代理VersionID INT IDENTITY
来获得最佳的群集密钥性能。
答案 1 :(得分:2)
您可以引入代理键(例如IDENTITY int值)并在版本号列上放置唯一约束。
或者可能是性能问题在您的情况下不是一个显着的开销,您可以将版本号保留为主键。
答案 2 :(得分:0)
格式要求有多严格?如果它必须是“1.0.0.0”那么你真的只有varchar和char作为选项---但这只是问题的开始(“1.0.0.10”将在“1.0.0.2”之前排序)
如果您可以强制使用固定大小,例如“001.000.000.010”,那么您可以使用char(15)字段来解决您的问题。