ChatGPT実戦100件 - (08) データベース設計をSQL化してER図を取得
1. 要件とアイデア
まだ SQL をプレイしていますか? ChatGPT はトイレで笑い失神するこのブログ投稿では、
古典的な 3 つのテーブル用に設計されています。
学生テーブル S (SNO、SNAME、AGE、SEX) の属性は、学生の学生番号、名前、年齢、性別を表します。クラス
選択テーブル SC (SNO、CNO、GRADE)、その属性は学生の学生番号、コース番号、学習するコースの学年を表します; カリキュラム
テーブル C (CNO、CNAME、TEACHER)、その属性はコース番号、コース名、および先生の名前。
私は一連の追加、削除、チェック、変更を書きましたが、ChatGPT が決して無駄ではないことが証明されました。
ただし、この記事には ER 図の部分は含まれていないため、基本的な SQL テーブルの作成と ER 図は別々に記載されています。
2. 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 ステートメントで中国語のコメントを使用しています。
これは少し詳しいです
3. 描画
質問:
针对以上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 つのエンティティ (学生、コース選択、コース) 間の構造化された関係を明確に示しています。
- 学生エンティティとコース選択エンティティ間の多対 1 の関係は、学生が複数のコースを選択できることを意味します。
- コース選択エンティティとコース エンティティ間の多対 1 の関係は、1 つのコースを複数の学生が選択できることを示します。
- 各エンティティの主キーも明確にマークされています。たとえば、学生エンティティの主キーは学生番号、コース エンティティの主キーはコース番号、コース選択エンティティの主キーは次の組み合わせです。学生番号とコース番号。
したがって、シンプルな Plantuml 構文を通じて、SQL ステートメント内のテーブル構造とキー制約関係を直感的に記述し、明確で正確な ER 図を生成できます。これは、データベース設計の分野におけるテキスト描画ツールとしての Plantuml の実用性も反映しています。
4. まとめ
prompt
このセクションの主な知識ポイントを確認してください。
- CPU大法
作为一名优秀的{高帽子},请{干啥}
- ニーズに応じてテーブルを構築
针对{某某某设计},写出SQL建表语句,要求使用英文字段中文注释描述
- テーブルSQLに従ってER図を描画します。
针对以上sql建表语句,使用plantuml语法绘制ER图