在SQL Server中是否存在复合主键?

时间:2014-05-02 05:44:35

标签: sql sql-server database-design

我正在忙于设计一个存储某些条目的日志表,我已经简化了这个问题的问题。

以下是标准表的示例:

bigInt: PK | int:client_id | datetime: time | string:data 

现在我看到它的方式,就我查询我需要的数据而言,在这种情况下PK是不是真的需要?有没有办法可以创建虚拟/复合主键?

因此,在上面的情况中,您可以识别此行,购买client_idtime的复合PK。 这样你就可以节省为每个条目存储一个无用的整数吗?

或者我遗漏了一些关于主键的重要内容?

1 个答案:

答案 0 :(得分:1)

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

另一方面,

PK就是所谓的代理键:一个非常必要的关键字段,但可以方便地访问一行。

更重要的是,代理键永远不会改变client_idtime自然键),具有一定的商业含义,并且,因此,可能需要进行修改,当其他表将它们作为外键引用时,这可能会很麻烦。

关于Surrogate Key的维基百科文章提供了关于这两种方法的利弊的大量信息。