column pk dual varchar还是int?

时间:2013-06-12 13:27:14

标签: sql sql-server-2008

想象一下有JobIDSubJobID的表格。

JobID + SubJobID的组合使行唯一。

例如:

JobID = CAX100
SubJobID = CA00

JobID = CAX200RW
SubJobID = CA00

JobID = CAX200YYXZ
SubJobID = CA01

etc...

这些是有效行,但如果我再次尝试插入JobID=CAX100SubJobID=CA00,则不允许这样做,并且应该出错。

那么我目前应该将JobIDSubJobID两者的组合作为主键吗?或者我应该引入一个int作为主键(也许是一个autoincrement int)?我知道主键的内容越来越好,但是如果我将一个数字作为主键,如何确保JobID + SubJobID的唯一性呢?

目前我有JobIDSubJobID作为复合主键我理解,这就是我目前所拥有的,但建议将两列作为pk(varchar)或引入新列(带有自动编号的int类型)并在JobID + SubJobID上创建一个唯一约束?

2 个答案:

答案 0 :(得分:2)

如果添加代理自动增量整数列,则仍需要JobID,SubJobID列上的唯一索引。这是自然的主键。

除了使用更多磁盘和内存来存储额外列之外,它可能不会增加太多值。

如果将子表中的复合(JobID,SubJobID)索引用作外键,则使用它可能更有意义。这里10000行可能有1000万个子行:然后varchar开销很重要。

但是,你读到的任何内容都没有真相

  

您应始终拥有身份/自动增量主键

根据设计,这是性能的实现决策。

答案 1 :(得分:0)

就个人而言,我会在2 varchar字段上定义一个整数主键和一个唯一索引。这假设您的数据库应用程序非常重要且性能问题。

另一方面,如果此表中只有几十条记录,则可能会过度设计。