我有一个关于Sql Server 2005数据库的表。 表的主键字段是代码编号。
作为标准,代码必须包含4位数字。例如:1234,7834,......
在有效选择操作方面,您是否建议字段类型为char(4)或int或numeric(4)。 对任何类型的表进行索引会与其他类型不同吗?
答案 0 :(得分:1)
我提倡SMALLINT专栏。只是因为它是最合理的数据类型,适合所需的范围(最多65535,超过4位)。使用检查约束强制执行4位数限制,使用COMPUTED列返回char(4)列。
答案 1 :(得分:1)
由于多种原因,整数/标识列通常用于数据库表中的主键。主键列必须是唯一的,不应该是可更新的,并且实际上应该没有意义。这使得标识列成为一个非常好的选择,因为服务器将为您获取下一个值,它们必须是唯一的,并且整数相对较小且可用(与GUID相比)。
一些数据库架构师会争辩说其他数据类型应该用于主键值,并且双方都可以令人信服地论证“无意义”和“不可更新”的标准。无论如何,整数/标识字段非常方便,许多数据库设计者发现它们为引用完整性提供了合适的键值。
希望这会对你有帮助!
答案 2 :(得分:0)
如果我没记错的话,整数占用的内存少于字符,所以你应该选择int。
这两个链接说的相同:
http://www.eggheadcafe.com/software/aspnet/31759030/varcharschars-vs-intbigint-as-keys.aspx
http://sql-server-performance.com/Community/forums/p/16020/94489.aspx
答案 3 :(得分:0)
“这取决于”
在 this 的情况下,char(4)捕获正确存储的数据,没有存储开销(每个4个字节)。 0001
当然与1
不同。
如果你有非数字数字,你确实有一些处理校对等的开销,但对于合理大小的数据库来说无关紧要。使用4位数代码,您可以获得行数的上限,尤其是数字(10k)。
如果新代码没有严格增加,则会出现与GUID群集密钥相关联的页面拆分问题
如果它们严格增加,则使用int并添加计算列以添加前导零