数据库管理系统
本篇文章实现了一个简易的数据库管理系统,水平有限,没有用户界面。。
1 需求分析
系统描述:本题目主要功能是实现学校社团的信息化管理。本系统设计要求随着大学生校园文化的不断丰富,各种学生社团应运而生,对所有学生社团进行统一管理。
2功能描述:
学生信息存储 学号,姓名,性别,班级 权限等
社团信息存储 名称 时间 编号 活动等
3有何安全性与完整性方面的要求(参照所给出的语义规则),对不同的用户有何不同的系统使用权限等。
一般用户可以对社团信息进行查询、浏览;管理员可以对社团信息进行录入和维护,可以对社团成员进行增加、修改和删除,可以进行社团以及成员信息进行查询、统计和生成报表等。
查询:可以对学生所在的社团进行查询,管理员可以增加社团,如果社员不再参加社团可以选择删除,从而从数据库中删除其有关记录。学生不能增加社团,不能删除一个社团
数据事实
学号 |
姓名 |
性别 |
年龄 |
社团编号 |
权限 |
电话 |
001 |
小明 |
女 |
18 |
01 |
管理员 |
178639 |
002 |
小华 |
男 |
20 |
02 |
成员 |
1782569 |
003 |
小呆 |
男 |
19 |
03 |
成员 |
1783159 |
004 |
小丽 |
女 |
19 |
04 |
管理员 |
1784674 |
005 |
小君 |
男 |
18 |
05 |
成员 |
1784527 |
006 |
小美 |
女 |
20 |
06 |
成员 |
1788534 |
007 |
小天 |
女 |
18 |
07 |
成员 |
1788216 |
008 |
小鹰 |
男 |
18 |
08 |
成员 |
1786314 |
编号 |
名称 |
建立时间 |
主要活动 |
01 |
2007-3-5 |
数学比赛 |
|
02 |
ACM协会 |
2009-5-15 |
浪潮杯大赛 |
03 |
摄影协会 |
2012-5-12 |
摄影比赛 |
04 |
轮滑社团 |
2013-2-25 |
轮滑比赛 |
05 |
2010-10-25 |
网页设计大赛 |
|
06 |
跆拳道 |
2014-11-3 |
跆拳道比赛 |
07 |
健美操 |
2012-4-25 |
健美操比赛 |
主要用户视图
概念结构设计
1 局部ER图
2.2 全局ER图
逻辑结构设计
模式设计:按系统整体E-R模型,写出关系模式;并利用数据字典加以描述。(如每个关系模式有何属性、属性的类型、属性值的长度、是否可取空值、是否为主码、有何约束条件等信息)
学生:学号 性别 年龄 姓名 部门 权限 电话
社团 :编号 名称 创建时间 主要活动
学生表
社团表
4 物理结构设计
为了提高在表中搜索元组的速度,在实际实现的时候应该基于某些属性建立索引。给出所建立的索引。(包括按哪些表中哪些属性按升序还是降序来创建索引及相应的T-SQL的创建语句)。
学生建立索引,按学号升序建唯一索引。
社团建立索引,按编号升序建唯一索引。
5 主要功能详细设计
数据的修改
UPDATe student
SET sno = '009' where sname = '小鹰'
数据的查询
单表:
查询学号为003号学生的学生姓名
SELECT sname from student WHERE ssno = '003'
查询性别为男年龄为18岁的学生的姓名
SELECT sname from student WHERE ssex = '男' and sage = 18
连接:
查询学号为008的参加社团的创建时间
SELECT association.atime from student,association
where student.sno = '008' and student.ssect = association.ano
操作结果集:
查询学号008和学号009号同学共同选的社团名称
SELECT ssect from student where sno = '008'
Intersect
SELECT ssect from student where sno = '009'
修改数据
修改小鹰同学的学号为019
UPDATe student
SET sno = '019' where sname = '小鹰'
删除数据
删除04号社团
delete from association
where ano = '04'
创建索引
CREATE index student_sno ON student(sno ASC)
CREATE index association_ano ON association(ano ASC)
创建函数参数为社团名称输出学生学号,姓名,社团创建时间
CREATE function st_func(@major varchar(20)) returns table
AS return
(
select student.sno, student.sname, association.atime
from student,association
where association.aname = @major and student.ssect = association.ano
)
调用函数 输出参加摄影协会的学生学号,姓名与社团成立日期
SELECT * FROM st_func('摄影协会')
创建游标 输出学生表中第3行,第5行数据
declare sh1_cursor cursor static
for
select * from student
open sh1_cursor
fetch absolute 3 from sh1_cursor
fetch absolute 5 from sh1_cursor
close sh1_cursor
deallocate sh1_cursor
-创建存储过程 查询每个学生的电话号码
CREATE procedure student_telp
AS
select sno, stelp AS telphone from student
go
执行存储过程
execute student_telp
在学生表创建触发器,插入修改学生时提示
CREATE trigger reminder ON student
FOR INSERT ,UPDATE
AS print '你在插入或修改student的数据'
在社团表创建触发器删除社团时输出删除的社团数
CREATE trigger del_count ON association
FOR delete
AS
declare @count varchar(50)
set @count = STR (@@rowcount) + '个社团被删除'
SELECT @count
return
源代码:
--创建大学生社团人员管理系统数据库
CREATE DATABASE ASSOCIATION_MANAGEMENT
ON PRIMARY
(
NAME = 'ASSOCIATION_MANAGEMENT_DATA',
FILENAME = 'E:\DATA\ASSOCIATION_MANAGEMENT_DATA.MDF',
SIZE = 5MB,
MAXSIZE = 20MB,
FILEGROWTH = 20%
)
LOG ON
(
NAME = 'ASSOCIATION_MANAGEMENT_LOG',
FILENAME = 'E:\DATA\ASSOCIATION_MANAGEMENT_DATA. LDF',
SIZE = 5MB,
MAXSIZE = 10MB,
FILEGROWTH = 2MB
)
--创建学生表
USE ASSOCIATION_MANAGEMENT
CREATE TABLE student
(
sno varchar(20) PRIMARY KEY, --学号
sname char(10) NOT NULL, --姓名
ssex char(10) , --性别
sage int, --年龄
ssect char(10) NOT NULL, --社团号
sguris char(10) NOT NULL, --权限
stelp varchar(20) --电话
)
--创建社团表
USE ASSOCIATION_MANAGEMENT
CREATE TABLE association
(
ano varchar(20) PRIMARY KEY, --编号
aname char(10) NOT NULL, --名字
atime date, --创建时间
aarty varchar(20) --主要活动
)
--插入数据
USE ASSOCIATION_MANAGEMENT
GO
INSERT INTO student(sno,sname,ssex,sage,ssect,sguris,stelp)
VALUES
('001','小明','女',18,'01','管理员','178639'),
('002','小华','男',20,'02','成员','1782569'),
('003','小呆','男',19,'03','成员','1783159'),
('004','小丽','女',19,'04','管理员','1784674'),
('005','小君','男',18,'05','成员','1784527'),
('006','小美','女',20,'06','成员','1788534'),
('007','小天','女',18,'07','成员','1788216'),
('008','小鹰','男',18,'08','成员','1786314')
INSERT INTO association(ano,aname,atime,aarty)
VALUES('01','数学建模','2007-3-5','数学比赛'),
('02','ACM协会','2009-5-15','浪潮杯大赛'),
('03','摄影协会','2012-5-12','摄影比赛'),
('04','轮滑社团','2013-2-25','轮滑比赛'),
('05','计算机','2010-10-25','网页设计大赛'),
('06','跆拳道','2014-11-3','跆拳道比赛'),
('07','健美操','2012-4-25','健美操比赛'),
('08','篮球队','2006-9-20','CUBA')
--创建视图
CREATE VIEW student_association
AS
SELECT student.sno'学号', student.sname'姓名', student.ssex'性别', student.sguris'权限',
student.stelp'电话', association.aname'名字',association.atime'创建日期',association.aarty'活动'
FROM student,association
WHERE student.ssect = association.ano
GO
--查询
USE ASSOCIATION_MANAGEMENT
GO
SELECT sname FROM student WHERE ssno = '003'
SELECT sname FROM student WHERR ssex = '男' and sage = 18
SELECT sname, ssex from student
SELECT sname from student where ssect='02'
SELECT sname,ssect from student WHERE where sage > 19 OR sage < 19
SELECT avg(sage) AS 平均年龄 FROM student
SELECT student.sno,student.sname,association.ano,association.aname,atime,aarty
FROM student,association
WHERE student.ssect=association.ano
SELECT association.atime from student,association
where student.sno = '008' and student.ssect = association.ano
SELECT ssex from student where sno = '002'
Intersect
SELECT ssex from student where sno = '003'
--修改数据
UPDATE student
SET sno = '009' WHERE sname = '小鹰'
--删除数据
DELETE FROM student
WHERE sno = '009'
--创建索引
CREATE unique INDEX student_sno ON student(sno ASC)
CREATE INDEX association_ano ON association(ano ASC)
--删除索引
DROP INDEX association_ano ON association
--if else 语句
if(SELECT sage FROM student where sno ='002' > 18)
print('年龄比较大')
else
print('年龄不大')
--创建函数 参数为社团名称 输出 学生学号,姓名 ,社团创建时间
CREATE FUNCTION st_func(@major varchar(20)) reutrn table
AS RETURN
(
select student.sno, student.sname, association.atime
from student,association
where association.aname = @major and student.ssect = association.ano
)
--调用函数
SELECT * FROM st_func('摄影协会')
--创建游标 输出学生表中第3行,第5行数据
DECLARE sh1_cursor CURSOR STATIC
FOR
SELECT * FROM student
OPEN sh1_cursor
FETCH ABSOLUTE 3 FROM sh1_cursor
FETCH ABSOLUTE 5 FROM sh1_cursor
CLOSE sh1_cursor
DEALLOCATE sh1_cursor
--创建存储过程 查询每个学生的电话号码
CREATE PROCEDURE student_telp
AS
SELECT sno, stelp AS telphone from student
GO
--执行存储过程
EXECUTE student_telp
--在学生表创建触发器,插入修改学生时提示
CREATE TRIGGER reminder ON student
FOR INSERT, UPDATE
AS print('你在插入或修改student的数据')
--在社团表创建触发器 删除社团时输出删除的社团数
CREATE TRIGGER del_count ON association
FOR DELETE
AS
DECLARE @count varchar(50)
SET @count = STR(@@rowcount) + '个社团被删除'
SELECT @count
RETURN
文章最后发布于: 2019-01-28 13:23:53
相关阅读
第一章:掌握你的时间1.管理者有效性的三个基础:记录时间、安排时间、集中时间。2.时间:人们是无法通过租、雇、买的,也不可能通过其他
笔者为我们介绍了做好教师管理工作是多么重要,好的教师管理工作可以为学生、为机构提供良性贡献。接下来,让我们来看看笔者是怎么说
我一直把知乎的成功当作自己的奋斗目标。我觉得从理论上说社区管理这么大的一个话题, 无非是在扯淡。我结合本人的实际工作做一个
写文档经常需要多个版本,一般采用复制或另存为的方式,传说在word 2007之前有版本管理,被阉割了?网上搜到的靠版本管理方式采用代码管
经过十年的快速发展,母婴零售的红利期宣告结束。出生率降低、消费升级、渠道多样化等问题已经显露出来,对于线下门店来说,传统的运营