MySQL中子类表的主键能否被其他表作为外键引用?
问题解答
结论
你描述的操作完全可行,这是类表继承架构下非常常见的外键约束用法。
可行性说明
外键引用的唯一基础要求是:被引用的字段必须是目标表的主键,或者是带有唯一约束的字段。你场景里employees表的Person_ID本身就是主键,完全满足外键引用的前提条件。
且这种设计比直接引用persons表的Person_ID更贴合业务逻辑:多了一层身份校验,能强制保证works表关联的人员一定是员工,避免把仅存在于persons表、不属于员工范畴的人员(比如客户、访客等)错误关联到项目工作记录中。
注意事项
你提供的works表建表语句存在两处语法问题,需要修正后才能正常执行:
- 未定义
Person_ID字段就直接声明外键 project_ID字段未指定数据类型、非空约束等属性
修正后的建表语句如下:
CREATE TABLE works ( project_ID int NOT NULL AUTO_INCREMENT, Person_ID int NOT NULL, date_started date, PRIMARY KEY(project_ID), FOREIGN KEY (Person_ID) REFERENCES employees(Person_ID) );
内容的提问来源于stack exchange,提问作者mariefherv
相关产品推荐
相关产品推荐

