《数据库原理与应用》
课程设计报告
设计题目:乌鸦中学(高中部)公寓管理数据库系统设计
公寓管理数据库系统设计(小二号宋体加粗)
一.数据库需求分析(4号黑体)
1.调查对象基本情况说明 (小4号黑体)
调查对象包括具体单位和业务,可自选。
① 调查单位:乌鸦中学(高中部)2019级-2022级公寓住宿信息
② 调查业务:学校公寓楼分布情况、2019-2022学校公寓住宿资费标准、2019-2022入住学生登记信息、学校公寓负责人信息、公寓宿舍配置信息(房间物品、床位数、储物柜、座椅数、阳台、独卫情况)、学生住宿缴费交易订单记录、宿舍变动情况(搬入/搬出、床位/楼号变动)等
③ 调查说明:该学校住宿模式采取年级轮转,即每年随着年级升迁,也随即搬迁宿舍
分析并画出系统的功能需求图
本次系统设计涉及公寓、房间、房间物品、床位、住宿及住宿变动情况、收费标准、应交住宿费计算、实际交费情况及过程、欠费情况等。因此按照题目要求分析功能需求图如下:
二.数据库设计(4号黑体)
1.数据库的概念结构设计(小4号黑体)
分析并画出数据库的E-R图
通过分析功能和需求,具体确认实体、属性、实体之间的关系,根据对功能的分析列出数据库关系图如下:
图表 1:数据库基本关系图
将需求分析得到的用户需求抽象为信息结构,分析数据字典中数据字典间内在语义关联,并将其抽象表示为数据的概念模式,进行连接从而得到数据库E-R图
图表 2:数据库的E-R图
2.数据库的逻辑结构设计(小4号黑体)
根据概念结构转化成数据库的逻辑结构,并指出每个表的主键和外键。同时分析每个表是否满足第三范式的要求。给出每个表的表名、各列的列名、数据类型、长度以及必要的约束,并说明各表的作用。
数据字典
表 1:公寓分布信息
列名 | 数据类型 | 允许Null值 | 备注 |
公寓编号 | varchar(5) | 否 | 主键 |
公寓属性 | varchar(5) | 否 | 约束(男/女) |
宿舍号 | varchar(5) | 否 |
注:宿舍号与公寓编号无关,例如3、4号公寓均含211房间
(1)满足第三范式:满足第一范式;且不存在部分依赖(即非主属性必须完全依赖于主属性);满足第二范式;且不存在传递依赖(即非主属性不能与非主属性之间有依赖关系,非主属性必须直接依赖于主属性,不能间接依赖主性。)
(2)表的作用:储存学校公寓楼以及每个公寓楼住宿属性以及公寓里的房间编号
表 2:学生个人信息
列名 | 数据类型 | 允许Null值 | 备注 |
学号 | varchar(10) | 否 | 主键 |
姓名 | varchar(10) | 是 | |
性别 | varchar(5) | 是 | 约束(男/女) |
联系电话 | varchar(20) | 是 | |
级别 | varchar(10) | 是 | 约束(19-22) |
(1)满足第三范式:满足第一范式;且不存在部分依赖;满足第二范式;且不存在传递依赖
(2)表的作用:储存有住宿记录学生的基本个人信息。
表 3:宿舍物品信息
列名 | 数据类型 | 允许Null值 | 备注 |
公寓号 | varchar(5) | 否 | 主键 |
宿舍号 | varchar(5) | 否 | 主键 |
床位数 | varchar(5) | 是 | |
桌子数 | varchar(5) | 是 | |
椅子数 | varchar(5) | 是 | |
储物柜 | varchar(5) | 是 | |
阳台 | varchar(5) | 是 | 约束(有/无) |
独卫 | varchar(5) | 是 | 约束(有/无) |
(1)满足第三范式:满足第一范式;且不存在部分依赖;满足第二范式;且不存在传递依赖
(2)表的作用:储存各公寓各公寓的住宿条件设备情况
表 4:入住登记信息
列名 | 数据类型 | 允许Null值 | 备注 |
学号 | varchar(10) | 否 | 主键 |
公寓编号 | varchar(5) | 是 | 约束(在表1中) |
宿舍号 | varchar(5) | 是 | 约束(在表1中) |
床位号 | varchar(5) | 是 | |
入住时间 | varchar(20) | 否 | |
宿舍住人数 | varchar(5) | 否 |
(1)满足第三范式:满足第一范式;且不存在部分依赖;满足第二范式;且不存在传递依赖
(2)表的作用:储存有住宿记录学生的基本个人信息。
表 5:宿管个人信息
列名 | 数据类型 | 允许Null值 | 备注 |
宿管工号 | varchar(10) | 否 | 主键 |
公寓号 | varchar(5) | 否 | 约束(在表1中) |
姓名 | varchar(10) | 是 | |
性别 | varchar(5) | 是 | |
年龄 | varchar(5) | 是 | |
联系电话 | varchar(20) | 是 |
(1)满足第三范式:满足第一范式;且不存在部分依赖;满足第二范式;且不存在传递依赖
(2)表的作用:储存各公寓对应管理员的个人信息
表 6:固定住宿资费标准
列名 | 数据类型 | 允许Null值 | 备注 |
年份 | varchar(5) | 否 | 主键 |
管理费 | varchar(5) | 是 | |
房费 | varchar(5) | 是 | |
空调租赁费 | varchar(5) | 是 |
(1)满足第三范式:满足第一范式;且不存在部分依赖;满足第二范式;且不存在传递依赖
(2)表的作用:储存2019-2022期间每年的住宿资费标准
表 7:住宿缴费信息
列名 | 数据类型 | 允许Null值 | 备注 |
订单编号 | varchar(20) | 否 | 主键 |
公寓编号 | varchar(5) | 否 | |
宿舍号 | varchar(5) | 否 | 约束(在表1中) |
水费 | varchar(5) | 是 | |
电费 | varchar(5) | 是 | |
维修费 | varchar(5) | 是 | |
缴费状态 | varchar(5) | 是 | 约束(已缴/未缴) |
缴费时间 | varchar(20) | 是 |
(1)满足第三范式:满足第一范式;且不存在部分依赖;满足第二范式;且不存在传递依赖
(2)表的作用:储存每一笔缴费订单中的费用明细
3.数据库的关系图设计(小4号黑体)
给出数据库的关系图结构。
图表 3关系结构图
三.主要视图设计(4号黑体)
对设计的每个视图分析建立视图的目的、写出创建命令、数据图示并进行必要性说明
(1)视图1:公寓入住登记簿
①目的:显示学生入住详细信息(学号、姓名、公寓号、床位号、入住时间、在校状态),清晰记录每个学生入住情况
②创建命令:
CREATE VIEW 公寓入住登记簿
AS(
SELECT
B.学号,C.姓名,C.级别,
B.公寓编号,D.姓名 AS 宿管姓名,A.公寓属性,
B.宿舍号,B.床位号,B.入住时间,
C.联系电话,'在读' AS 状态
FROM 入住登记信息 B
JOIN 公寓分布信息 A
ON A.公寓编号=B.公寓编号 AND A.宿舍号=B.宿舍号
JOIN 学生个人信息 C
ON C.学号=B.学号 AND C.级别 >19
JOIN 宿管个人信息 D
ON D.公寓号=A.公寓编号
UNION
SELECT TOP 100
B.学号,C.姓名,C.级别,
B.公寓编号,D.姓名 AS 宿管姓名,A.公寓属性,
B.宿舍号,B.床位号,B.入住时间,
C.联系电话,'已毕业' AS 状态
FROM 入住登记信息 B
JOIN 公寓分布信息 A
ON A.公寓编号=B.公寓编号 AND A.宿舍号=B.宿舍号
JOIN 学生个人信息 C
ON C.学号=B.学号 AND C.级别 <=19
JOIN 宿管个人信息 D
ON D.公寓号=A.公寓编号
GROUP BY C.级别,B.入住时间,B.学号,B.公寓编号,A.公寓属性,B.宿舍号,B.床位号,C.姓名,C.联系电话,D.姓名
ORDER BY B.入住时间 DESC ,C.级别 ASC, B.学号 ASC
)
③数据图示:
(2)视图二:宿舍变动明细
①目的:查询学生住宿变动明细(公寓、宿舍、床位),搬入搬出及原因
②创建命令:
CREATE VIEW 宿舍变动明细
AS(
SELECT TOP 1000
A.学号,A.姓名,C.性别,
YEAR(A.入住时间) AS 搬入年份, YEAR(A.入住时间)-(A.级别*1+2000-6-1) AS 当时年级,
A.公寓编号,A.宿舍号,A.床位号,
YEAR(A.入住时间)+1 AS 搬出年份,
'升学'AS 搬出原因, '未毕业'AS 在校状态
FROM 公寓入住登记簿 A
JOIN 入住登记信息 B
ON B.公寓编号=A.公寓编号 AND A.宿舍号=B.宿舍号
JOIN 学生个人信息 C
ON C.学号=A.学号
WHERE A.级别>19
GROUP BY
YEAR(A.入住时间), YEAR(A.入住时间)-(A.级别*1+2000-6-1),
A.学号,A.姓名,
A.公寓编号,A.宿舍号,A.床位号,
A.级别,C.性别
UNION
SELECT TOP 1000
A.学号,A.姓名,C.性别,
YEAR(A.入住时间) AS 搬入年份, YEAR(A.入住时间)-(A.级别*1+2000-6-1) AS 当时年级,
A.公寓编号,A.宿舍号,A.床位号,
YEAR(A.入住时间)+1 AS 搬出年份,
'毕业'AS 搬出原因, '已离校'AS 在校状态
FROM 公寓入住登记簿 A
JOIN 入住登记信息 B
ON B.公寓编号=A.公寓编号 AND A.宿舍号=B.宿舍号
JOIN 学生个人信息 C
ON C.学号=A.学号
WHERE A.级别 <= 19
GROUP BY
YEAR(A.入住时间), YEAR(A.入住时间)-(A.级别*1+2000-6-1),
A.学号,A.姓名,
A.公寓编号,A.宿舍号,A.床位号,
A.级别,C.性别
ORDER BY 学号 DESC,搬入年份 DESC
)
③数据视图:
(3)视图3:宿舍设施登记表
①目的:查询公寓每个房间的硬件设备、管理人员信息
②创建命令:
CREATE VIEW 宿舍设施清单
AS(
SELECT
A.公寓号,A.宿舍号,
A.床位数,A.储物柜,A.椅子数,A.桌子数,A.阳台,A.独卫,
C.宿管工号,C.姓名,C.联系电话
FROM 宿舍物品信息 A
JOIN 公寓分布信息 B
ON A.公寓号=B.公寓编号 AND A.宿舍号=B.宿舍号
JOIN 宿管个人信息 C
ON C.公寓号=B.公寓编号
GROUP BY
A.公寓号,A.宿舍号,
A.床位数,A.储物柜,A.椅子数,A.桌子数,A.阳台,A.独卫,
C.宿管工号,C.姓名,C.联系电话
)
③数据视图:
(4)视图4:费用缴纳状态
①目的:查询关于缴费的明细(水费、电费、房费…)和缴费状态
②创建命令:
CREATE VIEW 费用缴纳状态
AS(
SELECT TOP 1000
A.订单编号,
C.学号,C.姓名,
B.入住时间,B.公寓编号,B.宿舍号,
A.电费 / 6 AS 当年电费,A.水费 / 6 AS 当年水费,A.维修费 / 6 AS 当年维修费,
(A.电费 /6+A.水费 /6+A.维修费 /6) AS 活期费用,
D.房费,D.管理费,D.空调租赁,
(D.房费*1 +D.房费*1 + D.空调租赁*1) AS 固定费用,
(A.电费 /6+A.水费 /6+A.维修费 /6+D.房费*1 +D.房费*1 + D.空调租赁*1) AS 当年住宿总费用,
A.缴费状态,A.缴费时间
FROM 住宿缴费信息 A
JOIN 入住登记信息 B
ON A.公寓编号=B.公寓编号 AND A.宿舍号=B.宿舍号
JOIN 学生个人信息 C
ON C.学号=B.学号
JOIN 固定住宿资费 D
ON D.年份=YEAR(B.入住时间)
WHERE A.缴费状态 ='已缴'
UNION
SELECT TOP 1000
A.订单编号,
C.学号,C.姓名,
B.入住时间,B.公寓编号,B.宿舍号,
A.电费 / 6 AS 当年电费,A.水费 / 6 AS 当年水费,A.维修费 / 6 AS 当年维修费,
(A.电费 /6+A.水费 /6+A.维修费 /6) AS 活期费用,
D.房费,D.管理费,D.空调租赁,
(D.房费*1 +D.房费*1 + D.空调租赁*1) AS 固定费用,
(A.电费 /6+A.水费 /6+A.维修费 /6+D.房费*1 +D.房费*1 + D.空调租赁*1) AS 当年住宿总费用,
'未缴' AS 缴费状态,'---'AS 缴费时间
FROM 住宿缴费信息 A
JOIN 入住登记信息 B
ON A.公寓编号=B.公寓编号 AND A.宿舍号=B.宿舍号
JOIN 学生个人信息 C
ON C.学号=B.学号
JOIN 固定住宿资费 D
ON D.年份=YEAR(B.入住时间)
WHERE A.缴费时间 IS NULL
GROUP BY
缴费时间,缴费状态,
B.入住时间,B.公寓编号,B.宿舍号,
A.订单编号,C.学号,C.姓名,
A.电费 ,A.水费 ,A.维修费 ,
(A.电费 +A.水费 +A.维修费 ),
D.房费,D.管理费,D.空调租赁,
(D.房费*1 +D.房费*1 + D.空调租赁*1),
(A.电费 /6+A.水费 /6+A.维修费 /6+D.房费*1 +D.房费*1 + D.空调租赁*1)
ORDER BY 缴费时间 ,入住时间 ASC
)
③数据视图:
(5)视图5:住宿基础信息
①目的:查询学生-公寓-管理员全面消息
②创建命令:
CREATE VIEW 住宿基础信息
AS(
SELECT TOP 1000
A.学号,A.姓名,A.性别,A.级别,A.联系电话,
B.入住时间,B.公寓编号,B.宿舍号,
C.公寓属性,
D.床位数 AS 房间容量,D.储物柜,D.桌子数,D.椅子数,D.阳台,D.独卫,
E.姓名 AS 宿管姓名,E.联系电话 AS 宿管电话
FROM 学生个人信息 A
JOIN 入住登记信息 B
ON A.学号=B.学号
JOIN 公寓分布信息 C
ON B.公寓编号=C.公寓编号
JOIN 宿舍物品信息 D
ON D.宿舍号=B.宿舍号
JOIN 宿管个人信息 E
ON E.公寓号=B.公寓编号
GROUP BY
A.学号,A.姓名,A.性别,A.级别,A.联系电话,
B.入住时间,B.公寓编号,B.宿舍号,
C.公寓属性,
D.床位数 ,D.储物柜,D.桌子数,D.椅子数,D.阳台,D.独卫,
E.姓名,E.联系电话
ORDER BY 学号 DESC, 入住时间
)
③数据视图:
此外还设计触发器,在管理员上建立触发器,记录被修改的信息。
创建命令如下:
CREATE TRIGGER 学生
ON 学生个人信息
FOR UPDATE
AS
BEGIN
DECLARE @学号_ VARCHAR (10)
DECLARE @姓名_ VARCHAR (10)
DECLARE @性别_ VARCHAR (5)
DECLARE @联系电话_ VARCHAR(20)
DECLARE @级别_ VARCHAR(10)
SELECT @学号_= 学号 FROM DELETED
SELECT @姓名_= 姓名 FROM DELETED
SELECT @性别_= 性别 FROM DELETED
SELECT @联系电话_= 联系电话 FROM DELETED
SELECT @级别_= 级别 FROM DELETED
INSERT INTO 学生个人信息
(学号,姓名,性别,联系电话,级别)
VALUES
(@学号_,@姓名_,@性别_,@联系电话_,@级别_)
END;
CREATE TRIGGER 公寓分布
ON 公寓分布信息
FOR UPDATE
AS
BEGIN
DECLARE @公寓编号_ VARCHAR(5)
DECLARE @公寓属性_ VARCHAR(5)
DECLARE @宿舍号_ VARCHAR(5)
SELECT @公寓编号_= 公寓编号 FROM DELETED
SELECT @公寓属性_= 公寓属性 FROM DELETED
SELECT @宿舍号_ = 宿舍号 FROM DELETED
INSERT INTO 公寓分布信息
(公寓编号,公寓属性,宿舍号)
VALUES
(@公寓编号_,@公寓属性_,@宿舍号_)
END;
CREATE TRIGGER 宿管
ON 宿管个人信息
FOR UPDATE
AS
BEGIN
DECLARE @宿管工号_ VARCHAR(10)
DECLARE @公寓号_ VARCHAR(5)
DECLARE @姓名_ VARCHAR(10)
DECLARE @性别_ VARCHAR(5)
DECLARE @年龄_ VARCHAR(5)
DECLARE @联系电话_ VARCHAR(20)
SELECT @宿管工号_ =宿管工号 FROM DELETED
SELECT @公寓号_ =公寓号 FROM DELETED
SELECT @姓名_ =姓名 FROM DELETED
SELECT @性别_ =性别 FROM DELETED
SELECT @年龄_ =年龄 FROM DELETED
SELECT @联系电话_ =联系电话 FROM DELETED
INSERT INTO 宿管个人信息
(宿管工号,公寓号,姓名,性别,年龄,联系电话)
VALUES
(@宿管工号_,@公寓号_,@姓名_,@性别_,@年龄_,@联系电话_)
END;
CREATE TRIGGER 宿舍物品
ON 宿舍物品信息
FOR UPDATE
AS
BEGIN
DECLARE @公寓号_ VARCHAR(5)
DECLARE @宿舍号_ VARCHAR(5)
DECLARE @床位数_ VARCHAR(5)
DECLARE @桌子数_ VARCHAR(5)
DECLARE @椅子数_ VARCHAR(5)
DECLARE @储物柜_ VARCHAR(5)
DECLARE @阳台_ VARCHAR(5)
DECLARE @独卫_ VARCHAR(5)
SELECT @公寓号_=公寓号 FROM DELETED
SELECT @宿舍号_=宿舍号 FROM DELETED
SELECT @床位数_=床位数 FROM DELETED
SELECT @桌子数_=桌子数 FROM DELETED
SELECT @椅子数_=椅子数 FROM DELETED
SELECT @储物柜_=储物柜 FROM DELETED
SELECT @阳台_=阳台 FROM DELETED
SELECT @独卫_=独卫 FROM DELETED
INSERT INTO 宿舍物品信息
(公寓号,宿舍号,床位数,桌子数,椅子数,储物柜,阳台,独卫)
VALUES
(@公寓号_,@宿舍号_,@床位数_,@桌子数_,@椅子数_,@储物柜_,@阳台_,@独卫_)
END;
CREATE TRIGGER 入住登记
ON 入住登记信息
FOR UPDATE
AS
BEGIN
DECLARE @学号_ VARCHAR(10)
DECLARE @公寓编号_ VARCHAR(5)
DECLARE @宿舍号_ VARCHAR (5)
DECLARE @床位号_ VARCHAR (5)
DECLARE @入住时间_ VARCHAR(20)
DECLARE @宿舍住人数_ VARCHAR(5)
SELECT @学号_= 学号 FROM DELETED
SELECT @公寓编号_= 公寓编号 FROM DELETED
SELECT @宿舍号_= 宿舍号 FROM DELETED
SELECT @床位号_= 床位号 FROM DELETED
SELECT @入住时间_= 入住时间 FROM DELETED
SELECT @宿舍住人数_= 宿舍住人数 FROM DELETED
INSERT INTO 入住登记信息
(学号,公寓编号,宿舍号,床位号,入住时间,宿舍住人数)
VALUES
(@学号_,@公寓编号_,@宿舍号_,@床位号_,@入住时间_,@宿舍住人数_)
END;
CREATE TRIGGER 住宿缴费
ON 住宿缴费信息
FOR UPDATE
AS
BEGIN
DECLARE @订单编号_ VARCHAR(20)
DECLARE @公寓编号_ VARCHAR(5)
DECLARE @宿舍号_ VARCHAR(5)
DECLARE @水费_ VARCHAR(5)
DECLARE @电费_ VARCHAR(5)
DECLARE @维修费_ VARCHAR(5)
DECLARE @缴费状态_ VARCHAR(5)
DECLARE @缴费时间_ VARCHAR(20)
SELECT @订单编号_ =订单编号 FROM DELETED
SELECT @公寓编号_ =公寓编号 FROM DELETED
SELECT @宿舍号_ =宿舍号 FROM DELETED
SELECT @水费_ =水费 FROM DELETED
SELECT @电费_ =电费 FROM DELETED
SELECT @维修费_ =维修费 FROM DELETED
SELECT @缴费状态_ =缴费状态 FROM DELETED
SELECT @缴费时间_ =缴费时间 FROM DELETED
INSERT INTO 住宿缴费信息
(订单编号,公寓编号,宿舍号,水费,电费,维修费,缴费状态,缴费时间)
VALUES
(@订单编号_,@公寓编号_,@宿舍号_,@水费_,@电费_,@维修费_,@缴费状态_,@缴费时间_)
END;
CREATE TRIGGER 住宿资费
ON 固定住宿资费
FOR UPDATE
AS
BEGIN
DECLARE @年份_ VARCHAR(5)
DECLARE @管理费_ VARCHAR(5)
DECLARE @房费_ VARCHAR(5)
DECLARE @空调租赁_ VARCHAR(5)
SELECT @年份_=年份 FROM DELETED
SELECT @管理费_=管理费 FROM DELETED
SELECT @房费_=房费 FROM DELETED
SELECT @空调租赁_=空调租赁 FROM DELETED
INSERT INTO 固定住宿资费
(年份,管理费,房费,空调租赁)
VALUES
(@年份_,@管理费_,@房费_,@空调租赁_)
END;
在原表中通过一个状态属性标示是否被删除,因此数据并不会真正被删除,只需要记录被修改的信息。利用触发器记录被修改的信息,确保数据安全备份。
四.功能模块结构设计(4号黑体)
如图示,,其中各项从左往右前5部分功能都包括各自信息的增删改查,第六项功能为学生住宿变动信息备份,也就是已修改信息储存。
五.主要功能及程序界面说明(4号黑体)
选择5个以上的功能及程序界面进行说明。
- 利用视图任意查询公寓住宿生登记入住、搬入搬出信息(时间、具体宿舍 号、变更原因、是否毕业)
例如:查询19级学号1902学生的所有入住记录中的变动原因
执行命令为:
SELECT
A.学号, A.姓名, A.搬入年份,A.搬出原因
FROM 宿舍变动明细 A
WHERE A.学号=1902 AND A.搬入年份+2 <2022
UNION
SELECT
A.学号, A.姓名, A.搬入年份,'升学'AS 搬出原因
FROM 宿舍变动明细 A
WHERE A.学号=1902 AND A.搬入年份+2 >=2022
程序界面:
- 查询公寓住宿配置详情明细
例如:分别查询七年级、八年级、九年级的住宿配置情况,以201(男)301(女)宿舍为例
执行命令为:
SELECT
A.公寓号, '男' AS 宿舍属性,A.宿舍号,A.储物柜,A.床位数,A.桌子数,A.桌子数,A.独卫,A.阳台
FROM 宿舍设施登记表 A
WHERE A.宿舍号=201 AND A.公寓号 IN (3,7) OR A.宿舍号=211 AND A.公寓号=5
SELECT
A.公寓号, '女' AS 宿舍属性,A.宿舍号,A.储物柜,A.床位数,A.桌子数,A.桌子数,A.独卫,A.阳台
FROM 宿舍设施登记表 A
WHERE A.宿舍号 IN (201,301,311) AND A.公寓号 IN (4,6,8)
程序界面:
- 查询住宿生住宿费用并显示明细,以及查询订单缴费状态
例如:查询21级学号为2103学生的缴费订单情况
执行命令为:
SELECT
A.学号,A.姓名,A.缴费时间,A.订单编号,A.缴费状态,A.活期费用+A.固定费用 AS 费用总和
FROM 费用缴纳状态 A
WHERE A.学号=2103
程序界面:
- 修改、删除、增加公寓管理数据库基本信息
例如:修改2021年的缴费标准,(2021,管理费10,房费80,空调租赁)为(2021,管理费15,房费90,空调租赁20),修改前后分别查询当年缴费订单
执行命令为:
SELECT *
FROM 费用缴纳状态;
UPDATE 固定住宿资费
SET 管理费=15,房费=90,空调租赁=20
WHERE 年份=2021;
SELECT *
FROM 费用缴纳状态;
程序界面:
注:上半部分为修改前,为半部分未修改后
- 统计并计算住校学生自入住以来的缴费情况(已缴费用和欠费情况)
例如:查询所有入住学生已缴总费用、欠费总数
执行命令为:
SELECT
A.姓名,A.学号,SUM(A.当年住宿总费用) AS 已缴总费用,NULL AS 总暂欠费用,
FROM 费用缴纳状态 A
WHERE A.缴费状态='已缴'
GROUP BY A.姓名,A.学号
UNION
SELECT
A.姓名,A.学号,NULL AS 已缴总费用 ,SUM(A.当年住宿总费用) AS 总暂欠费用
FROM 费用缴纳状态 A
WHERE A.缴费状态='未缴'
GROUP BY A.姓名,A.学号
程序界面:
六.总结(4号黑体)
1.设计方案的主要优点及不足(小4号黑体)
我的系统特色:
A、数据结构化 ,数据之间具有联系,面向整个系统。
B、数据的共享性高,冗余度低,易扩充 。
C、数据独立性高 。
D、数据由DBMS统一管理和控制。
缺点:在对数据库进行设计的过程中,结构比较简单,不能够应对是否能复杂的情况,只能对学生住宿的简单信息进行操作。另外,在安全性方面做得也不够完善,主要原因在于设计的重点是功能的正常执行,而不是在每一个细节做到完美。另外,执行虚度方面没有做出专门的优化。因此,这个数据库系统需要我在以后相信的去完成每一个细节。
2.收获及建议(小4号黑体)
在设计数据库的过程中我遇到过非常多的问题:
首先,在设计阶段有非常多的数据项,当时觉得不好分类和处理,而且有很多的数据项和许多实体都有关系。最后通过查看课本例题,问同学等方式将各个数据项进行归类,对于和多个实体之间都有关系的数据项可以建立一个关系表,从而完成归类。接着,在添加数据的过程中,我忽略掉了数据的参照完整性,导致许多数据不能够正常加入。后来经过同学的提示,我将数据进行了统一分析,保持所有的数据一致,最后数据可以正常输入。
最后,每个表中的数据更改完成之后,更改后的数据会丢失找不到了。对于这个问题就解决办法为加入触发器,记录表中信息的修改前的值,成功解决问题。
收获:对于一个系统,数据库的设计是非常重要的,数据库设计决定了以后数据好不好维护。后期需求好不好展。同时也决定了系统的性能。一个坏的数据库设计一个功能点的改动可能会设计多张表的改动。一不小心可能就会引起数据的不一致。为了解决这些问题。在数据库设计之初就要考虑这些问题。减少后期系统维护量。