Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在主键的情况下,哪个更好_Sql_Sql Server_Database Design_Key_Sql Types - Fatal编程技术网

Sql 在主键的情况下,哪个更好

Sql 在主键的情况下,哪个更好,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

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

表模式方法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)
对于数据库表上的主键,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还不够吗?中餐还不够吗?我怀疑。可能是重复的