Sql 在主键的情况下,哪个更好
我需要表总线的主键,它存储总线号、总线类型、注册号等信息。因为我们知道总线号本身是唯一的,可以是主键,但它的数据类型字符串会减慢表中的搜索速度,所以另一个可能的解决方案是添加int类型的自动递增字段,但这将增加网络数据,因为每次我需要在winform上选择bus no和bus idauto incremented以供用户选择。我需要知道哪种方法更好,或者还有其他更好的方法 表模式方法1Sql 在主键的情况下,哪个更好,sql,sql-server,database-design,key,sql-types,Sql,Sql Server,Database Design,Key,Sql Types,我需要表总线的主键,它存储总线号、总线类型、注册号等信息。因为我们知道总线号本身是唯一的,可以是主键,但它的数据类型字符串会减慢表中的搜索速度,所以另一个可能的解决方案是添加int类型的自动递增字段,但这将增加网络数据,因为每次我需要在winform上选择bus no和bus idauto incremented以供用户选择。我需要知道哪种方法更好,或者还有其他更好的方法 表模式方法1 bus no - nvarchar(10) (primary key) bus registartion no
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)
对于数据库表上的主键,Numeric-not null-列始终是最佳选项。数据库引擎可以以最有效的方式存储、索引和查找它们。
不要介意网络流量开销。只需不查询结果集中不需要的列。避免SELECT*语句。
如有必要,可以在SELECT或客户端程序中轻松完成类型转换,例如整数到字符串。
在对数据库建模时,最好的做法是提前向每个表中添加主键列,即使您觉得不需要它。为主键列指定一个标准化名称tablename+“id”是一种常见的命名约定,键入integer、uniqueidentifier并坚持使用它。不要混合使用整型、长型、短型和其他数据类型,因为这只会使表的连接变得复杂
例如,对于您的实体总线:
表名为Bus
主键名称是BusId
主键类型为Int
请提供架构建议。切勿将NVARCHAR用作主键。如果你认为有很多网络流量使用INTs,你能想象有多少更多的使用NVARCHAR吗?正确地设计您的模式,可以最大限度地减少通信量并提高性能。PK也不需要BigInt,因为您永远不会得到那么多总线:您的总线表应该是类似于CREATE table BUS ID INT NOT NULL IDENTITY1,1、BusName NVARCHAR255 NOT NULL、RegoNumber NVARCHAR10 NOT NULL、PRIMARKY KEY ID。然后您总是使用ID号作为查找值。为什么要使用BigInt?INT还不够吗?中餐还不够吗?我怀疑。可能是重复的