Gra*_*ett 12 sql database-design
我正在使用旧的SQL Server 2000数据库,将其中的一些信息与我正在构建的新应用程序混合.我注意到几个表中的一些主键是浮点数而不是任何类型的整数.它们不是外键,而且都是独一无二的.我想不出任何人会想让他们唯一的主键ID浮动,但我不是任何SQL专家.所以我想我所问的是,设计这个相当广泛的数据库的人是否知道我不知道的事情?
我曾与在SQL Server数据库中使用浮动作为PK的人一起工作.如果他坚持使用INT,他担心标识符用完了.(在SQL Server上32位.)他只是看了浮动的范围,并没有想到这个事实没关系,对于较大的数字,由于精度有限,数字中没有数字.因此,他接受MAX(PK)+ 1.0的代码会在某个时刻返回一个等于MAX(PK)的数字.不好.我终于说服他不要使用float代替未来数据库的代理主键.他在修复他正在处理的数据库之前就辞职了.
要回答你的问题,"所以我想我所问的是,设计这个相当广泛的数据库的人是否知道我不知道的事情?" 很可能没有!至少不是选择数据类型.
我目前正在使用一个相当大的会计软件包,其中350多个表中的每一个都有FLOAT的主键(53).所有实际值都是整数,系统严格检查它们确实是(有特殊函数可以完成所有递增工作).
我确实对这个设计感到好奇,但我能理解它为什么被选中并给它一些学分.一方面,系统足够大,在某些表中有十亿条记录.另一方面,这些主键必须能够从Excel或VB6等外部应用程序中轻松读取,在这种情况下,您并不想让它们成为BIGINT.
因此,漂浮是好的.
浮点数有一个有趣的属性:总是可以在两个其他值之间插入一个值,除了用完比特的病态情况.它的缺点是代表性问题可能使您无法通过密钥引用行; 很难使两个浮点值彼此相等.