0

想象一个有 aJobID和 a的表SubJobID

的组合JobID + SubJobID使行独一无二。

例如:

JobID = CAX100
SubJobID = CA00

JobID = CAX200RW
SubJobID = CA00

JobID = CAX200YYXZ
SubJobID = CA01

etc...

这些是有效的行,但是如果我尝试再次插入JobID=CAX100SubJobID=CA00那么这是不允许的,应该会出错。

那么目前我应该保留JobID两者SubJobID的组合作为主键吗?或者我应该引入一个 int 作为主键(也许是一个自动增量 int)?JobID + SubJobID我知道整数对于主键来说更好更小,但是如果我引入一个数字作为主键,我该如何确保它的唯一性呢?

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

4

2 回答 2

2

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

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

话虽如此,如果在子表中使用复合(JobID,SubJobID)索引作为外键,使用一个可能更有意义。这里的 10000 行可能有 1000 万个子行:那么 varchar 开销很重要。

但是,您读到的任何内容都不是事实

你应该总是有一个身份/自动增量主键

这是取决于设计的性能实现决策。

于 2013-06-12T13:40:57.963 回答
0

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

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

于 2013-06-12T13:41:06.420 回答