软件学院课程设计报告书课程名称 SQL Server 数据库课程设计_________ 设计题目__________ 出租车管理系统 _____________ 专业班级软件工程(1)班______________学号 5123 ______________________姓名________________ 朱阳阳 ___________指导教师_____________ 亓春霞 ___________2012年10月1设计目的此设计项目是对学习SQLServer 数据库课程后进行的一次全面的综合练习。
目的在于加深对数据库基础理论和基本知识的理解,掌握使用数据库进行软件设计的基本方法,提高运用数据库解决实际问题的能力,最终实现对于给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要求和处理要求)。
同时,此设计对于将来的毕业设计和具体工作实践将有重要的意义。
2设计任务出租车管理系统3设计内容需求分析任务3.1.1需求分析设计司机和出租车是出租车公司最要的资源,是创造效益的资源。
要想提高出租车公司的效益和服务质量,首先从做好对司机和出租车的管理着手。
一是对出租车司机的信息的管理,二是对出租车信息和租赁的管理。
出租车管理系统将很大程度上解决出租车公司在此工作上的难度。
3.1.2需求分析过程功能需求简介:针对出租车行业的特点开发的出租车管理系统,实现出租车公司内部及时准确地采集内部各种数据信息,处理高速化和网络办公自动化。
实现对出租车公司司机的信息记录,操作,出租车管理,提供精确查询等多种查询方式。
3.1.3调查需求基本操作:对出租车信息表、司机信息表、租赁表、违章表的查询、添加、更新、删除等功能。
特别操作:对租赁表的功能。
3.1.4系统数据分析概念结构设计3.2.1概念结构设计的方法概念设计阶段我采用自底向上的方法,即自顶向下的进行需求分析,然后再自底向上的进行概念结构设计。
对已经细化到无法再分的阶段逐步集成在一起,最终合成一个全局概念模式。
3.2.2概念结构设计的步骤第一步是进行局部视图的设计:由于高层的数据流图只能反映系统的概貌,而中层流图能较好的反映系统中各局部应用的子系统组成。
因此我们先逐一的设计分E-R图。
第二步是进行视图的集成:各子系统的E-R图设计好之后,下一步就是要将所有的分E-R图合成一个系统的总E-R图,一般有两个方式,多个分E-R图一次集成,另一种是一次集成两个分E-R图。
我想采用一次集成两个分E-R图的方式。
出车记录表出租车图3-2出租车E-R图司机图3-3司机R-R图图3-4租赁E-R图图3-6总体概念结构E-R图逻辑结构设计E-R图向关系模型的转换将上述总体概念结构E-R图转化成关系模型,根据这个关系写出数据依赖, 确定数据依赖。
司机与出租车是一对一的关系,司机、出租车与租赁是一对一的关系,司机与违章是一对一的关系。
司机(司机编号,姓名,性别,地址,身份证号,驾驶证号,发证时间,驾龄)出租车(车牌号,入户时间,车型,颜色,出租情况,营业时间)租赁表(司机编号,车牌号,期限,开始日期,截止日期,租赁费,车保费)出车记录表(司机编号,车牌号,出车日期)违章表(司机编号,姓名,扣分,违章时间,违章地点)物理设计物理表结构如下表3-7司机表(Driver )表3-8出租车表(Taxi)表3-9租赁表(Rent)表3-10 违章表(Violate )表3-11出车记录表(Notes)数据库的实施创建表/*创建数据库*/CREATE DATABASE TAXI /* 数据库名*/ ON(NAME=TAXI_DATA,FILENAME='D:\Microsoft SQL Server\\MSSQL\DATA\',SIZE=10MB,MAXSIZE=100MB,FILEGROWTH=10%)LOG ON(NAME='TAXI_log', /* 日志 */FILENAME='D:\Microsoft SQL Server\\MSSQL\DATA\', SIZE=10MB, MAXSIZE=100MB, FILEGROWTH=1MB)/* 创建基本表 *//* 创建司机表 */ USE TAXI CREATE TABLE DriverDriverNumber char(6)NOT NULL PRIMARY KEY, Name char (10), Sex bit NOT NULL,Address varchar(40)NOT NULL,IDNumber char(18)NOT NULL, licenseNumberchar(10)NOT NULL, CertificateDate datetime NOTNULL,DriverAge tinyint NOT NULL/* 创建出租车表 */ CREATE TABLE Taxi(TaxiNumber char(6)NOT NULL PRIMARY KEY, StartDate datetime NOT NULL, TaxiShape char(10)NOT NULL,Color char(10)NOT NULL, RentSituation bit NOT NULL DEFAULT 1, BusinessTime tinyint NOT NULL)/* 创建租赁表 */ CREATE TABLE Rent(DriverNumber char(6)NOT NULL,/* 司机编号 *//* 司机编号*//* 姓名 *//* 性别 */ /* 地址 */ /* 身份证号 */ /* 驾驶证号 *//* 发证时间 *//* 驾龄 *//* 车牌号 */ /* 入户时间 *//* 车型 */ /* 颜色 */ /* 出租情况TaxiNumber char(6)NOT NULL, LimitTime tinyint NOT NULL, StartDate datetime NOT NULL, EndDate datetime NOT NULL, RentFee float NOT NULL,ProtectionFee float NOT NULL, PRIMARY KEY(DriverNumber,TaxiNumber) )/* 创建违章表 */CREATE TABLE Violate(DriverNumber char(6)NOT NULL PRIMARY KEY, Namechar(10),Points tinyint NOT NULL, ViolateDate datetime NOT NULL, ViolateAddress varchar(40)NOT NULL )/* 创建出车表 */CREATE TABLE Notes(DriverNumber char(6)NOT NULL, TaxiNumber char(6)NOT NULL, DriverDate datetime NOT NULL)创建主要视图视图是从一个或多个表导出的表。
视图是数据库的用户使用数据库的观点。
司机和出租车是主要的实体, 而这两个实体的信息又在不同的表中, 作为出租车 公司对司机和出租车有时关心的数据又是不同的, 即使是相同的数据, 也可能又 不同的操作。
有时候仅有的表的列属性名是不能满足需求的, 于是根据不同的需 求,在物理的数据库上定义他们对数据库所要求的数据结构。
(1)创建Driver_VIEW 视图,包含司机所有的信息USE TAXI GOCREATEVIEWDriver_VIEW ( 司机编号,姓名,性别,地址,身份证号 ,驾驶证号,发证 时间, 驾龄)ASSELECT * FROM Driver GO⑵ 创建Taxi_VIEW 视图,包含出租车的所有信息。
USE TAXI GOCREATVIEWTaxi_VIEW (车牌号,入户时间,车型,颜色,出租情况,每天营业时长)ASSELECT * FROM Taxi GO(3)创建Rent_VIEV 视图,包含租赁的所有信息。
/* 车牌号 */ /* 期限 */ /* 开始日期 */ /* 截止日期 */ /* 租赁费 *//* 司机编号 *//* 姓名 */ /* 扣分 */ /* 违章时间 */ /* 违章*//* 司机编号*//* 车牌号 */ /* 出车日期USE TAXIGOCREATE VIEW Rent_VIEW司机编号,车牌号,期限,开始日期,截止日期,租赁费,车保费)ASSELECT * FROM RentGO⑷ 建租赁表平均租赁费视图Violate_VIEW_AVG,列名为平均租赁费,试图中列名为RentFee_avg。
USE TAXIGOCREATE VIEW Violate_VIEW_AVG平均租赁费)ASSELECT AVG(RentFee)FROM Rent创建索引索引是根据表中一列或若干列按照一定顺序建立的列值与记录行之间的对应关系表。
(1)为Driver 表的姓名创建唯一索引Driver_nameUSE TAXIGOCREATE UNIQUE INDEX Driver_nameON Driver(Name)GO(2)根据Rent表的司机编号和车牌号创建复合索引。
USE TAXIGOCREATE INDEX Rent_INDON Rent(DriverNumber,TaxiNumber)GO创建表字段的约束关系数据完整性包括实体完整性,域完整性和参照完整性。
租赁表中的期限的取值肯定要有一定的范围,违章表中的扣分也有范围,租赁表的截止日期必须在开始日期的之后,都可以通过CHECK束来实现,这就体现了域的完整性。
租赁表中的司机编号和车牌号都由司机表和出租车表中对应,当删除或修改司机表中的司机编号和出租车表中的车牌号也应当对应修改租赁表中的司机编号和车牌号,这体现了表与表之间的参照完整性。
(1)添加Rent表中期限的约束条件。
USE TAXIGOALTER TABLE RentADD CONSTRAINT LimitTime_constraint CHECK(LimitTime>=0 ANDLimitTime<=10)GO⑵ 添加Violate表中扣分的约束条件。
USE TAXIGOALTER TABLE ViolateADD CONSTRAINT Points_constraint CHECK(Points>=0 AND Points<=12)GO(3)在Rent表中的TaxiNumbe列添加外键约束,参照Taxi表中的列USE TAXIGOALTER TABLE RentADD CONSTRAINT FK_TaxiNumber FOREIGN KEY(TaxiNumber)REFERENCESTaxi(TaxiNumber)GO⑷ 在Re nt表中添加日期的约束。