数据库原理实验报告
一、 背景
根据课程与巩固所学知识的要求,以所给练习题为例,进行关系型数据库的操作实验,并对结果进行记录。
二、实验要求
根据课程资料区中要求,实现每个小问对应的查询语句,并给出语句及所得结果,对于复杂或意料外结果进行分析。
三 、 实验设计
1. 软硬件基础
我们以运行在Windows10系统上的MySql8.0.34为例。设备使用11代i5处理器,4GB内存及50GB硬盘存储。足够安装、使用数据库软件并实现实验要求。
2. 数据库设计
在实验要求中存在学生表、课程表、成绩表,同时又存在教师表,但在后面的实验过程中发现课程表中也包含执教教师的信息,即教师信息在两个表中进行了冗余存储。为了避免空间的浪费,单独设计一个教授表存储教师与课程的关系,顺便也为以后的拓展保留空间。当然这样也对接下来的实验语句带来了一定的变化,使得实验过程相对复杂了一些。
我们用到了学生实体下的姓名、学号、性别;课程实体下的课程名、课程编号;教师实体下的姓名、工号。工资等属性。同时学生和课程间存在“选修”的1对n关系;课程和教师间存在“教授”的1对n关系。故设计如下数据库,并写入数据:
按图示建立数据库,有5个表,分别是:
CREATE TABLE students(
Sno varchar(12),
Sname varchar(12),
Ssex char(2),
Semail varchar(32),
Scredit numeric(3,2),
PRIMARY KEY(Sno)
);
CREATE TABLE courses(
Cno varchar(12),
Cname varchar(32),
Ccredit numeric(3,2),
Tno varchar(12),
PRIMARY KEY(Cno),
FOREIGN KEY(Tno)
);
CREATE TABLE teachers(
Tno varchar(12),
Tname varchar(12),
Tsalary numeric(9,2),
PRIMARY KEY(Tno)
);
CREATE TABLE reports(
Sno varchar(12),
Cno varchar(12),
PRIMARY KEY(Sno, Cno),
score int,
FOREIGN KEY(Sno) REFERENCES students(Sno),
FOREIGN KEY(Cno) REFERENCES courses(Cno)
);
CREATE TABLE teachings(
Tno varchar(12),
Cno varchar(12),
PRIMARY KEY(Tno)
);
四、实验结果
按照实验要求执行对应语句,得到如下结果(课程题目较多,有删减):
注意到没有名称含“算法”的课程,添加一个后:
数据中不包含S26,故用S2代替
多少有点长了。
五、总结
通过实验,我巩固了所学。通过自行设计数据库并使用的方式,更加深刻的理解了数据库的设计方法、使用技巧。
可以发现,其实SQL语句虽然贴近自然语言,但还是比较繁杂。以编程语言提供的库进行数据库的使用是更加便捷的选择。