同一ER模型中多表使用identity作为主键是否会报错?
解答
你完全可以在同一个ER模型的多张表里用int identity(1,1)作为主键,贴出来的表定义不会因为两个自增主键取值重复触发数据库报错,核心逻辑很简单:
- 主键的唯一性约束是单表维度生效的:主键只要求在当前所属表内非空、不重复,数据库从来不会校验不同表的主键值是否重复,跨表主键值相同是非常普遍的情况。
IDENTITY(1,1)的自增计数器是和单张表绑定的:每个设置了自增属性的表会独立维护自己的计数序列,Persons表的Personid和Job表的jobID计数完全独立互不干扰,哪怕两个字段同时出现1、2、3这类相同值,也是完全合法的。- 你写的外键关联逻辑也不会受这个影响:Job表的
Personid作为外键,只会校验插入数据时填入的值必须在Persons表的Personid列中存在,和Job表自身的主键jobID取什么值没有任何关系。
实际运行时你可以很容易验证:往Persons表插入3条数据,
Personid会自动生成1、2、3;往Job表插入5条数据,jobID会自动生成1、2、3、4、5,两边重复的1/2/3值不会引发任何插入、查询、关联错误。
你贴的两段建表SQL语法没有问题,可以直接正常使用,不存在主键冲突风险。
内容的提问来源于stack exchange,提问作者cvika7
相关产品推荐
相关产品推荐

