当前位置:文档之家› 数据库大作业 物流管理系统附代码

数据库大作业 物流管理系统附代码

数据库设计作品题目:物流数据库管理系统组员1姓名:组员1学号:组员2姓名:组员2学号:完成时间:目录(供参考)1.数据库规划1.1任务陈述本数据库的设计,是为了物流公司能够快捷高效的处理快递邮件,提高物流信息化水平,提高运输效率,同时增加企业管理者对公司运营情况的了解,和方便用户查询快递信息。

1.2任务目标维护(录入、更新和删除)企业员工的数据维护(录入、更新和删除)客户的数据维护(录入、更新和删除)收件人的数据维护(录入、更新和删除)运单的数据维护(录入、更新和删除)快递线路的数据维护(录入、更新和删除)仓库的数据维护(录入、更新和删除)客户评价信息数据实现对货物物流信息的查询实现对快递员的查询实现对运单状态的查询实现对仓库的查询实现对收货人的查询实现对客户的查询跟踪物流信息跟踪运单状态信息报告公司运营情况报告公司员工情况报告客户情况报告仓库情况报告运单的情况1.3定义系统边界1.4主要用户视图经理:维护(录入、更新、和删除)公司的数据维护(录入、更新、和删除)员工的数据维护(录入、更新、和删除)用户的数据维护(录入、更新、和删除)仓库的数据实现对仓库的情况实现对所有员工的检索报告所有公司运营的情况报告所有客户的情况主管:维护(录入、更新、和删除)配送的数据维护(录入、更新、和删除)转运的数据维护(录入、更新、和删除)运单的数据维护(录入、更新、和删除)客户的数据实现对仓库检索实现对员工的检索报告仓库的情况报告所在分公司货单的情况派送员:查看运单信息查看配送信息查看配送信息查看收货人信息客户:查看快递配送信息维护(录入、更新、和删除)评价信息2.需求分析2.1用户需求说明(重点论述)2.1.1数据需求快递物流公司职员分为经理、主管、派送员,经理拥有最高权限,可以对任意数据进行添加修改删除,主管可以增加运单信息和更改物流信息,查询客户资料,查看仓库情况,派送员只能查询客户资料,客户可以根据运单编号,查询运单详情.客户在提交货物时,要求填写基本信息,包括客户名称、客户电话、收货地址、等信息,并且由系统在注册用户注册完后自动为其生成一个客户编号,并且嵌入到客户注册信息内,形成完整的客户资料,同时,客户还将填写收件人信息,生成收货人信息表。

系统自动生成运单,运单有唯一的编号,根据货件类型、邮寄地址,自动生成邮寄费用。

每个仓库有具体负责的区域,根据收货人地址,可以确定货物转运到的仓库,若仓库已经满了,则不能转运到此仓库。

当公司接受运单时,初始运单状态为”接受”,若为此状态,用户还可以取消运单,则状态变为”取消”;当货物被转运至仓库时,订单状态变为”配送”,之后再由配送员配送至收货人地址,由收件人接收后状态变为”完成”。

当订单完成后,客户才可以给予评价。

运单价格是根据货物重量计算得出,运单价格为货物重量×100.同时,公司记录统计运营情况,即收取快递的件数,营业额度等信息,并查看仓库存储货物的信息,判断仓库是否会出现爆满。

员工工资计算为,当员工职位为经理时,当月薪水为当月接受运单总金额的1%,当员工职位为主管时,薪水为当月接受运单总金额的5%,,当员工职位为其配送运单数量乘以50。

2.1.2事务需求2.1.2.1数据录入1)录入公司的新员工信息2)录入公司仓库信息3)录入新顾客信息4)录入新运单的详细情况5)录入新转运表信息6)录入新配送表信息7)录入新收件人信息8)录入客户的评价信息2.1.2.2数据更新/删除1)更新/删除给定员工的信息2)更新删除给定仓库信息3)更新删除给定客户信息4)更新删除给定收货人信息5)更新/删除给定运单的信息6)更新删除给定转运表信息7)更新删除给定配送表信息8)更新/删除客户评价信息2.1.2.3数据查询(列出支持的查询,需要有一定具有统计功能的查询)1)按照职位、姓名顺序列出员工详细信息。

2)利用存储过程,根据运单编号,查询运单状态以及相关信息3)根据配送表中,快速查询员工的完成的运单数4)根据客户评价中serve的评分,查询配送员工所有配送服务中的平均分5)根据客户评价中speed的评分,查询所有客户对物流速度的平均评分6)查看各个仓库所提供的配送服务的总平均评分7)列出指定日期运单总数量8)根据用户姓名,查询此人所在物流公司的运营记录以及总金额9)根据用户编号,查询此人在我物流公司的交易的详细信息10)根据收货人编号,查找其地址11)在配送表中,快速查询员工的完成的运单数12))查询公司某一天的营业额13)查询公司某一年的营业额14)计算员工工资2.2系统需求说明2.2.1初始数据库大小公司拥有50名左右的员工,5个仓库。

2.2.2数据库增长速度大约每天能进行1000左右笔运单和10个新顾客每月大概有5个左右的员工加入或者离开。

离开书店半年的员工记录从数据库删除。

每月大概删除2条员工记录.每年增加一个仓库。

2.2.3记录查找的类型和平均数量客户查询快递运输的信息,每天大概100次企业经理查询营业部的运单数量,每天2次企业经理查询中转部的运输数量,每天2次2.2.4网络和共享访问需求整个系统必须全天24小时开放查询(网站维护升级除外)系统能够支持至少多名员工同时进行数据的增删改。

需要考虑这么大数量并发访问的许可需求2.2.5性能1)客户查找运单信息的搜索时间不超过2秒2)各种搜索的响应时间少于3秒3)更新/保存记录的时间不超过1秒2.2.6安全性1)整个平台系统必须有口令密码支持2)每个不同的用户应该分配一个到特定用户视图的数据库访问权限,主要有系统管理员,数据管理员,客户可以查询指定的信息3)每位使用者只能在适合他们完成工作的需要的窗口中看到需要的数据2.2.7备份和恢复数据库在每天半夜12点进行增量备份和差异备份,在周日必须进行一次完整备份。

3.逻辑设计3.1实体归档3.1.1实体定义客户仓库员工收货人评价(参考p126图9-2)3.3实体和关系的有关属性(应该给出实体和关系的所有属性,扩展p132图9-8的列名为:实体/关系名、属性、描述、键(主键/侯选键)、数据类型和长度、是否为空、是否多值、是否复合、是否派生、默认值、属性域约束)check( khsex in (“男”,”女”) )员工信息表yuangongcheck( ygsex in (“男”,”女”) )check(ygage>18 and ygage<65 )check( ygpos in (“经理”,”主管”,”快递员”) )check( shrsex in (“男”,”女”) )仓库cangkucheck( ckarea in (“上海”,”北京”,”厦门”,”武汉”,”广州”))评价信息pingjiaserve int NOT NULL 员工服务total int NOT NULL 评分advice varchar(100)评价3.4 ER图yuangong(ygno,ygname,ygpos,ygsex,ygage,ygtel)primary key ygnokehu(khno,khname,khtel,khsex,khadd)primary key khnohouhuoren(shrno,shrname,shrsex,shraddr,shrtel)primary key shrnoyundan(ydno,ydprice,shrno,khno,ygno)primarykey ydnoforeign key shrno reference shouhuoren(shr)foreign key khno reference shouhuoren(khno)cangku(ckno,ckadd,ckarea,cktel,ckcap,ckweight)primary key cknozhuanyun(zyno,sno,yno,qstime,rktime)primary key zynoforeign key skno reference cangku(ckno)foreign key ygno reference yuangong(ygno)peisong(psno,shrno,ygno,cktime,qstime)primary key psnoforeign key shrno reference shouhuorenforeign key ygno reference yuangongpingjia(pjno,ydno,pf,pj)primary key pjno3.8其他业务规则当运单状态为”接受”时,客户可以取消订单;当运单状态为”配送”时,订单生效不可取消,当状态为”完成”时,客户才可以进行评价。

仓库存储的货物总量不能超过其容量;若超过,则运单自动取消。

4.物理设计4.1转换全局逻辑数据模型4.1.1创建基本表(给出创建每个基本表的SQL语句,应有如下实现:表名、列名、主键/侯选键、外键、参照完整性约束,对每个列,应有数据类型和长度、默认、是否可空等信息)(1)创建客户表create table kehu(khno varchar(20)not null primary key,khname varchar(20) not null,khtel varchar(20) not null,khsex varchar(10),khadd varchar(20) not null,check( khsex in('男','女')))数据插入insert into kehu values(10001,'赵一',8800881,'男','上海号')insert into kehu values(10002,'钱二',8800882,'男','广州号')insert into kehu values(10003,'孙三',8800883,'女','北京号')insert into kehu values(10004,'李四',8800884,'男','厦门号')insert into kehu values(10005,'周五',8800885,'男','武汉号')insert into kehu values(10006,'吴六',8800886,'男','北京号')insert into kehu values(10007,'郑七',8800881,'女','上海号')insert into kehu values(10008,'王八',8800881,'男','厦门号')insert into kehu values(10009,'冯九',8800881,'男','武汉号')insert into kehu values(10010,'陈十',8800881,'男','武汉号')(2)创建员工表create table yuangong(ygno varchar(20)not null primary key,ygname varchar(20)not null,ygpos varchar(20)not null,ygsex varchar(20)not null,ygage int not null,ygtel varchar(20)not null,check(ygsex in('男','女')),check(ygage>18 and ygage<65),check(ygpos in('经理','主管','快递员')),)数据插入insert into yuangong values(20001,'褚一','经理','男',50,88228801) insert into yuangong values(20002,'卫二','主管','男',48,88228802) insert into yuangong values(20003,'蒋三','主管','男',46,88228803) insert into yuangong values(20004,'沈四','主管','女',39,88228804) insert into yuangong values(20005,'韩五','快递员','男',30,88228805) insert into yuangong values(20006,'杨六','快递员','男',32,88228806) insert into yuangong values(20007,'朱七','快递员','男',31,88228807) insert into yuangong values(20008,'秦八','快递员','男',34,88228808) insert into yuangong values(20009,'尤九','快递员','男',30,88228809) insert into yuangong values(20010,'许十','快递员','男',29,88228810)(3)创建收货人表create table shouhuoren(shrno varchar(20)not null primary key,shrname varchar(20)not null,shrsex varchar(10),shradd varchar(20)not null,shrtel varchar(20)not null,check(shrsex in('男','女')),)数据插入insert into shouhuoren values(30001,'何一','男','上海号',88330001) insert into shouhuoren values(30002,'何二','男','上海号',88330002)insert into shouhuoren values(30003,'何三','男','北京号',88330003) insert into shouhuoren values(30004,'何四','男','北京号',88330004) insert into shouhuoren values(30005,'何五','女','广州号',88330005) insert into shouhuoren values(30006,'何六','男','广州号',88330006) insert into shouhuoren values(30007,'何七','男','武汉号',88330007) insert into shouhuoren values(30008,'何八','女','武汉号',88330008) insert into shouhuoren values(30009,'何九','男','厦门号',88330009) insert into shouhuoren values(30010,'何十','男','厦门号',88330010)(4)创建仓库表create table cangku(ckno varchar(20)not null primary key,ckadd varchar(20)not null,ckarea varchar(20)not null,cktel varchar(20)not null,ckcap int not null,ckweight int not null default 0,check(ckarea in('上海','北京','广州','武汉','厦门')),)数据插入insert into cangku values(1,'上海号','上海',88118800,10000,0) insert into cangku values(2,'北京号','北京',88228800,10000,0) insert into cangku values(3,'广州号','广州',88338800,10000,0) insert into cangku values(4,'武汉号','武汉',88448800,10000,0) insert into cangku values(5,'厦门号','厦门',88558800,10000,0)(5)创建运单表create table yundan(ydno varchar(20) not null primary key,ydprice varchar(10) not null,ydstate varchar(20) not null default ‘接受’,shrno varchar(20) not null,khno varchar(20) not null,sltime varchar(20) not null,hwweight int not null,check(ydstate in ('接受','派送','完成','取消')),foreign key (shrno) references shouhuoren(shrno) on update cascade, )运单数据插入insert into yundan values(50001,10000,'接受',30001,10001,2014-05-08,100) insert into yundan values(50002,10000,'接受',30002,10002,2014-05-08,100) insert into yundan values(50003,10000,'接受',30003,10003,2014-05-09,100) insert into yundan values(50004,10000,'接受',30004,10004,2014-05-09,100) insert into yundan values(50005,10000,'接受',30005,10005,2014-05-10,100) insert into yundan values(50006,20000,'接受',30006,10006,2014-05-10,200) insert into yundan values(50007,20000,'接受',30007,10007,2014-05-11,200) insert into yundan values(50008,20000,'接受',30008,10008,2014-05-11,200) insert into yundan values(50009,20000,'接受',30009,10009,2014-05-12,200) insert into yundan values(50010,20000,'接受',30010,10010,2014-05-12,200)(6)创建转运表create table zhuanyun(zyno varchar(20) not null primary key,ydno varchar(20) not null,ckno varchar(20) not null,ygno varchar(20) not null,qstime varchar(20),rktime varchar(20),foreign key (ckno) references cangku(ckno),foreign key (ygno) references yuangong(ygno),foreign key (ydno) references yundan(ydno) on update cascade)转运数据输入insert into zhuanyun values(60001,50001,1,20001,2014-05-09,2014-5-10) insert into zhuanyun values(60002,50002,2,20001,2014-05-09,2014-5-10) insert into zhuanyun values(60003,50003,3,20001,2014-05-09,2014-5-10) insert into zhuanyun values(60004,50004,4,20001,2014-05-09,2014-5-10) insert into zhuanyun values(60005,50005,5,20001,2014-05-09,2014-5-10) insert into zhuanyun values(60006,50006,1,20001,2014-05-09,2014-5-10) insert into zhuanyun values(60007,50007,1,20001,2014-05-09,2014-5-10) insert into zhuanyun values(60008,50008,1,20001,2014-05-09,2014-5-10) insert into zhuanyun values(60009,50009,1,20001,2014-05-09,2014-5-10) insert into zhuanyun values(60010,50010,1,20001,2014-05-09,2014-5-10)(7)创建配送表create table peisong(psno varchar(20) not null primary key,ydno varchar(20) not null,ygno varchar(20),cktime varchar(20),wctime varchar(20),foreign key(ygno) references yuangong(ygno),foreign key(ydno) references yundan(ydno) on update cascade)配送表数据输入insert into peisong values(70001,50001,20008,2014-05-11,2014-05-12) insert into peisong values(70002,50002,20008,2014-05-11,2014-05-12) insert into peisong values(70003,50003,20008,2014-05-11,2014-05-12) insert into peisong values(70004,50004,20009,2014-05-11,2014-05-12) insert into peisong values(70005,50005,20009,2014-05-11,2014-05-12) insert into peisong values(70006,50006,20009,2014-05-11,2014-05-12) insert into peisong values(70007,50007,20010,2014-05-11,2014-05-12)(8)创建评价表create table pingjia(pjno varchar(20) not null,ydno varchar(20) not null,speed int not null default 10,serve int not null default 10,total int not null default 10,pj varchar(100),foreign key(ydno) references yundan(ydno),)insert into pingjia values(80001,50001,10,10,10,'好')insert into pingjia values(80002,50002,8,10,9,'不错')insert into pingjia values(80003,50003,10,6,8,'不错')insert into pingjia values(80004,50004,10,8,9,'不错')insert into pingjia values(80005,50005,10,10,10,'好')insert into pingjia values(80006,50006,6,6,6,'有待加强')insert into pingjia values(80007,50007,10,8,9,'不错')4.1.2派生数据说明yundan表中的运费总价ydprice,根据货物重量乘以100pingjia表中的总评total,是根据speed/2+serve/24.1.3业务规则存档(给出使用约束、触发器等来实现业务规则的情况)(1)在运单表yundan上创建触发器,若price为null,则其值设为货物重量hwweight×100create trigger yd_price on yundan for insertasdeclare@price int,@hwweight int,@ydno varchar(20)select@price=inserted.ydprice,@hwweight=inserted.hwweight,@ydno=inserted.ydnofrom insertedif(@price is null)beginupdate yundan set ydprice=@hwweight*100 where ydno=@ydnoend(2)转运表zhuanyun上创建触发器,若zhuanyun表中的cangku为null,则由仓库负责区域和收件人地址决定转运到哪个仓库create trigger decide_ck on zhuanyun for insertasdeclare@zyno varchar(20),@ckno varchar(20),@ydno varchar(20),@shradd varchar(20)select@ckno=inserted.ckno,@ydno=inserted.ydno,@zyno=inserted.zynofrom insertedif(@ckno is null)beginselect@shradd=shr.shraddfrom inserted,yundan yd,shouhuoren shrwhere inserted.ydno=yd.ydno and yd.shrno=shr.shrnoprint@shraddif(@shradd like'上海%')set@ckno=1else if (@shradd like'北京%')set@ckno=2else if (@shradd like'广州%')set@ckno=3else if (@shradd like'武汉%')set@ckno=4else set@ckno=5update zhuanyun set ckno=@ckno where zhuanyun.zyno=@zyno endgo(3)当运单状态为完成时,将不能修改运单create trigger yundan_nofix on yundan for updateasdeclare@state varchar(20)select@state=deleted.ydstatefrom deletedif (@state='完成')rollback transaction(4)当运单状态为完成时,不能在此运单上新建配送create trigger peisong_nofix on yundan for insertasdeclare@state varchar(20)select@state=inserted.ydnofrom insertedif (@state='完成')rollback transaction(4)当运单状态为完成时,不能再在此运单上新建转运create trigger zhuanyun_nofix on zhuanyun for insertasdeclare@state varchar(20)select@state=inserted.ydnofrom insertedif (@state='完成')rollback transaction(5)当货物开始转运,新建转运项时,把订单状态设置为'派送' create trigger add_zy on zhuanyun for insertasselect@ydno=inserted.ydnofrom insertedupdate yundan set yundan.ydstate='派送'where yundan.ydno=@ydno(6)在zhuanyun表中设置触发器,计算仓库储存量ckweight的值,每当货物运进该仓库,ckweight加上该货物重量。

相关主题