数据库分析与设计报告(车辆管理系统)(共26页).doc
精选优质文档-倾情为你奉上1. 需求分析2. 概念结构设计3. 逻辑结构设计 4. 物理结构设计5. 数据库的建立和测试6.数据库运行和维护车辆管理系统数据库设计班级:11计算机转学号:姓名:王湘萍一需求分析1.1可行性分析现在随着企业规模的扩大以及车辆作为最为普遍的交通工具,在企业中已经不是单一的存在,由于单位车辆数目的急剧增加,与之相对应的问题随之而生,比如车辆的使用权问题,车辆的费用问题等,不再是简单的少量的数据。为了解决这一系列的问题,我们必须借助于电脑的强大的数据处理能力和存储能力,如此可以减少人力财力来维护这些数据,可以用更少的投入来换取更佳的数据管理。因此,在这样的情况下,开发单位车辆管理系统是可行的,是必要的。 如今,MIS开发已经慢慢的驱向成熟,车辆管理系统也有部分开发,但是都还不是十分完善。现今已经开发的车辆管理系统都是针对以运营为主的具有盈利目的的单位。比如,公交管理、出租车管理、运输公司管理、汽车站点的管理,而这些管理最主要是针对盈利的管理,很少有针对各种汽车使用权、车辆调配等各种普通单位,不是以车辆运营为盈利手段的车辆管理,针对这点,此系统就是适合如今大多数企业管理的车辆管理系统。通过计算机系统对学校进行全面的管理,满足了学校的现代化管理的要求。1)经济性 系统建设不需要很大的投入; 可缩减人员编制,减少人力费用; 人员利用率的改进;2)技术性 处理速度快,准确; 通过权限的设置,数据的安全性好; 方便查询; 控制精度或生产能力的提高3)社会性 可降低工作人员工作强度,提高效率,会得到上下员工的一致同意的; 可引进先进的管理系统开发方案,从而达到充分利用现有资源1.2需求分析现代信息技术特别是计算机网络技术的飞速发展,使我们的管理模式产生了质的飞跃,网络化管理将成为信息时代的重要标志和组成部分。探索、研究并构建适宜于在计算机网络环境下的管理模式,是我们责无旁贷的使命。通过调查,要求系统需要具有以下功能:1)由于操作人员的计算机知识普遍较差,要求有良好的人机界面。2)由于该系统的使用对象多,要求有较好的权限管理。3)方便的数据查询,支持多条件查询。4)基础信息管理与查询(包括车辆信息、用车记录、部门信息)。5)通过计算机,能够直接“透视”仓库存储情况。6)数据计算自动完成,尽量减少人工干预。7)系统退出。1.3 系统的模型结构该系统的模型结构如图2.1所示:图2.1 系统的模型结构1.4业务流程分析车辆管理系统软件的数据流图是比较清晰的,对各功能模块来说都比较有规律。但完整的图比较繁琐。 车辆管理系统顶层图车辆管理系统0层图1.5数据字典数据字典是描述数据流图中数据的信息的集合。 它对数据流图上每一个成分:数据项、文件(数据结构)、数据流、数据存储、加工和外部项等给以定义和说明;它主要由数据流描述、加工描述和文件描述三部分组成。从上面数据流图可知,本系统包含以下数据流、数据存储、数据加工。1、数据流数据流名称:出车单别名:无简述:指驾驶员出车的清单。来源:管理部 去向:加工 “车辆出库信息”组成:出车单编号+车辆类别编号 + 出车日期+库位编号数据流名称:车辆入库单别名:无简述:指车辆入库的清单。来源:管理部 去向:加工 “添加入库信息”组成:入库单编号+车辆类别编号 + 计量单位+数量+ 入库日期+库位编号数据流名称:费用单别名:无简述:车辆产生费用的清单。来源:驾驶员 去向:加工 “添加费用信息”组成:费用单编号+费用类别编号 + 计量单位+数量+ 费用日期+费用原因二、概念设计2.2 系统局部E-R图2.3 系统全局E-R图2.4数据库设计数据库整体的设计如下图所示:/*=*/* DBMS name: Microsoft SQL Server 2005 */* Created on: 2012/6/12 23:16:03 */*=*/if exists (select 1 from sys.sysreferences r join sys.sysobjects o on (o.id = r.constid and o.type = 'F') where r.fkeyid = object_id('出车') and o.name = 'FK_出车_承担_驾驶员')alter table 出车 drop constraint FK_出车_承担_驾驶员goif exists (select 1 from sys.sysreferences r join sys.sysobjects o on (o.id = r.constid and o.type = 'F') where r.fkeyid = object_id('出车') and o.name = 'FK_出车_指派_车辆')alter table 出车 drop constraint FK_出车_指派_车辆goif exists (select 1 from sys.sysreferences r join sys.sysobjects o on (o.id = r.constid and o.type = 'F') where r.fkeyid = object_id('车辆事故') and o.name = 'FK_车辆事故_发生_车辆')alter table 车辆事故 drop constraint FK_车辆事故_发生_车辆goif exists (select 1 from sys.sysreferences r join sys.sysobjects o on (o.id = r.constid and o.type = 'F') where r.fkeyid = object_id('车辆保险') and o.name = 'FK_车辆保险_授权_车辆')alter table 车辆保险 drop constraint FK_车辆保险_授权_车辆goif exists (select 1 from sys.sysreferences r join sys.sysobjects o on (o.id = r.constid and o.type = 'F') where r.fkeyid = object_id('车辆油耗') and o.name = 'FK_车辆油耗_缴纳_车辆')alter table 车辆油耗 drop constraint FK_车辆油耗_缴纳_车辆goif exists (select 1 from sys.sysreferences r join sys.sysobjects o on (o.id = r.constid and o.type = 'F') where r.fkeyid = object_id('车辆维修') and o.name = 'FK_车辆维修_加油_车辆')alter table 车辆维修 drop constraint FK_车辆维修_加油_车辆goif exists (select 1 from sys.sysreferences r join sys.sysobjects o on (o.id = r.constid and o.type = 'F') where r.fkeyid = object_id('车辆费用') and o.name = 'FK_车辆费用_发车_车辆')alter table 车辆费用 drop constraint FK_车辆费用_发车_车辆goif exists (select 1 from sysindexes where id = object_id('出车') and name = '指派_FK' and indid > 0 and indid < 255) drop index 出车.指派_FKgoif exists (select 1 from sysindexes where id = object_id('出车') and name = '承担_FK' and indid > 0 and indid < 255) drop index 出车.承担_FKgoif exists (select 1 from sysobjects where id = object_id('出车') and type = 'U') drop table 出车goif exists (select 1 from sysobjects where id = object_id('车辆') and type = 'U') drop table 车辆goif exists (select 1 from sysindexes where id = object_id('车辆事故') and name = '发生_FK' and indid > 0 and indid < 255) drop index 车辆事故.发生_FKgoif exists (select 1 from sysobjects where id = object_id('车辆事故') and type = 'U') drop table 车辆事故goif exists (select 1 from sysindexes where id = object_id('车辆保险') and name = '授权_FK' and indid > 0 and indid < 255) drop index 车辆保险.授权_FKgoif exists (select 1 from sysobjects where id = object_id('车辆保险') and type = 'U') drop table 车辆保险goif exists (select 1 from sysindexes where id = object_id('车辆油耗') and name = '缴纳_FK' and indid > 0 and indid < 255) drop index 车辆油耗.缴纳_FKgoif exists (select 1 from sysobjects where id = object_id('车辆油耗') and type = 'U') drop table 车辆油耗goif exists (select 1 from sysindexes where id = object_id('车辆维修') and name = '加油_FK' and indid > 0 and indid < 255) drop index 车辆维修.加油_FKgoif exists (select 1 from sysobjects where id = object_id('车辆维修') and type = 'U') drop table 车辆维修goif exists (select 1 from sysindexes where id = object_id('车辆费用') and name = '发车_FK' and indid > 0 and indid < 255) drop index 车辆费用.发车_FKgoif exists (select 1 from sysobjects where id = object_id('车辆费用') and type = 'U') drop table 车辆费用goif exists (select 1 from sysobjects where id = object_id('驾驶员') and type = 'U') drop table 驾驶员go/*=*/* Table: 出车 */*=*/create table 出车 ( 时间 datetime not null, 编号 numeric null, 车牌 numeric null, constraint PK_出车 primary key nonclustered (时间)go/*=*/* Index: 承担_FK */*=*/create index 承担_FK on 出车 (编号 ASC)go/*=*/* Index: 指派_FK */*=*/create index 指派_FK on 出车 (车牌 ASC)go/*=*/* Table: 车辆 */*=*/create table 车辆 ( 车牌 numeric not null, 信号 text not null, constraint PK_车辆 primary key nonclustered (车牌)go/*=*/* Table: 车辆事故 */*=*/create table 车辆事故 ( 事故地点 text not null, 车牌 numeric null, 事故时间 text null, constraint PK_车辆事故 primary key nonclustered (事故地点)go/*=*/* Index: 发生_FK */*=*/create index 发生_FK on 车辆事故 (车牌 ASC)go/*=*/* Table: 车辆保险 */*=*/create table 车辆保险 ( 保险名称 text not null, 车牌 numeric null, 保险日期 datetime null, 金额 text null, constraint PK_车辆保险 primary key nonclustered (保险名称)go/*=*/* Index: 授权_FK */*=*/create index 授权_FK on 车辆保险 (车牌 ASC)go/*=*/* Table: 车辆油耗 */*=*/create table 车辆油耗 ( 用油量 text not null, 车牌 numeric null, constraint PK_车辆油耗 primary key nonclustered (用油量)go/*=*/* Index: 缴纳_FK */*=*/create index 缴纳_FK on 车辆油耗 (车牌 ASC)go/*=*/* Table: 车辆维修 */*=*/create table 车辆维修 ( 维修账号 numeric not null, 车牌 numeric null, 维修站点 char(10) null, constraint PK_车辆维修 primary key nonclustered (维修账号)go/*=*/* Index: 加油_FK */*=*/create index 加油_FK on 车辆维修 (车牌 ASC)go/*=*/* Table: 车辆费用 */*=*/create table 车辆费用 ( 金额 text not null, 车牌 numeric null, 牌照 numeric null, constraint PK_车辆费用 primary key nonclustered (金额)go/*=*/* Index: 发车_FK */*=*/create index 发车_FK on 车辆费用 (车牌 ASC)go/*=*/* Table: 驾驶员 */*=*/create table 驾驶员 ( 编号 numeric not null, 信息 text null, constraint PK_驾驶员 primary key nonclustered (编号)goalter table 出车 add constraint FK_出车_承担_驾驶员 foreign key (编号) references 驾驶员 (编号)goalter table 出车 add constraint FK_出车_指派_车辆 foreign key (车牌) references 车辆 (车牌)goalter table 车辆事故 add constraint FK_车辆事故_发生_车辆 foreign key (车牌) references 车辆 (车牌)goalter table 车辆保险 add constraint FK_车辆保险_授权_车辆 foreign key (车牌) references 车辆 (车牌)goalter table 车辆油耗 add constraint FK_车辆油耗_缴纳_车辆 foreign key (车牌) references 车辆 (车牌)goalter table 车辆维修 add constraint FK_车辆维修_加油_车辆 foreign key (车牌) references 车辆 (车牌)goalter table 车辆费用 add constraint FK_车辆费用_发车_车辆 foreign key (车牌) references 车辆 (车牌)go三、逻辑设计逻辑设计就是把E-R图转换成关系模式,并对其进行优化。3.1 E-R图向关系模型的转换原则:(1)一个实体型转换为一个关系模型,实体的属性就是关系的属性,实体的键就是关系的键;(2)一个联系转换为一个关系模式,和该联系相连的每个实体型的键及联系的属性都转换为关系的属性。这个关系的键分为以下三种不同的情况:若联系为1:1,则相连的每个实体型的键均是该关系模式的侯选键。若联系为1:n,则联系对应的关系模式的键取n端实体型的键。若联系为m:n,则联系对应的联模式的键为参加联系的诸实体型的键的组合。例如:根据 E-R 图,将图中所示的实例转化为如下关系模型6:司机(工号,所属部门,姓名,出生年月,性别,电话,地址)车辆(车牌号,所属部门,负责人,型号,颜色)终端(SIM 卡号,SOS 号,按键1,按键2,按键3,按键4,起始时间,结束时间,上报频次,定位频次)GPS 信息(SIM 卡号,纬度,经度,上报时间)绑定信息(车牌号,司机工号,SIM 卡号)3.2各个数据表的表结构设计在上述经由E-R模型得到关系模式并且得到适当的调整后,我们可以结合在需求表述中数据字典包含的数据项信息,得到数据库的表结构(具体设计各个数据表的表结构,包括表名,表中各列的字段名、数据类型、数据长度和表的主键和外键;还要考虑应该建立哪些索引以及索引的类型)。需要指出的是,考虑到系统的统一兼顾如对数据库管理员和后续软件开发中对数据库管理以及编程引用的便利,表名和字段名的命名应该由表名的英文含义的词语为主或以其缩写字母构成;同时要为各个表名和字段名作出完整的中文文档说明。 用户信息表用户信息表(此表主要用于普通用户基础信息和管理员基础信息)中包括有:用户ID(id)、用户名(name)、账户名(username)、帐户密码(userpwd)、所属部门(part)、用户权限(userrule)、E-mail(emai)等。具体设置如下:表3.1 用户信息表名称字段类型字段长度说明主键Idchar4编号主键nametxt16用户名字usernametxt16账户名称userpwdchar16账户密码parttxt16所属部门userraletxt16用户级别emailchar20电子邮件shenhetxt8审核 历史用车表历史用车表(此表用于查看车辆的历史用车记录)主要包括:ID(id)、车牌号(car-code)、车辆类型(car-type)、行程(car-xingcheng)、用车的时间(car-start、car-end)、原因(car-cause)等。具体设置如下:表3.2 历史用车表名称字段类型字段长度说明主键Idchar4编号主键Car_codetxt12车牌号码Car_tapetxt16车辆型号Car_xingchengchar6行程Car_zuoweichar8座位Car_startChar16出发日期Car_endchar16结束日期 驾驶员信息表驾驶员信息表(用于查看驾驶员的基本信息)主要包括:ID(id)、驾驶员姓名(car-username)、驾驶员性别(car-usersex)、驾驶员地址(car-userfrom)、驾驶员出生年月日(car-userbirthday)、所用车辆(car-user-car)等。具体设置如下:表3.3 驾驶员信息表名称字段类型字段长度说明主键IDchar4编号主键car-usernametxt16驾驶员姓名car-usersextxt2驾驶员性别car-userfromtxt40驾驶员地址car-userbirthdaychar10驾驶员出生年月日 维护保养表维护保养表(用于查看车辆维护的具体信息)主要包括:ID(id)、车牌号(car-code)、车辆类型(car-type)、落户时间(car-time)、驾驶员(car-user)、油卡余额(car-scye)、充值总额(car-cz)、保养总额(car-jy)等。具体设置如下:表3.4 维护保养表名称字段类型字段长度说明主键IDchar4编号主键car-codechar16车牌号car-typetxt16车辆类型car-timechar16落户时间car-usertxt16驾驶员car-scyechar8油卡余额car-czchar8、充值总额car-jychar8保养总额 车辆信息表车辆信息表(用于对车辆信息的管理)等。具体设置如下:表3.5 车辆信息表名称字段类型字段长度说明主键IDchar4编号主键car-codetxt16车牌号car-typetxt16车辆类型car-companytxt16所属部门car-usertxt16驾驶员car-usertelchar14驾驶员电话 部门表部门表(包含整个单位里所有的部门)主要包括:ID(id)、部门(type)。具体设置如下:表3.6 部门表名称字段类型字段长度说明主键idchar4编号主键typetxt16部门 车辆公告表车辆公告表(用于一些公告)主要包括:ID(id)、内容(comment)、题目(title)等。具体设置如下:名称字段类型字段长度说明主键idchar4编号主键commenttxt16内容titletxt16题目表3.7车辆公告表四、物理设计数据在实际的物理设备