主数据的SQL数据类型,版本号格式

时间:2010-02-12 12:31:48

标签: sql-server-2005 types primary-key

我正在处理的表有一个主键,它本质上是一个版本号。以下是版本号的几个示例:

1.0.0.0
1.1.2.24

对我来说,varchar似乎是最明显的选择,但我希望将主键设置为聚簇索引 - 我已经在SQL性能站点上阅读过,由于分页问题,​​您应该避免在群集主键中使用varchars。

鉴于版本号的长度是可变的,因此该列最合适的数据类型是什么?

我正在处理的这个数据库正在运行SQL Server 2005。

感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

好吧,你总是可以使用四个INT字段 - MAJORMINORRELEASEBUILD - 这些是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)字段来解决您的问题。