如何实现 MySQL 学生表、课程表与选课表的设计
如果你是一名新手开发者,并想要实现一个简单的学生管理系统,其中包括学生表、课程表和选课表,本文将为你提供一份详细的指南。
流程概述
下面是整个过程的步骤:
步骤 | 描述 |
---|---|
1 | 创建三个表:学生表、课程表和选课表。 |
2 | 定义每个表的结构和关系。 |
3 | 插入一些测试数据。 |
4 | 执行查询操作以验证数据正确性。 |
1. 创建表
在 MySQL 中,我们需要创建三个表:students
、courses
和 enrollments
。
-- 创建学生表
CREATE TABLE students (
student_id INT AUTO_INCREMENT PRIMARY KEY, -- 学生ID,自增长
name VARCHAR(100) NOT NULL, -- 学生姓名
age INT -- 学生年龄
);
-- 创建课程表
CREATE TABLE courses (
course_id INT AUTO_INCREMENT PRIMARY KEY, -- 课程ID,自增长
course_name VARCHAR(100) NOT NULL, -- 课程名称
credits INT -- 学分
);
-- 创建选课表
CREATE TABLE enrollments (
enrollment_id INT AUTO_INCREMENT PRIMARY KEY, -- 选课ID,自增长
student_id INT, -- 学生ID
course_id INT, -- 课程ID
FOREIGN KEY (student_id) REFERENCES students(student_id), -- 外键关联学生
FOREIGN KEY (course_id) REFERENCES courses(course_id) -- 外键关联课程
);
2. 定义每个表的结构和关系
我们在创建表时已经定义了表的结构。在这里,enrollments
表是用来关联学生和课程的,它持有来自 students
和 courses
表的外键,形成一对多关系。
3. 插入测试数据
接下来,我们需要为每个表插入一些测试数据。
-- 插入测试数据到学生表
INSERT INTO students (name, age) VALUES ('Alice', 20);
INSERT INTO students (name, age) VALUES ('Bob', 22);
INSERT INTO students (name, age) VALUES ('Charlie', 21);
-- 插入测试数据到课程表
INSERT INTO courses (course_name, credits) VALUES ('Mathematics', 3);
INSERT INTO courses (course_name, credits) VALUES ('Physics', 4);
INSERT INTO courses (course_name, credits) VALUES ('Chemistry', 3);
-- 插入测试数据到选课表
INSERT INTO enrollments (student_id, course_id) VALUES (1, 1); -- Alice 选了 Mathematics
INSERT INTO enrollments (student_id, course_id) VALUES (1, 2); -- Alice 选了 Physics
INSERT INTO enrollments (student_id, course_id) VALUES (2, 1); -- Bob 选了 Mathematics
4. 执行查询操作
最后,我们可以执行一些查询操作,以验证数据是否正确。
-- 查询每个学生及其选的课程
SELECT s.name AS student_name, c.course_name AS course_name
FROM enrollments e
JOIN students s ON e.student_id = s.student_id
JOIN courses c ON e.course_id = c.course_id;
这条查询将返回所有学生及其所选课程的名称。
关系图说明
为了更清晰地展示这些表之间的关系,下面是使用 Mermaid 语法绘制的 ER 图:
erDiagram
STUDENTS {
int student_id PK "学生ID"
string name "姓名"
int age "年龄"
}
COURSES {
int course_id PK "课程ID"
string course_name "课程名称"
int credits "学分"
}
ENROLLMENTS {
int enrollment_id PK "选课ID"
int student_id FK "学生ID"
int course_id FK "课程ID"
}
STUDENTS ||--o{ ENROLLMENTS : ""
COURSES ||--o{ ENROLLMENTS : ""
结尾
以上就是创建简单的学生表、课程表和选课表的全过程。希望通过这篇文章,你能对 MySQL 的表结构、关系及基本的 SQL 操作有一个初步的了解。如果你有其他问题,请随时继续提问!