如何绘制给定关系模式的ERD?我的尝试有误,求原因解析
关系模式转ERD的修正方案
你的尝试图:
先修正你的SQL语法问题
你提供的关系模式存在几个语法和逻辑错误,这是ERD绘制出错的核心原因:
student表声明sid为主键,但未在表中定义该字段,需补充(例:sid VARCHAR(20))Enrolled表主键包含cid,但表内未定义该字段,必须添加- 外键引用的
Students是复数形式,实际表名为student,引用名称需完全匹配
修正后的完整SQL:
CREATE TABLE student ( sid VARCHAR(20), name TEXT, login TEXT, age INTEGER, gpa REAL, PRIMARY KEY(sid) ); CREATE TABLE Enrolled ( sid VARCHAR(20), cid VARCHAR(20), grade VARCHAR(20), PRIMARY KEY(sid, cid), FOREIGN KEY(sid) REFERENCES student(sid) ON DELETE CASCADE ON UPDATE SET DEFAULT );
正确的ERD绘制步骤
1. 定义实体
- student(学生):矩形实体,属性包括
sid(主键,下划线标注)、name、login、age、gpa - course(课程):补充矩形实体(因为
Enrolled中的cid对应课程),属性包括cid(主键,下划线标注),可按需添加course_name等其他属性
2. 定义关系
- 绘制菱形
Enrolled(选课)连接student和course - 关系属性:
grade(成绩) - 关联基数:
- student → Enrolled:一对多(一个学生可选多门课)
- course → Enrolled:一对多(一门课可被多个学生选)
- 约束映射:
Enrolled.sid关联student.sid,对应ON DELETE CASCADE(删除学生时自动删除其选课记录)、ON UPDATE SET DEFAULT(更新学生sid时,选课记录的sid设为默认值,需预先给Enrolled.sid设置默认值)
你原ERD的错误点
- 未补全SQL中缺失的字段和实体(比如
student的sid、Enrolled的cid、缺失的course实体) - 外键引用的表名不匹配,导致实体关联逻辑错误
- 未正确体现
Enrolled作为多对多关系连接表的本质,关系属性和主键映射混乱
内容的提问来源于stack exchange,提问作者Theo
相关产品推荐
相关产品推荐

