在主键的情况下哪个更好bigint或nvarchar

时间:2014-02-26 06:06:13

标签: sql sql-server database-design key sql-types

我需要表总线的主键,它存储信息,如总线号,总线类型,注册号等。我们知道总线号本身是唯一的,可以是主键但它的数据类型字符串表格中的减慢搜索,所以另一种可能的解决方案是添加int类型的自动增量字段,但这会增加网络数据,因为每次我需要选择两者用于winform上的用户选择的总线号和总线ID(自动递增)。我需要知道哪种方法更好,还是有更好的方法。

表格式方法1

bus no - nvarchar(10) (primary key)
bus registartion no - nvarchar(10)

方法2

Bus id - int (autoincremnted) (primary key)
Bus no - nvarchar(10)
bus registartion no - nvarchar(10)

1 个答案:

答案 0 :(得分:0)

  • 数字 - 非空 - 列始终是数据库表上主键的最佳选项。数据库引擎可以以最有效的方式存储,索引和查找它们。
  • 不介意网络流量开销。只是不要在结果集中查询不需要的列。避免使用SELECT *语句。
  • 如果需要,可以在SELECT或客户端程序中轻松完成类型转换(例如Integer to String)。

对数据库建模时,最好事先将主键列添加到每个表中,即使您觉得不需要它也是如此。为主键列提供标准化名称(tablename +'id'是一种常见的命名约定)并键入(integer,uniqueidentifier)并坚持使用它。不要混合整数,长整数,短数据和其他数据类型,因为它只会使表的连接变得复杂。

E.g。为您的实体总线:

  • 表名是Bus
  • 主键名称为BusId
  • 主键类型为Int