Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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 Server中是否有计算机主键这样的东西?_Sql_Sql Server_Database Design - Fatal编程技术网

在SQL Server中是否有计算机主键这样的东西?

在SQL Server中是否有计算机主键这样的东西?,sql,sql-server,database-design,Sql,Sql Server,Database Design,我正在忙着设计一个日志表,其中某些条目将被存储在其中,我已经简化了这个问题的问题 以下是标准表格的示例: bigInt: PK | int:client_id | datetime: time | string:data 在我看来,就我查询所需数据而言,本例中的PK不是真的需要吗?有没有办法创建虚拟/复合主键 因此,在上面的例子中,您可以识别这一行,购买一个client\u id和time的复合PK。 这样你就不用为每个条目存储一个无用的整数了 或者我遗漏了主键的一些重要信息?是的,在SQL

我正在忙着设计一个日志表,其中某些条目将被存储在其中,我已经简化了这个问题的问题

以下是标准表格的示例:

bigInt: PK | int:client_id | datetime: time | string:data 
在我看来,就我查询所需数据而言,本例中的PK不是真的需要吗?有没有办法创建虚拟/复合主键

因此,在上面的例子中,您可以识别这一行,购买一个
client\u id
time
的复合PK。 这样你就不用为每个条目存储一个无用的整数了


或者我遗漏了主键的一些重要信息?

是的,在SQL server中使用复合主键是绝对可能的

另一方面,
PK
是所谓的代理键:一个键字段,它不是严格必需的,但可以方便地访问行

更重要的是,代理键从不更改:
client\u id
time
(自然键)具有某些业务意义,因此可能需要修改,当其他表将它们作为外键引用时,这可能会带来麻烦


关于的Wikipedia文章提供了关于这两种方法的优缺点的大量信息。

easy search提供了许多结果:默认情况下,SQL Server中的主键也是聚集键,它被复制到该表上的所有非聚集索引中。因此,clsutering键应该是唯一且狭窄的-使用多个列,因为您的PK通常不太理想。我见过很多情况,与使用臃肿的复合主键相比,添加一个无用的整数实际上最终会使整个表变小(表数据包括索引大小),你说pk使用的8字节不会使表变硬,因为拥有它还有其他好处吗?