本篇文章实现了一个简易的数据库管理系统,水平有限,没有用户界面。。
开发环境为SQL Server 2008.
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
热门工具 换一换