如何在特化实体Technician中使用一元关系?MSSQL建表报错解决
问题解答
首先明确:特化实体Technician完全可以使用一元关系(自引用外键),你当前的报错是因为SQL语法错误导致的。
报错原因分析
你写的代码里最后一行Foreign key references Technician (Tec_ID)没有指定要作为外键的列,数据库无法识别用哪个字段去关联Tec_ID,因此提示“外键引用列数与被引用列数不匹配”。
正确的建表写法
要实现技术员之间的一元关系(比如“技术员有上级技术员”这类关联),需要新增一个字段来存储关联的上级ID,再给这个字段添加自引用外键:
create table Technician ( Tec_ID int Primary key Foreign key references Employee(id_employee), -- 新增字段存储上级技术员ID,允许为空(顶级技术员无上级) Supervisor_Tec_ID int Foreign key references Technician(Tec_ID) );
关键说明
Tec_ID作为Technician的主键,同时外键关联Employee的id_employee,满足特化实体的继承关系(Technician是Employee的子类)。Supervisor_Tec_ID是自引用外键,指向同一张表的Tec_ID,以此实现技术员之间的一元关联。- 给
Supervisor_Tec_ID设置允许为空是合理的,因为必然存在没有上级的技术员(比如技术主管)。
内容的提问来源于stack exchange,提问作者hosejojo
相关产品推荐
相关产品推荐

