ChatGPT实战100例 - (08) 设计转化为SQL并获取ER图

文章目录

  • 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个实体(学生、选课、课程)之间的结构化关系:

  • 学生实体和选课实体之间的多对一关系,表示一个学生可以选多门课程。
  • 选课实体和课程实体之间的多对一关系,表示一门课程可以被多名学生选择。
  • 各实体的主键也被明确标注出来,如学生实体的主键为学号,课程实体的主键为课程号,选课实体的主键为学号和课程号的组合。
    ChatGPT实战100例 - (08) 设计转化为SQL并获取ER图_第1张图片

所以,通过简单的Plantuml语法,我们就可以很直观地描述SQL语句中的表结构和键约束关系,生成一个清晰准确的ER图。这也体现了Plantuml作为一款文本绘图工具,在数据库设计领域的实用性。

四、 总结

回顾一下,本节主要prompt知识点:

  • CPU大法
作为一名优秀的{高帽子},请{干啥}
  • 根据需求建表
针对{某某某设计},写出SQL建表语句,要求使用英文字段中文注释描述
  • 根据建表SQL绘制ER图
针对以上sql建表语句,使用plantuml语法绘制ER图

你可能感兴趣的:(ChatGPT,PlantUML,AIGC,chatgpt,sql,数据库)