我正在忙于设计一个存储某些条目的日志表,我已经简化了这个问题的问题。
以下是标准表的示例:
bigInt: PK | int:client_id | datetime: time | string:data
现在我看到它的方式,就我查询我需要的数据而言,在这种情况下PK是不是真的需要?有没有办法可以创建虚拟/复合主键?
因此,在上面的情况中,您可以识别此行,购买client_id
和time
的复合PK。
这样你就可以节省为每个条目存储一个无用的整数吗?
或者我遗漏了一些关于主键的重要内容?
答案 0 :(得分:1)
是的,绝对可以在SQL server中使用复合主键。
另一方面, PK
就是所谓的代理键:一个非常必要的关键字段,但可以方便地访问一行。
更重要的是,代理键永远不会改变:client_id
和time
(自然键),具有一定的商业含义,并且,因此,可能需要进行修改,当其他表将它们作为外键引用时,这可能会很麻烦。
关于Surrogate Key的维基百科文章提供了关于这两种方法的利弊的大量信息。