如何实现 MySQL 学生表、课程表与选课表的设计

如果你是一名新手开发者,并想要实现一个简单的学生管理系统,其中包括学生表、课程表和选课表,本文将为你提供一份详细的指南。

流程概述

下面是整个过程的步骤:

步骤 描述
1 创建三个表:学生表、课程表和选课表。
2 定义每个表的结构和关系。
3 插入一些测试数据。
4 执行查询操作以验证数据正确性。

1. 创建表

在 MySQL 中,我们需要创建三个表:studentscoursesenrollments

-- 创建学生表
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 表是用来关联学生和课程的,它持有来自 studentscourses 表的外键,形成一对多关系。

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 操作有一个初步的了解。如果你有其他问题,请随时继续提问!