想象一下有JobID
和SubJobID
的表格。
JobID + SubJobID
的组合使行唯一。
例如:
JobID = CAX100
SubJobID = CA00
JobID = CAX200RW
SubJobID = CA00
JobID = CAX200YYXZ
SubJobID = CA01
etc...
这些是有效行,但如果我再次尝试插入JobID=CAX100
和SubJobID=CA00
,则不允许这样做,并且应该出错。
那么我目前应该将JobID
和SubJobID
两者的组合作为主键吗?或者我应该引入一个int作为主键(也许是一个autoincrement int)?我知道主键的内容越来越好,但是如果我将一个数字作为主键,如何确保JobID + SubJobID
的唯一性呢?
目前我有JobID
和SubJobID
作为复合主键我理解,这就是我目前所拥有的,但建议将两列作为pk(varchar)或引入新列(带有自动编号的int类型)并在JobID + SubJobID
上创建一个唯一约束?
答案 0 :(得分:2)
如果添加代理自动增量整数列,则仍需要JobID,SubJobID列上的唯一索引。这是自然的主键。
除了使用更多磁盘和内存来存储额外列之外,它可能不会增加太多值。
如果将子表中的复合(JobID,SubJobID)索引用作外键,则使用它可能更有意义。这里10000行可能有1000万个子行:然后varchar开销很重要。
但是,你读到的任何内容都没有真相
您应始终拥有身份/自动增量主键
根据设计,这是性能的实现决策。
答案 1 :(得分:0)
就个人而言,我会在2 varchar字段上定义一个整数主键和一个唯一索引。这假设您的数据库应用程序非常重要且性能问题。
另一方面,如果此表中只有几十条记录,则可能会过度设计。