这是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非空为必填空,并且为外键。这是我的设计,你或许会觉得我这样设计是不对的,那么没关系你可以按照自己的想法来设计这些表,要相信自己的想法肯定是对的。
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")
);
其他的表不一一解释了,相信大家能够看得懂其中的含义,还是重申大家要自己设计这些表,此处的代码仅代码我自己的想法。
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语句来执行,代码附上。
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来实现的,还有就是自动运行,可以设置数据备份,防止数据不小心删除了。