1、机房管理系统数据库设计学院机房管理系统 数据库设计说明书设计人: 学号: 班级: 学院: 一、需求分析1.业务流程图2.数据流图3.数据字典二、概念设计1、实体属性图2、全局E-R图三、逻辑设计1、表间关系图2、关系模式四、数据库实现1、创建数据库2、创建表2、创建存储过程和触发器一、需求分析针对一般高校机房管理系统的需求分析、通过对学生上机过程、教学班上机过程、注册过程、充值过程、的容的数据流程分析一现设计如下数据项和数据结构(1)机房基本信息:包括机房号、机房名、计算机数目、管理人等(2)计算机基本信息:包括计算机IP地址、编号、机房号、品牌、备注等(3)学生基本信息:包括学号、性名、行政
2、班等(4)用户基本信息:包括用户名、学号、密码、余额等(5)学生充值基本信息:包括用户名、充值时间、金额、办理人等(6)机房收费标准基本信息:包括机房号、金额等(7)学生上机过程登记基本信息:包括计算机IP地址、日期、上机时间、下机时间、学号、上机类型等(8)机房费用统计基本信息:包括计算机IP地址、日期、统计时间、费用等 1.业务流程图 2.数据流图3.数据字典room(机房表) 字段名数据类型能否为空是否为主键说明rnoint否是机房号rnamechar(10)否否机房名numbersmallint能否计算机数目managerchar(10)否否管理人computer(计算机表)字段名数据
3、类型能否为空是否为主键说明IPchar(20)否是计算机IP地址cnosmallint否否编号rnoint否否机房号brandChar(20)能否品牌noteVarchar(100)能否备注Student(学生表)字段名数据类型能否为空是否作为主键说明snoInt否是学号snameChar(10)否否sexChar(2)能否性别classChar(20)能否行政班Usertable(用户表)字段名数据类型能否为空是否作为主键说明 unameChar(20)否是用户名snoint否否学号pwordChar(20)否否密码moneymoney能否余额Prepaid(充值表) 字段名数据类型能否为空
4、是否作为主键说明 unameChar(20)否是用户名ptimedatetime否是充值时间pmoneysmallmoney否否金额transChar(10)否否收费人员Standard(收费标准表) 字段名数据类型能否为空是否作为主键说明rnoint否是机房号stimeChar(20)否是时间段smoneysmallmoney否否金额/小时Record(上机过程登记表)字段名数据类型能否为空是否作为主键说明IPchar(20)否是计算机IP地址begintimedatetime否是上机时间snoInt否否学号endtimedatetime能否下机时间typeChar(15)否否上机类型sta
5、tistik (机房费用统计表) 字段名数据类型能否为空是否作为主键说明IPchar(20)否是计算机IP地址datesdatetime否是日期Snoint否否学号moneyssmallmoney否否费用二、概念设计1、实体属性图图一 机房实体E-R图 图二 学生实体E-R图2、全局E-R图三、逻辑设计1、表间关系图 2、关系模式机房(机房号,机房名,机器数目,管理人)学生(学号,性别,行政班)计算机(编号,机房号,品牌,备注)用户(用户名,学号,密码,余额)四、数据库实现1、创建数据库1、创建数据库create database roomon( name=room_data, filenam
6、e=E:roomdataroom_data, size=5MB, maxsize=10MB,filegrowth=1MB)log on( name=room_log, filename=E:roomlogroom_log, size=5MB, maxsize=10MB,filegrowth=1MB)2、创建表2、room(机房表)的创建create table room(rno int not null primary key,rname char(10) not null,number smallint null,manager char(10) not null)3、computer(计算
7、机表)的创建create table computer(IP char(20) not null primary key,cno smallint not null ,rno int not null,brand char(20) null,note varchar(50) null)4、student(学生表)的创建create table student(sno int not null primary key,sname char(10) not null,sex char(2) null,class char(20) not null)6、User(用户表)的创建create tabl
8、e usertable(uname char(20) not null primary key,sno int not null,pword char(20) not null,moneys money null,)7、prepaid(充值表)的创建 create table prepaid(uname char(20) not null,ptime datetime not null,pmoney smallmoney not null,trans char(10) not null,constraint p_primary primary key(uname,ptime)8、standar
9、d(收费标准表)的创建create table standard(rno int not null,stime char(20) not null,smoney smallmoney not null,constraint c_primary primary key(rno,stime)11、record(上机过程登记表)的创建create table record(IP char(20) not null,sno int not null,begintime datetime not null,endtime datetime null,type char(15) not null,cons
10、traint t1 primary key(IP,begintime)12、statistik(费用统计表)的创建create table statistik(IP char(20) not null,dates datetime not null,sno int not null,moneys smallmoney not null,constraint t2 primary key(IP,dates)2、创建存储过程和触发器1、 创建存储过程实现各机房上机费用的统计1)代码create proc s_room(rno int)asselect rname 机房名,sum(moneys) 费
11、用 from statistik inner join computeron computer.IP=statistik.IP inner join room on room.rno=computer.rnowhere room.rno=rnogroup by rname2、创建触发器实现费用登记时,自动修改该生的账户余额。1)代码create trigger u_money on statistikfor insertasupdate usertableset moneys=moneys-(select moneys from inserted)where sno=(select sno f
12、rom inserted)2)数据测试查询插入记录前学生的余额select sno 学号,moneys 余额from usertablewhere sno=2011508092执行插入操作insert into statistikvalues(001,getdate(),101,2.5)查询插入记录学生的余额select sno 学号,moneys 余额from usertablewhere sno=20115080923.创建触发器实现充值时自动修改该生余额1)代码create trigger un_money on prepaidfor insertasupdate usertableset moneys=moneys+(select pmoney from inserted)where uname=(select uname from inserted)2)数据测试select sno 学号,moneys 余额 from usertablewhere sno=2011508092goinsert into prepaidvalues(bbb,getdate(),5,个vga )goselect sno 学号,moneys 余额 from usertablewhere sno=2011508092goselect * from prepaid