文章目录
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 CREATETABLE Student(
SNO VARCHAR(10),-- 学号
SNAME VARCHAR(20),-- 姓名
AGE INT,-- 年龄
SEX VARCHAR(2)CHECK(SEX IN('M','F')),-- 性别CONSTRAINT Student_PK PRIMARYKEY(SNO)-- 主键约束);-- 选课表SC CREATETABLE SelectCourse(
SNO VARCHAR(10),-- 学号
CNO VARCHAR(10),-- 课程号
GRADE DECIMAL(4,1),-- 成绩CONSTRAINT SC_PK PRIMARYKEY(SNO,CNO),-- 主键CONSTRAINT SC_FK_Student FOREIGNKEY(SNO)REFERENCES Student(SNO),-- 外键,引用学生表 CONSTRAINT SC_FK_Course FOREIGNKEY(CNO)REFERENCES Course(CNO)-- 外键,引用课程表);-- 课程表C CREATETABLE Course(
CNO VARCHAR(10),-- 课程号
CNAME VARCHAR(40),-- 课程名称
TEACHER VARCHAR(20),-- 任课教师CONSTRAINT Course_PK PRIMARYKEY(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图
版权归原作者 AI原吾 所有, 如有侵权,请联系我们删除。