文章目录
- ChatGPT实战100例 - (08) 设计转化为SQL并获取ER图
- 一、需求与思路
- 二、SQL建表
- 三、绘制
- 四、 总结
ChatGPT实战100例 - (08) 设计转化为SQL并获取ER图
一、需求与思路
在你还在手撸SQL?ChatGPT笑晕在厕所 这篇博文中
针对经典3表设计:
学生表 S(SNO,SNAME,AGE,SEX),其属性表示学生的学号、姓名、年龄和性别;
选课表 SC(SNO,CNO,GRADE),其属性表示学生的学号、所学课程的课程号和成绩;
课程表 C(CNO,CNAME,TEACHER),其属性表示课程号、课程名称和任课教师姓名。
写了一套增删查改,已经证明ChatGPT绝非浪得虚名。
但这篇文章并没有涉及ER图的部分,所以将基本的SQL建表和ER图单独列出。
二、SQL建表
问题:
作为一名优秀的数据库专家,针对经典3表设计:
学生表 S(SNO,SNAME,AGE,SEX),其属性表示学生的学号、姓名、年龄和性别;
选课表 SC(SNO,CNO,GRADE),其属性表示学生的学号、所学课程的课程号和成绩;
课程表 C(CNO,CNAME,TEACHER),其属性表示课程号、课程名称和任课教师姓名。
写出SQL建表语句,要求使用英文字段中文注释描述
回答:
这里是经典3表设计的SQL建表语句,使用英文字段名和中文注释:
-- 学生表S
CREATE TABLE Student(
SNO VARCHAR(10), -- 学号
SNAME VARCHAR(20), -- 姓名
AGE INT, -- 年龄
SEX VARCHAR(2) CHECK(SEX IN ('M','F')), -- 性别
CONSTRAINT Student_PK PRIMARY KEY (SNO) -- 主键约束
);
-- 选课表SC
CREATE TABLE SelectCourse(
SNO VARCHAR(10), -- 学号
CNO VARCHAR(10), -- 课程号
GRADE DECIMAL(4,1), -- 成绩
CONSTRAINT SC_PK PRIMARY KEY(SNO,CNO), -- 主键
CONSTRAINT SC_FK_Student FOREIGN KEY(SNO) REFERENCES Student(SNO), -- 外键,引用学生表
CONSTRAINT SC_FK_Course FOREIGN KEY(CNO) REFERENCES Course(CNO) -- 外键,引用课程表
);
-- 课程表C
CREATE TABLE Course(
CNO VARCHAR(10), -- 课程号
CNAME VARCHAR(40), -- 课程名称
TEACHER VARCHAR(20), -- 任课教师
CONSTRAINT Course_PK PRIMARY KEY(CNO) -- 主键
);
表名称和属性使用英文,并在每行注释中给出对应的中文释义。该设计同样创建了学生表、选课表和课程表,并设置主键约束和外键约束。
相比直接使用中文表名和字段,此种方式可以最大限度地兼容不同的数据库和配置,同时也为不懂中文的人提供了属性的翻译,具有更好的通用性。
所以,如果要同时满足SQL语句的中文友好性,以及数据库的兼容性,此种使用英文字段加中文注释的方式是比较理想的设计方式。它可以让更多的人理解和使用该SQL语句。
请注意,这里的表名称和属性都使用英文,注释使用的是中文,所以实际存储的名称依然是英文,这也是为了数据库的通用性考虑。我们在SQL语句中采用中文注释只是为了人们更容易理解每个字段的含义。
这个说的有点详细
三、绘制
问题:
针对以上sql建表语句,使用plantuml语法绘制ER图
回答:
根据前面生成的SQL建表语句,这里使用Plantuml语法绘制相应的ER图:
@startuml
' 设置字体大小和整图的方向
skinparam defaultTextAlignment center
skinparam monochrome true
skinparam size 14
left to right direction
' 定义实体类型,圆角实体表示弱实体
entity 学生 {
*学号
姓名
年龄
性别
}
entity 选课 {
*学号
*课程号
成绩
}
entity 课程{
*课程号
课程名称
任课教师
}
' 连接选课与学生实体,并标注多对一关系
选课 ||--o{ 学生 : 多对一
' 连接选课与课程实体,并标注多对一关系
选课 }o--|| 课程 : 多对一
' 设置实体的主键
学生 : 学号
课程 : 课程号
选课 : 学号 + 课程号
@enduml
该ER图清晰地描述了3个实体(学生、选课、课程)之间的结构化关系:
- 学生实体和选课实体之间的多对一关系,表示一个学生可以选多门课程。
- 选课实体和课程实体之间的多对一关系,表示一门课程可以被多名学生选择。
- 各实体的主键也被明确标注出来,如学生实体的主键为学号,课程实体的主键为课程号,选课实体的主键为学号和课程号的组合。
所以,通过简单的Plantuml语法,我们就可以很直观地描述SQL语句中的表结构和键约束关系,生成一个清晰准确的ER图。这也体现了Plantuml作为一款文本绘图工具,在数据库设计领域的实用性。
四、 总结
回顾一下,本节主要prompt
知识点:
- CPU大法
作为一名优秀的{高帽子},请{干啥}
- 根据需求建表
针对{某某某设计},写出SQL建表语句,要求使用英文字段中文注释描述
- 根据建表SQL绘制ER图
针对以上sql建表语句,使用plantuml语法绘制ER图