这份ERD实体关系图设计是否正确?外键引用是否符合规范?

你的判断完全正确:单个数据库字段无法同时建立指向两张不同表的外键约束,这个ERD里Course表的Qual_Code字段仅关联Qualification表,不存在同时关联两张表的设计。
你看到的“双表关联”是ER图绘制时的连线视觉误导,三张表的实际关联逻辑如下:
Qualification是资质主表,Qual_Code是该表的主键,存储所有合法的资质编码Course表的Qual_Code是外键,指向Qualification.Qual_Code,对应业务含义为「修完当前课程可获得的对应资质」Prerequisite是课程与前置要求的多对多中间表,表内同时包含两个外键:Course_ID关联Course表主键、Qual_Code关联Qualification表的Qual_Code,对应业务含义为「选修当前课程需要提前具备的资质」。你看到的Course到Prerequisite的连线,实际是Prerequisite.Course_ID指向Course的关联,只是绘图时连线位置和Qual_Code字段重叠,造成了字段关联错误的错觉。
后续写SQL时可以参考以下外键约束逻辑,避免建表错误:
-- 优先创建无外键依赖的资质主表 CREATE TABLE Qualification ( Qual_Code VARCHAR(20) PRIMARY KEY, Qual_Name VARCHAR(100) NOT NULL -- 其余字段按ERD标注补充即可 ); -- 创建课程表,仅给Qual_Code加指向Qualification的外键 CREATE TABLE Course ( Course_ID INT PRIMARY KEY, Course_Name VARCHAR(100) NOT NULL, Qual_Code VARCHAR(20), -- 其余字段按ERD标注补充即可 FOREIGN KEY (Qual_Code) REFERENCES Qualification(Qual_Code) ); -- 最后创建前置要求中间表,两个外键分别关联两张主表 CREATE TABLE Prerequisite ( Course_ID INT NOT NULL, Qual_Code VARCHAR(20) NOT NULL, PRIMARY KEY (Course_ID, Qual_Code), FOREIGN KEY (Course_ID) REFERENCES Course(Course_ID), FOREIGN KEY (Qual_Code) REFERENCES Qualification(Qual_Code) );
内容的提问来源于stack exchange,提问作者Averal Verma
相关产品推荐
相关产品推荐

