数据库QTSQLite【QT+SQLite】实现大学生课程学习管理与成绩评价系统(2)——数据库实现
Anchen 这是GIS系统可视化的第二篇文章,还没有看过第一篇系统整体设计的小伙伴可以在专栏里去寻找查阅,那么本篇文章将着重讲述数据库的设计和实现也就是SQLite的部分。
那么在最开始请允许我先介绍一下在此处用到的软件——Navicate for SQLite,先奉上官网[https://www.navicat.com.cn/products/navicat-for-sqlite],软件是需要收费的那么就各显神通了。Navicate for SQLite与一般的大型数据库比如SQL Sever相比最大的优点就是轻量级并且操作简便,相信你也会在接下来的学习和实操过程体会到这一区别。因为实习的特殊要求,我此处依旧使用了SQL语句来创建表、装入数据进行测试,下文中也会介绍更为简便的方式进行操作。
1. 编写模式
那么接下来我们将按照功能设计时设计的表及字段进行数据库的闯创建,再次附上设E-R图。
第一步我们打开安装好的Navicate for SQLite软件,打开的界面如下,相比于SQL Sever非常的简洁,Navicate同款的for MySQL等兄弟也同样的简洁话少。
第二部打开左上角的连接,界面如下。我们需要新建一个连接,选择新建SQLite 3或者SQLite 2,再点击数据库文件这一行输入文件名并选择存储的位置。
那么这里我就直接打开我创建好的数据库进行演示啦,所有按需求建立的表如下图所示。
大家新建的数据库是没有任何表格的,别急我们用SQL语言来创建,点击数据库名称右键命令列界面输入SQL语句进行创建。SQL语句的语言规范大家可以自行Chat,此处不再赘述,我实习用到的SQL语句会随文附在文中。
简单来说,下面这段代码创建了一个名为STUDENT的表,并将学号也就是stu_num设置为逐渐,并设置班号也就是cl_num非空为必填空,并且为外键。这是我的设计,==你或许会觉得我这样设计是不对的,那么没关系你可以按照自己的想法来设计这些表,要相信自己的想法肯定是对的==。
1 2 3 4 5 6 7 8 9 10
| CREATE TABLE STUDENT ( "stu_num" CHAR(60) PRIMARY KEY, "stu_name" TEXT, "stu_gender" TEXT, "birth_year" INT, "birth_month" INT, "cl_num" CHAR(60) NOT NULL, FOREIGN KEY("cl_num") REFERENCES CLASS("cl_num") );
|
其他的表不一一解释了,相信大家能够看得懂其中的含义,还是重申大家要自己设计这些表,此处的代码仅代码我自己的想法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
| CREATE TABLE TEACHER ( "te_num" CHAR(60) PRIMARY KEY, "te_name" TEXT, "te_title" TEXT, "te_tel" TEXT, "de_num" CHAR(60) NOT NULL, FOREIGN KEY("de_num") REFERENCES DEPARTMENT("de_num") );
CREATE TABLE DEPARTMENT ( "de_num" CHAR(60) PRIMARY KEY, "de_name" TEXT, "de_tel"CHAR(60), );
CREATE TABLE LESSON ( "le_num" CHAR(60) PRIMARY KEY, "le_name" TEXT, "le_type" CHAR(32) NOT NULL, "le_credit" REAL NOT NULL, "le_time" TEXT, "le_people" BIGINT, "cr_num" CHAR(60) NOT NULL, FOREIGN KEY("le_type") REFERENCES Course_type("le_type"), FOREIGN KEY("cr_num") REFERENCES CLASSROOM("cr_num") );
CREATE TABLE CLASSROOM ( "cr_num" CHAR(60) PRIMARY KEY, "cr_floor" INT, "cr_commit" INT, "cr_location" TEXT );
CREATE TABLE CLASS ( "cl_num" CHAR(60) PRIMARY KEY, "de_num" CHAR(60) NOT NULL, FOREIGN KEY("de_num") REFERENCES DEPARTMENT("de_num") );
CREATE TABLE StuL ( "stu_num" CHAR(60) , "le_num" CHAR(60) NOT NULL, "course" INT NOT NULL, "make_up" CHAR(12), PRIMARY KEY ("stu_num","le_num"), FOREIGN KEY("stu_num") REFERENCES STUDENT("stu_num"), FOREIGN KEY("le_num") REFERENCES LESSON("le_num") );
CREATE TABLE TC ( "te_num" CHAR(60) , "le_num"CHAR(60) NOT NULL, PRIMARY KEY ("te_num","le_num"), FOREIGN KEY("te_num") REFERENCES TEACHER("te_num"), FOREIGN KEY("le_num") REFERENCES LESSON("le_num") );
CREATE TABLE Course_type ( "le_type" CHAR(32) PRIMARY KEY );
CREATE TABLE Meancourse ( "stu_num" CHAR(60) , "stu_name" TEXT, "cl_num" CHAR(60) NOT NULL, "meancourse" REAL NOT NULL, PRIMARY KEY ("stu_num"), FOREIGN KEY("stu_num") REFERENCES STUDENT("stu_num"), FOREIGN KEY("cl_num") REFERENCES CLASS("cl_num") )
|
那么接下来由繁入简,介绍更简单直观的操作方法,直接点击鼠标就能够实现操作。
如下图,右键表新建表你就会跳转到设计表的界面,然后…
然后你就能看到你所有想要的操作了。嗯对,就是这么简单,这就是Navicate相比传统的数据库软件最大的好处。字段的增减和属性设置全在这啦。
2. 数据载入
那么接下来我们往Navicate中装入数据,同样由繁入简(毕竟课设最大的目的是SQL语句,啊吧啊吧~),先介绍SQL语句装入方式,同样是在命令列界面中,输入SQL语句来执行,代码附上。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| INSERT INTO Course_type VALUES ('基础必修'), ( '专业必修'), ( '专业选修');
INSERT INTO DEPARTMENT("de_num","de_name") VALUES ('D11','地理系'), ('D12','空间信息系');
INSERT INTO CLASS("cl_num","de_num") VALUES ( '114211','D12'), ( '114212','D12'), ( '114213','D12'), ( '114214','D12'), ( '118211','D11'), ( '118212','D11');
|
那么成功创建并增加了数据后数据库中各关系的情况如下,分别为系、班级、学生、教师、课程、教室、课程性质、学生-课程、教师-课程的关系模式。
那么简单方法也是在设计表的界面直接点的行列进行输入。
好了到这里数据库的表和内容就已经全部实现了,还有一些其他的功能,比如说查询、索引、触发器,也是可以直接通过Navicate来实现的,还有就是自动运行,可以设置数据备份,防止数据不小心删除了。