studentmanage

1.业务需求

学校需要记录学生信息,每个学生包含一下信息:

  1. 学号(唯一 表示每个学生)
  2. 姓名
  3. 性别
  4. 班级
    要求:
  • 学号必须唯一(主键)
  • 性别只允许”男”,或”女”(可用约束或枚举)
  • 姓名和班级为文本类型

2.表设计

字段名 数据类型 约束 说明
student INT PRIMARY 学生唯一编号
name VARCHAR(50) NOT NULL 学生姓名
gender CHAR(1) CHECK(gender IN(M,F)) 性别,M=男,F=女
class VARCHAR(20) NOT NULL 班级

3.建表SQL示例

1.创建库

1
CREATE DATABASE student_manage DEFAULT CHARETTE utf8;

2.选择库

1
USE student_manage;

3.创建表

1
2
3
4
CREATE TABLE Students(
student_id INT PRIMARY KEY,
name VARCHAR(20) NOT NULL
);

4.插入示例数据

1
2
3
4
5
6
7
8
9
INSERT INTO Students
(student_id,name,gender,class)
VALUES
(1001,'张三','M','一班'),
(1002,'李四','F','一班'),
(1003,'王五','M','二班'),
(1004,'赵六','F','二班'),
(1005,"秦柒",'F',"二班");

5.查询验证

插入数据后,可以用简单查询验证表和数据:

1
SELECT *FROM Students;

结果应该显示刚插入的四个学生及信息。

course table

1.业务需求

学校需要记录课程信息,每门课程包含:

  1. 课程编号(唯一 表示每门课程)
  2. 课程名称
  3. 学分
    要求:
  • 课程编号唯一(主键)
  • 课程名称不能为空
  • 学分为正整数

2.表设计

字段名 数据类型 约束 说明
course_id INT PRIMARY 课程唯一编号
course_name VARCHAR(100) NOT NULL 课程名称
credit INT CHECK(credit>0) 学分必须大于0

3.建表SQL示例

1
2
3
4
5
6
CREATE TABLE Courses(
course_id INT PRIMARY KEY,
course_name VARCHAR(100) NOT NULL,
credit INT CHECK (credit>0)
);

4.插入示例数据

1
2
3
4
5
6
7
INSERT INTO Courses(course_id,course_name,credit)
VALUES
(2001,'数学',3),
(2001,'语文',2),
(2001,'英语',3),
(2001,'物理',4);

5.查询验证

1
SELECT * FROM Courses;

Enrollments

1.业务需求

每个学生可以选多门课,每门课也可以被多个学生选,所以这是一个多对多关系
解决方式:
创建一个中间表Enrollments,用于记录学生与课程的对应关系,以及成绩信息。

2.表设计

字段名 数据类型 约束 说明
enrollment INT PRIMARY 每条选课记录唯一编号
student_id INT FOREIGN KEY->Students(students_id) 对应学生
course_id INT FOREIGN KEY->Courses(course_id) 对应课程
score DECIMAL 可为空 成绩(0-100分)
!通常student + course_id可以组合符合主键,但为了简单,我们暂用单独的自增enrollment_id主键。

3.建表SOL示例

1
2
3
4
5
6
7
8
9
CREATE TABLE Enrollments(
enrollment_id INT PRIMARY KEY,
student_id INT,
course_id INT,
score DECIMAL(5,2),
FOREIGN KEY (student_id) REFERENCES Students(student_id),
FOREIGN KEY (course_id)
REFERENCES Courses(course_id));

4.插入示例数据

1
2
3
4
5
6
7
8
INSERT INTO Enrollments (enrollment_id,student_id,course_id,score)
VALUES
(1,1001,2001,85.5),
(2,1001,2002,90.0),
(3,1002,2001,78.0),
(4,1002,2003,88.5),
(5,1003,2004,92.5),
(6,1004,2003,66.5);

5.查询验证

1
SELECT *FROM Enrollments;