【问题标题】:Which is better bigint or nvarchar in case of primary key在主键的情况下哪个更好 bigint 或 nvarchar
【发布时间】:2014-02-26 06:06:12
【问题描述】:

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

表架构方法 1

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

方法二

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

【问题讨论】:

  • 请提供架构建议。
  • 永远不要使用 NVARCHAR 作为主键。如果您认为使用 INT 的网络流量很大,您能想象使用 NVARCHAR 还会有多少流量吗?正确设计您的架构,您可以最大限度地减少流量并提高性能。 PK 也不需要 BigInt,因为您永远不会得到那么多公共汽车 :)
  • 您的 BUS 表应该类似于 CREATE TABLE bus (ID INT NOT NULL IDENTITY(1,1), BusName NVARCHAR(255) NOT NULL, RegoNumber NVARCHAR(10) NOT NULL, PRIMKY KEY (ID ))。然后,您始终使用 ID 号作为查找值。
  • 为什么是BIGINTINT 还不够吗? MEDIUMINT 也不够?我对此表示怀疑。

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


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

在为您的数据库建模时,最好提前为每个表添加一个主键列,即使您觉得不需要它。给你的主键列一个标准化的名字(tablename + 'id' 是一个通用的命名约定)和类型(integer, uniqueidentifier)并坚持下去。不要混用整型、长型、短型等数据类型,只会使表的连接复杂化。

例如为您的实体总线:

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

【讨论】:

    猜你喜欢
    • 2013-04-17
    • 2016-12-24
    • 2012-09-04
    • 2012-07-17
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多