数据库建模:学生信息系统搭建实验

首先必须理清学生信息系统有哪些实体,这些实体之间的关系又是如何的,他们之间是怎么进行关联的

实体有哪些:
学生表(student)
专业表(major)
课程表(course)
成绩表(grade)
班级表(class)
老师表(teacher)
宿舍表(dorm)
考勤表(checking)

这里我用Visio画的数据库ER图来分析:
大致实体ER图:
在这里插入图片描述
详细ER图:
在这里插入图片描述

二、数据库建模(建表):

1、创建专业表(major):

create table major(id int primary key auto_increment,name char(20)) charset=utf8;

数据表结构如下:
在这里插入图片描述
2、创建课程表(course)

create table course(id int primary key auto_increment,name char(20)) charset=utf8;

数据表结构如下:
在这里插入图片描述
3、创建专业和课程的中间表(major_mid_course)

create table major_mid_course(
id int primary key auto_increment,major_id int,
course_id int,
foreign key(major_id)references major(id),
foreign key(course_id) references course(id)
);

数据表结构如下:
在这里插入图片描述
4、创建成绩表(grade)

create table grade(
id int primary key auto_increment,
score int,stu_id int,course_id int,
foreign key(course_id) references course(id),
foreign key(stu_id) references student(id)
) charset=utf8;

数据表结构如下:
在这里插入图片描述
5、班级表(class)

create table class(
id int primary key auto_increment,
name char(20),
major_id int,foreign key(major_id) references major(id)
) charset=utf8;

数据表结构如下:
在这里插入图片描述
6、老师表(teacher)

create table teacher(id int primary key auto_increment,name char(20)) charset=utf8;

数据表结构如下:
在这里插入图片描述
7、班级和老师的中间表(class_teacher)

create table class_teacher(
id int primary key auto_increment,
class_id int,
tea_id int,
foreign key(class_id) references class(id),
foreign key(tea_id) references teacher(id)
);

数据表结构如下:
在这里插入图片描述
8、课程和老师的中间表(course_teacher)

create table course_teacher(
id int primary key auto_increment,
course_id int,
tea_id int,
foreign key(course_id) references course(id),
foreign key(tea_id) references teacher(id)
);

数据表结构如下:
在这里插入图片描述
9、宿舍表(drom)

create table drom(id int primary key auto_increment,name char(20)) charset=utf8;

数据表结构如下:
在这里插入图片描述
10、学生表(student)

create table student(
id int primary key auto_increment,
stu_num char(24),
name char(24),
age int,
gender char(20),
phone char(20),
major_id int,
class_id int,
drom_id int,
foreign key(major_id) references major(id),
foreign key(class_id) references class(id),
foreign key(drom_id) references drom(id)
) charset=utf8;

数据表结构如下:
在这里插入图片描述
11、学生和老师的中间表(student_teacher)

create table student_teacher(
id int primary key auto_increment,
stu_id int,
tea_id int,
foreign key(stu_id) references student(id),
foreign key(tea_id) references teacher(id)
);

数据表结构如下:
在这里插入图片描述
12、创建考勤表(checking)

create table checking(
id int primary key auto_increment,
date datetime,
status char(1),
stu_id int,foreign key(stu_id) references student(id)
) charset=utf8;

数据表结构如下:
在这里插入图片描述

二、数据插入:

1、插入专业表(major)数据

idname
1python
2java
3ui
4php
5linux

使用python来插入数据
在这里插入图片描述
在这里插入图片描述
2、插入课程表(course)数据

idname
1计算机基础
2python基础
3java编程
4ps
5html
6数据库
7linux基础

在这里插入图片描述
在这里插入图片描述
3、插入专业和课程关系表(major_mid_course)数据

idmajor_idcourse_id
111
212
315
416
517
621
723
825
926
1031
1134
1241
1345
1451
1557

在这里插入图片描述
4、插入班级表(class)数据

idnamemajor_id
1py05061
2ui03043

在这里插入图片描述
5、插入老师表(teacher)数据

idname
1张老师
2边老师
3申老师

在这里插入图片描述
6、插入班级-老师关系表(class_teacher)数据

idclass_idtea_id
112
213
321

在这里插入图片描述
在这里插入图片描述
7、插入课程-老师关系表(course_teacher)数据

idcourse_idtea_id
113
223
352
462
541

在这里插入图片描述
在这里插入图片描述
8、插入宿舍表(drom)数据

idname
1101
2102
3103

在这里插入图片描述
9、插入学员表(student)数据

idstu_numnameagegenderphonemajor_idclass_iddrom_id
11001小李1913333331001112
21002小张2013333331002112
31003小王1813333331003112
41004小东1913333331004112
51005小丽1713333331005113
61006小花1913333331006113
71007小夏2013333331007113
81008小美1813333331008113
91009小韩1913333331009321
101010小吴2213333331010321
111011小牛1913333331011321
121012小朱1813333331012321

在这里插入图片描述
10、插入学员-老师关系表(student_teacher)数据

idstu_idtea_id
112
222
332
442
552
662
772
882
991
10101
11111
12121
1313
1423
1533
1643
1753
1863
1973
2083

在这里插入图片描述
11、插入成绩表(grade)数据(这里只插入python基础课程成绩)

idscorestu_idcourse_id
18712
29822
38832
46542
57752
66662
78972
87882

在这里插入图片描述
12、插入考勤表(checking)数据

iddatestatusstu_id
12019-6-14 9:05:34N2
22019-6-14 8:40:55Y3
32019-6-14 8:59:55N4
42019-6-13 8:30:22Y4

在这里插入图片描述
三、数据库优化:
1、给student表的name字段创建索引,(由于学生查询频繁),加快查询速度:
在这里插入图片描述
2、给student表创建视图,实现安全性(虚表)
在这里插入图片描述
在这里插入图片描述

四、用户授权:
1、创建用户并设置密码

create user nhkj@'10.10.21.%' identified by '123';

在这里插入图片描述
2、授权用户访问student_view表的查询权限
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、查询一下条件语句
1、查询所有学员

 select name from student;

在这里插入图片描述
2、查询所有男生

select name from student where gender='男';

在这里插入图片描述
3、查询所有女生

select name from student where gender='女';

在这里插入图片描述
4、查询所有缺勤学员

select name from student where id in (select stu_id from checking where status='N');

在这里插入图片描述
5、查询所有python专业的学员

select s.name,m.name from student as s inner join major as m on s.major_id=m.id and m.id=1;

在这里插入图片描述
6、查询所有python专业上过python基础的学员
为演示效果,我将‘小花’这个学生取消和‘申老师’关系,由于‘申老师’是教python基础课程的,所有‘小花’就是所有python专业学生里唯一没有上过python基础课程的学生,剩下的7位都上过小花的id为6

 delete from student_teacher where stu_id=6;

在这里插入图片描述

SELECT
s.id AS s_id,
s.name AS s_name,
c.id AS c_id,
c.name AS c_name
FROM
student AS s
INNER JOIN student_teacher AS st
INNER JOIN teacher AS t
INNER JOIN course_teacher AS ct
INNER JOIN course AS c
WHERE
s.id=st.stu_id
AND
st.tea_id=t.id
AND
t.id=ct.tea_id
AND
ct.course_id=c.id
AND
c.id=2;

在这里插入图片描述
7、查询所有python 0506班所有学员

select s.id as s_id,s.name as s_name,c.id as c_id,c.name as c_name from student
 as s inner join class as c on s.class_id=c.id and c.id=1;

在这里插入图片描述
8、查询所有python 0506班所有学员python基础课成绩

select s.name as s_name,c.name as c_name,g.score from student as s inner join
course as c inner join grade as g where s.id=g.stu_id and g.course_id=c.id;

在这里插入图片描述
9、查询python 0506班任课老师

select c.id as c_name,c.name as c_name,t.id as t_name,t.name as t_name from
 class as c inner join class_teacher as ct inner join teacher as t where c.id=ct.class_id and ct.tea_id=t.id and c.id=1;

在这里插入图片描述
10、查询边老师教过的学员

select t.id as t_id,t.name as t_name,s.id as s_id,s.name as s_name from teacher as t inner join 
student_teacher as st inner join student as s where t.id=st.tea_id and st.stu_id=s.id and t.name='边老师';

在这里插入图片描述
11、查询边老师教过的班级

select t.id as t_id,t.name as t_name,c.id as c_id,c.name as c_name 
from class as c inner join class_teacher as ct inner join teacher as t 
where c.id=ct.class_id and ct.tea_id=t.id and t.name='边老师';

在这里插入图片描述

12、查询小王同学python基础课程的成绩

select s.id as s_id,s.name as s_name,c.name as c_name,g.score 
from student as s inner join grade as g inner join course as c 
where c.id=g.course_id and s.id=g.stu_id and g.course_id=2 and s.id=3;

在这里插入图片描述
13、查询所有python基础课程的学员成绩

select s.id as s_id,s.name as s_name,c.name as c_name,g.score
from student as s inner join grade as g inner join course as c 
where c.id=g.course_id and s.id=g.stu_id and g.course_id=2;

在这里插入图片描述

14、查询python 0506班所有的宿舍

select c.id as c_id,c.name as c_name,d.id as d_id,d.name as d_name
from class as c inner join student as s inner join drom as d 

where c.id=s.class_id and s.drom_id=d.id and c.id=1;
在这里插入图片描述

15、查询python 0506班 102宿舍的所有学生的成绩

select c.name as c_name,d.name as d_name,s.name as s_name,g.score 
from class as c inner join student as s inner join drom as d inner join grade as g 
where c.id=s.class_id and s.drom_id=d.id and g.stu_id=s.id and c.id=1 and d.id=2;

在这里插入图片描述

转载于:https://www.cnblogs.com/ilovepython/p/11068852.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值