在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字节不会使表变硬,因为拥有它还有其他好处吗?