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

news2024/12/23 3:24:28

文章目录

  • 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图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/440233.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【我在CSDN成长】我的两周年创作纪念日

【我在CSDN成长】我的两周年创作纪念日 一、来到CSDN的大家庭二、在CSDN的收获1.在CSDN的感受2.在CSDN的收获 三、在CSDN的未来规划憧憬 一、来到CSDN的大家庭 当看到这个信息时,才发现不知不觉已经在CSDN创作两年了,今天才腾出时间来写下这篇博文。感叹…

绕开坑坑,申请高德地图安卓appKey的步骤

在申请高德地图 appkey的时候,我们会采用keytool的方法来生成sha1码。这里面有坑,请看 PS C:\Users\cuclife.android> keytool -v -list -keystore keystore keytool 错误: java.lang.Exception: 密钥库文件不存在: keystore java.lang.Exception: 密…

涨点技巧:IOU篇---Yolov5/Yolov7引入WIoU,SIoU,EIoU,α-IoU

1.IOU介绍 IoU其实是Intersection over Union的简称,也叫‘交并比’。IoU在目标检测以及语义分割中,都有着至关重要的作用。 首先,我们先来了解一下IoU的定义: 我们可以把IoU的值定为为两个图形面积的交集和并集的比值,如下图所示: 1.1 Yolov5自带IOU方法 GIoU, DIoU,…

Kubernetes(k8s 1.23.17) 基于docker 一主两从集群环境搭建

结合网上资料,利用k8s最后直接支持docker的版本1.23.17搭建,并本地验证完成。 1 虚拟机准备 1.1 规划 系统角色/hostnameIP地址配置CentOS 7.9 (需要7.5)master192.168.68.1002Core、4G内存、40GB磁盘CentOS 7.9 (需…

一篇文章告诉你,为什么移动数据捕获对运输物流公司很重要?

随着世界走向数字化和智能手机的使用增加,移动数据采集正在成为大多数行业的新常态。航运物流也不例外。从捕获详细的订单和交付信息到跟踪货运和仓库位置,条形码技术用于运输物流世界的每一步。通过智能数据采集,运输和物流公司可以获得更好…

camunda的service task如何使用

在 Camunda 中,使用 Service Task 节点可以执行各种类型的业务逻辑,例如计算、数据转换、数据格式化等。在 Service Task 节点中,可以使用不同的编程语言来实现业务逻辑,例如 Java、JavaScript、Python 等。 下面是使用 Java 实现…

生产制造企业如何建立适合自身的数字化工厂,实现数字化转型?

“工业4.0”这一全新的术语受到全球的瞩目,它是继机械化、电气化和信息技术之后,以智能制造为核心的第四次工业革命。“工业4.0”最显著的特征是智能工厂的广泛普及。而智能工厂是在数字化工厂的基础上发展而来的,没有数字化就没有智能化。因…

如何在低代码平台上构建ERP软件

ERP软件是企业管理日常运营需求的关键组件。然而,对于许多企业,尤其是资源有限的企业来说,尝试构建和管理ERP平台可能要担负较高的成本的。幸运的是,低代码平台可以使这个过程变得容易得多。今天我们来解释如何在低代码平台上构建…

【IDEA】数据湖 Hudi 0.12.0 基础使用

文章目录 创建 Maven 项目插入数据查询数据更新数据增量查询删除数据 前言 集群系统:CentOS 7.5 服务器信息: 服务器角色IPhadoop104服务器Master192.168.0.104hadoop105服务器Slave1192.168.0.105hadoop106服务器Slave2192.168.0.106 使用的组件版本…

看完这篇文章你就彻底懂啦{保姆级讲解}-----(LeetCode刷题977有序数组的平方) 2023.4.20

目录 前言算法题(LeetCode 977有序数组的平方)—(保姆级别讲解)分析题目算法思想(重要)暴力解法代码:双指针法(快慢指针法)代码: 结束语 前言 本文章一部分内…

C++ Primer (第五版)-第九章 顺序容器

文章目录 一、概述二、内容9.1、顺序容器概述如何选择合适的容器 9.2、容器库概览迭代器容器类型成员列表初始化赋值和Swap容器的大小关系运算符 9.3 顺序容器操作9.3.1向顺序容器添加元素访问元素删除元素改变容器大小 9.4 Vector 对象如何增长9.5、额外的string 操作9.5.2、改…

【散文诗】单片机运行下和非运行下的 ROM 和 RAM

目录 一、两种处理器的结构体系1. 哈佛结构体系2. 冯诺依曼结构体系3. 两种结构的总结 二、单片机运行下和非运行下的内存分配1. 非运行时的单片机程序在ROM内的分布2. 运行时的单片机程序在RAM内的分布 三、单片机程序和操作系统应用程序的对比四、编译流程 一、两种处理器的结…

Java 8 中使用 Lambda 表达式和 Stream API 解决 LeetCode 的两数之和问题

Java 8 中使用 Lambda 表达式和 Stream API 解决 LeetCode 的两数之和问题 当我们在面对一个数列,需要查找其中两个元素的和为给定目标值时,可以使用两数之和(Two Sum)问题来解决。这个问题在 LeetCode 上有很高的重要性和普遍性&…

入行IC| 数字IC设计和验证哪个好?(内含薪资对比)

网上有一个很火的问题那就是数字IC设计和验证哪个好?接下来我们从以下几个维度来对比一下这两个岗位。 入行门槛 从上述对比就可以看出,IC设计要比验证门槛高。 具体工作内容有哪些? 数字IC前端设计 1.配合芯片架构的设计;一…

技术干货|直流电源自动测试系统功能介绍

直流电源是一种将交流电转换为恒定电压或电流输出的电子设备。在实际生产生活中,直流电源被广泛应用于各种场合。但由于各种原因,包括工艺、质量等因素,直流电源存在一定的出厂偏差。为了确保直流电源的精度和稳定性,在生产过程中…

layui框架学习(23:代码文本修饰模块)

Layui中的代码文本修饰模块layui.code主要用于修饰代码区域或文本行,其基本用法是使用预设类layui-code标识包含代码或文本的元素,然后调用layui.code函数渲染样式。Layui官网教程及示例中主要使用pre元素包含带修饰的代码或文本(pre元素可定…

Myslq架构和原理

这里写自定义目录标题 Myslq体系架构连接层存储引擎 MYSQL原理单表访问连接查询(原理) Myslq体系架构 连接层 存储引擎 查看日志文件:show variables like ‘log_error’\G; BIN LOG 日志: show variables like ‘log_bin’; MYS…

Leetcode 622. 设计循环队列

文章目录 1.题目描述2.原题链接3.思路分析4.接口实现 :FrontRearenQueue(value):deQueue():isEmpty(): 检查循环队列是否为空isFull():myCircularQueueFree 5.代码实现 1.题目描述 设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FI…

16.泛型

泛型 一、什么是泛型 泛型的本质是参数化类型,即给类型指定一个参数,然后在使用时再指定此参数具体的值,那样这个类型就可以在使用时决定了。这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。 二…

【ONE·C++ || 模板进阶】

总言 主要介绍模板相关内容:非类型模板参数、类模板特化、模板的分离编译。 文章目录 总言1、非类型模板参数1.1、主要介绍1.2、std::array 简要说明 2、模板的特化2.1、基本介绍2.2、函数模板特化2.3、类模板特化2.3.1、基本说明2.3.2、用途举例2.3.3、分类&#…