在本项目中,我们使用MySQL8数据库,因此在开始之前,请确保您的电脑已安装MySQL8。
首先,我们可以通过终端测试连接MySQL,输入相应的MySQL命令进行连接;
mysql -u root -p
或者使用可视化工具,比如免费版的Navicat Premium Lite,它已经足够满足本项目的需求。
创建数据库
在创建数据库之前,需要先连接本地服务器(localhost)。连接成功后,右键选择“创建数据库”,如下图所示:
数据库命名为student_system,字符集选择utf8mb4,排序使用第一个默认选项。数据库创建成功后,我们开始设计和创建数据表。
MySQL 数据库表设计
根据项目需求,应用中有两个用户角色——管理员和教师。因此,我们需要创建user表用于管理用户,还需要classes表和students表用于管理班级和学生信息。
1. classes 表
classes 表用于存储班级的基本信息。字段及其属性如下:
创建表时,可以直接在Navicat的查询窗口中,点击对象栏的中的+号执行SQL语句,如下图所示:
创建 classes 表的SQL语句:
CREATE TABLE classes (
class_id INT PRIMARY KEY AUTO_INCREMENT,
class_name VARCHAR(255) NOT NULL
);
创建班级表后,数据库中增加了一张班级表,该表包含两个字段:class_id 和 class_name。其中,class_id 是主键且自增。班级表结构简单,主要用于记录班级基本信息。
2. student 表
在学生表中,student_id 作为主键,类型为整型,并自增。学生表还包括学生姓名和学号。其中,学号要求唯一,即每位学生都有一个唯一的学号,因此对该字段设置了唯一性约束。学生姓名则不受此限制,允许班级内有重名的学生,例如两位同学可以同名为“王强”,但学号会不同。性别字段 gender 采用整型存储,以节省内存。存储时,使用1表示男性,2表示女性。此外,class_id 字段表示学生所属班级,它与班级表中的 class_id 建立了关联关系,即一对多的关系——每位学生必然属于一个班级。这里通过外键 FOREIGN KEY 关联到班级表,以保证班级与学生之间的关联性。学生表包含语文、数学和英语三科的成绩字段,这些字段使用浮点型,以便支持带小数的分数,例如60.5或70.5分等。
student 表用于存储学生的基本信息及成绩。字段及其属性如下:
接下来,创建学生表。可以将 CREATE 语句直接复制并运行,代码如下:
创建 student 表的SQL语句:
CREATE TABLE student (
student_id INT PRIMARY KEY AUTO_INCREMENT,
student_name VARCHAR(255) NOT NULL,
student_number VARCHAR(255) NOT NULL UNIQUE,
gender INT NOT NULL,
class_id INT NOT NULL,
chinese_score FLOAT,
math_score FLOAT,
english_score FLOAT,
FOREIGN KEY (class_id) REFERENCES classes(class_id)
);
表创建成功后,通过刷新查看新增的 Student 表及其各字段和主键。每个字段的类型也可以进一步查看。
在创建顺序上需注意,班级表 classes 应先于学生表创建,因为学生表中的班级字段需要引用班级表的主键 class_id 作为外键。因此,建议先创建班级表,再创建学生表。
3. user 表
接下来是用户表的创建。用户表主要存储两类用户信息:管理员和教师。用户表的主键为 user_id,并设为自增字段。表中还包括 username、password 和 nickname 等字段。
其中,username(用户名)是唯一的,因为用户登录时需使用独一无二的用户名。nickname(昵称)字段不受唯一性限制。昵称可以自定义,例如,用户名是小写字母的 "zhangsan"(张三),而昵称可以为 "张三老师" 或 "一年一班张三老师",方便管理员识别教师所属班级。
此外,user_role 字段用于区分用户类型:1 表示管理员,2 表示教师。教师可关联多个班级,class_id 字段通过存储班级 ID(例如 "1,2")表示教师同时管理多个班级。对于管理员用户,class_id 可留空,表示其可以管理所有班级。
user 表用于存储系统用户的基本信息及角色信息。字段及其属性如下:
创建 user 表的SQL语句:
CREATE TABLE user (
user_id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(255) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
nickname VARCHAR(255),
user_role INT,
class_id VARCHAR(255)
);
设置完成后,创建 User 表并刷新,即可看到表和字段信息。
至此,数据库及各数据表创建完成,并对每个表的字段和类型进行了介绍。如需更详细的信息和创建 SQL 语句,可参考相关文档。
表设计文档手册
1. classes 表
用途: 存储班级的基本信息。
主键: class_id
外键: 无
字段说明:
class_id: 班级的唯一标识符,自增主键。
class_name: 班级的名称,不能为空。
2. student 表
用途: 存储学生的基本信息及成绩。
主键: student_id
外键: class_id 关联到 classes 表的 class_id
字段说明:
student_id: 学生的唯一标识符,自增主键。
student_name: 学生姓名,不能为空。
student_number: 学号,不能为空且唯一。
gender: 性别,1表示“男”,2表示“女”。
class_id: 学生所属班级ID,不能为空,关联 classes 表的 class_id 字段。
chinese_score: 语文成绩,可以为空。
math_score: 数学成绩,可以为空。
english_score: 英语成绩,可以为空。
3. user 表
用途: 存储系统用户的基本信息及权限。
主键: user_id
外键: 无(但 class_id 可以作为逻辑外键,关联 classes 表的 class_id 字段)
字段说明:
user_id: 用户的唯一标识符,自增主键。
username: 用户名,不能为空且唯一。
password: 密码,不能为空。
nickname: 用户昵称,可以为空。
user_role: 用户角色,1表示管理员,2表示老师。
class_id: 管理班级的ID列表,使用逗号分隔的字符串形式保存,如‘1,2,3’。
注意: 为了确保数据库的安全性和数据的完整性,应对用户密码进行加密存储。
领取专属 10元无门槛券
私享最新 技术干货