ups物流数据库.docx
《ups物流数据库.docx》由会员分享,可在线阅读,更多相关《ups物流数据库.docx(26页珍藏版)》请在冰豆网上搜索。
ups物流数据库
云南大学软件学院
实验报告
课程:
数据库原理与使用技术实验任课教师:
张璇王伟朱艳萍
姓名:
万贵兴学号:
20081120240专业:
软件工程成绩:
姓名:
李金亮学号:
20081120229专业:
软件工程成绩:
实验10数据库设计
1.引言
1.1编写目的
这是为物流系统做物流数据库,用来在快递公司中处理快递邮件,提供货物的查询和物流公司对邮件的管理等。
1.2背景
a.开发数据库名称:
ups物流系统数据库
b.提出者:
教师开发者:
万贵兴、李金亮用户:
快递公司
1.3定义
目的邮递区号:
这个是在对货物处理时重要的识别码,在通过DWS扫描时,可以根据目的邮递区号来把货物传送到正确的传送带,然后传入正确的货袋,进行装载和运输。
邮件_分类:
在ups中对货物的分类,可以从简单的重量和形状来区分,对邮件进行分类后可以加快货物的处理速度和处理数量,而且可以保护某些特殊和重要的货物在传输过程中不受损坏等。
运单:
里面包含有运输工具的内容,可以方便用户查询货物是通过什么运输工具运输的和什么时候运输、预计到达时间。
智慧标签:
这个是在ups的DWS系统扫描时的重要内容,智慧标签中包含了货物的基本信息,特别是目的邮递区号,而且其中的Maxicode二维标签和其他的标签有很大区别。
1.4参考资料
Ups优比速快递短片,物流系统简介,网上查找的关于物流行业的介绍。
2.外部设计
2.1标识符的状态
邮件编号:
它是识别邮件最快也最有效的标识符,不同的邮件对应不同的邮件编号,而且是唯一的,如一个学生的学号一样。
它可以唯一的确定一个邮件货物。
目的邮递区号:
它可以在ups的世界港中处理邮件时正确的将货物发送到正确的传送带,与货袋的目的邮递区号进行对别,从而将邮件装载入正确的货袋,送达正确的目的地,而在其中人为或以外的错误都可能导致邮件不能在规定的时限内正确的送达目的地。
运单号:
每一次的运输,运单号都是唯一的,它可以让客户,通过运单号或邮件号来查询邮件的运输信息,采用设那么工具运输,出发时间和预计到达时间等。
收件人编号、发件人编号:
这可以是可有可无的,这个在运输的途中不是很必须的,使用这两个是为了方便货物的处理,客户的查询等。
发件人邮编和发件人地址、收件人邮编和收件人地址:
用这样的组合作为主标识符,是为了消除在对数据库的更新或插入时出现异常,而且这样也是对表进行规范化。
2.2支持软件
Powerdesigner主要用来建立概念模型、物理模型、定义数据表之间的关系,生成脚本创建数据库,也可以用来做建模和运用其中的反向工程:
数据库-》物理模型-》概念模型-》E-R图
来生成E-R图等。
SQLsever2005用来使用powerdesigner生成的脚本语言创建数据库,并对数据库进行管理。
3.结构设计
3.1概念结构设计
powerdesigner本可以先经过建立概念模型,然后转换为相应的物理模型,从而创建数据库,但在打开powerdesigner12.5时在new菜单中可以直接创建物理模型:
如下
然后可以在工作区域直接进行模型建立和对各实体、表属性进行规范化。
最后,通过脚本语言创建数据库,并在SQLsever中对数据库建立相应的存储过程、试图、触发器,对数据库进行数据操作,测试数据库。
3.2详细设计
3.2.1首先,先建立相应的物理模型:
如下
下面两个分别是实体收件人和发件人的信息:
从中对其规范化以下可以得到:
对其中某些多值属性和复合属性进行设计:
如智慧标签在表中它是一个多值属性,那么要对它进行单独建表等。
这样就可以满足2范式了,这样的设计可以在数据库中插入或更新数据时减少或消除异常。
3.2.2在ups视频中我们注意到,在整个货物处理中,它都有一个很重要的标签--智慧标签。
它里面基本覆盖了货物的所有信息,通过它可以正确的得到货物要投递到的地址信息,其中起关键作用的“目的邮递区号”,它货物处理时可以准确的将货物传送到正确的货袋进行装运。
现实中的智慧标签涵盖的内容或许更多远不止我们在实验中设计的那么简单,如下:
而其在货物通过DWS系统检测时,系统可以精确的扫描出货物的智慧标签、尺寸、重量等,进而将货物分类,在这次实验中我们是使用重量来对货物进行分类。
虽然在ups中它通过DWS扫描对货物进行分类,它可以通过重量和邮件形状来分类,但通过形状来分类总有写不太方便,所以通过重量和人工联合来分类会比较精确,但在这次实验中我们采用重量来分类。
3.2.3在powerdesigner中可以运用反向工程生成E---R图:
即
数据库--->物理模型---->概念模型---->E--R图
下面是我们运用powerdesigner反向工程使用脚本生成的E-R图:
实际中一般情况都是先进行E-R图的设计和制作后,在通过E-R图来进行数据库等的创建和管理,但在某些情况可以使用逆向工程来实现E-R图的生成。
4.3.2.4在这次实验中,我们为了能进行货物的分类,我们在智慧标签上做了触发器,当货物的重量符合某个条件时,会触发触发器对货物进行分类,将其分为:
小件、包裹或特殊类货物,这样分类的好处是方便在货物处理中更快捷和安全的处理货物。
3.2.5使用powerdesigner12.5生成的脚本语言来创建数据库:
脚本语言SQl语句:
/*==============================================================*/
/*DBMSname:
MicrosoftSQLServer2005*/
/*Createdon:
2010/6/621:
02:
50*/
/*==============================================================*/
ifexists(select1
fromsys.sysreferencesrjoinsys.sysobjectsoon(o.id=r.constidando.type='F')
wherer.fkeyid=object_id('中转站')ando.name='FK_中转站_REFERENCE_邮件')
altertable中转站
dropconstraintFK_中转站_REFERENCE_邮件
go
ifexists(select1
fromsys.sysreferencesrjoinsys.sysobjectsoon(o.id=r.constidando.type='F')
wherer.fkeyid=object_id('发件人')ando.name='FK_发件人_REFERENCE_邮件')
altertable发件人
dropconstraintFK_发件人_REFERENCE_邮件
go
ifexists(select1
fromsys.sysreferencesrjoinsys.sysobjectsoon(o.id=r.constidando.type='F')
wherer.fkeyid=object_id('发件人_地址')ando.name='FK_发件人_地址_REFERENCE_发件人')
altertable发件人_地址
dropconstraintFK_发件人_地址_REFERENCE_发件人
go
ifexists(select1
fromsys.sysreferencesrjoinsys.sysobjectsoon(o.id=r.constidando.type='F')
wherer.fkeyid=object_id('收件人')ando.name='FK_收件人_REFERENCE_邮件')
altertable收件人
dropconstraintFK_收件人_REFERENCE_邮件
go
ifexists(select1
fromsys.sysreferencesrjoinsys.sysobjectsoon(o.id=r.constidando.type='F')
wherer.fkeyid=object_id('收件人_地址')ando.name='FK_收件人_地址_REFERENCE_收件人')
altertable收件人_地址
dropconstraintFK_收件人_地址_REFERENCE_收件人
go
ifexists(select1
fromsys.sysreferencesrjoinsys.sysobjectsoon(o.id=r.constidando.type='F')
wherer.fkeyid=object_id('智慧标签')ando.name='FK_智慧标签_REFERENCE_邮件')
altertable智慧标签
dropconstraintFK_智慧标签_REFERENCE_邮件
go
ifexists(select1
fromsys.sysreferencesrjoinsys.sysobjectsoon(o.id=r.constidando.type='F')
wherer.fkeyid=object_id('运单')ando.name='FK_运单_REFERENCE_邮件')
altertable运单
dropconstraintFK_运单_REFERENCE_邮件
go
ifexists(select1
fromsys.sysreferencesrjoinsys.sysobjectsoon(o.id=r.constidando.type='F')
wherer.fkeyid=object_id('邮件_分类')ando.name='FK_邮件_分类_REFERENCE_智慧标签')
altertable邮件_分类
dropconstraintFK_邮件_分类_REFERENCE_智慧标签
go
ifexists(select1
fromsys.sysreferencesrjoinsys.sysobjectsoon(o.id=r.constidando.type='F')
wherer.fkeyid=object_id('邮件_处理')ando.name='FK_邮件_处理_REFERENCE_智慧标签')
altertable邮件_处理
dropconstraintFK_邮件_处理_REFERENCE_智慧标签
go
ifexists(select1
fromsys.sysreferencesrjoinsys.sysobjectsoon(o.id=r.constidando.type='F')
wherer.fkeyid=object_id('邮件_目的地址')ando.name='FK_邮件_目的地址_REFERENCE_智慧标签')
altertable邮件_目的地址
dropconstraintFK_邮件_目的地址_REFERENCE_智慧标签
go
ifexists(select1
fromsys.sysreferencesrjoinsys.sysobjectsoon(o.id=r.constidando.type='F')
wherer.fkeyid=object_id('邮件_邮费')ando.name='FK_邮件_邮费_REFERENCE_邮件')
altertable邮件_邮费
dropconstraintFK_邮件_邮费_REFERENCE_邮件
go
ifexists(select1
fromsysobjects
whereid=object_id('中转站')
andtype='U')
droptable中转站
go
ifexists(select1
fromsysobjects
whereid=object_id('发件人')
andtype='U')
droptable发件人
go
ifexists(select1
fromsysobjects
whereid=object_id('发件人_地址')
andtype='U')
droptable发件人_地址
go
ifexists(select1
fromsysobjects
whereid=object_id('收件人')
andtype='U')
droptable收件人
go
ifexists(select1
fromsysobjects
whereid=object_id('收件人_地址')
andtype='U')
droptable收件人_地址
go
ifexists(select1
fromsysobjects
whereid=object_id('智慧标签')
andtype='U')
droptable智慧标签
go
ifexists(select1
fromsysobjects
whereid=object_id('运单')
andtype='U')
droptable运单
go
ifexists(select1
fromsysobjects
whereid=object_id('邮件')
andtype='U')
droptable邮件
go
ifexists(select1
fromsysobjects
whereid=object_id('邮件_分类')
andtype='U')
droptable邮件_分类
go
ifexists(select1
fromsysobjects
whereid=object_id('邮件_处理')
andtype='U')
droptable邮件_处理
go
ifexists(select1
fromsysobjects
whereid=object_id('邮件_目的地址')
andtype='U')
droptable邮件_目的地址
go
ifexists(select1
fromsysobjects
whereid=object_id('邮件_邮费')
andtype='U')
droptable邮件_邮费
go
/*==============================================================*/
/*Table:
中转站*/
/*==============================================================*/
createtable中转站(
邮件编号varchar(30)notnull,
中转站名字varchar(50)null,
中转站电话integernull,
运输工具varchar(10)null,
运输工具编号varchar(30)null,
到达时间datetimenull,
离开时间datetimenull,
constraintPK_中转站primarykey(邮件编号)
)
go
/*==============================================================*/
/*Table:
发件人*/
/*==============================================================*/
createtable发件人(
发件人编号varchar(30)notnull,
邮件编号varchar(30)null,
发件人姓名varchar(30)null,
发件人地址varchar(50)null,
发件人电话integernull,
constraintPK_发件人primarykey(发件人编号)
)
go
/*==============================================================*/
/*Table:
发件人_地址*/
/*==============================================================*/
createtable发件人_地址(
发件人邮编integernotnull,
发件人编号varchar(30)null,
发件人地址varchar(50)null,
constraintPK_发件人_地址primarykey(发件人邮编)
)
go
/*==============================================================*/
/*Table:
收件人*/
/*==============================================================*/
createtable收件人(
收件人编号varchar(30)notnull,
邮件编号varchar(30)null,
收件人姓名varchar(30)null,
收件人地址varchar(50)null,
收件人电话integernull,
签收时间datetimenull,
constraintPK_收件人primarykey(收件人编号)
)
go
/*==============================================================*/
/*Table:
收件人_地址*/
/*==============================================================*/
createtable收件人_地址(
收件人邮编integernotnull,
收件人编号varchar(30)null,
收件人地址varchar(50)null,
constraintPK_收件人_地址primarykey(收件人邮编)
)
go
/*==============================================================*/
/*Table:
智慧标签*/
/*==============================================================*/
createtable智慧标签(
邮件编号varchar(30)notnull,
识别码varchar(30)null,
邮件_邮件编号varchar(30)null,
Maxicode二维条码varchar(30)null,
邮件类型varchar(5)null,
尺寸varchar(30)null,
"重量/磅"floatnull,
发送时间datetimenull,
时限datetimenull,
constraintPK_智慧标签primarykey(邮件编号)
)
go
/*==============================================================*/
/*Table:
运单*/
/*==============================================================*/
createtable运单(
运单号varchar(30)notnull,
邮件编号varchar(30)null,
运输工具varchar(10)null,
运输工具编号varchar(10)null,
起发时间datetimenull,
到达时间datetimenull,
constraintPK_运单primarykey(运单号)
)
go
/*==============================================================*/
/*Table:
邮件*/
/*==============================================================*/
createtable邮件(
邮件编号varchar(30)notnull,
邮件名称varchar(50)null,
智慧标签varchar(30)null,
发件人姓名varchar(30)null,
收件人姓名varchar(30)null,
发件数量integernull,
发件时间datetimenull,
constraintPK_邮件primarykey(邮件编号)
)
go
/*==============================================================*/
/*Table:
邮件_分类*/
/*==============================================================*/
createtable邮件_分类(
邮件编号varchar(30)notnull,
尺寸varchar(30)null,
"重量/磅"floatnull,
类型varchar(5)null,
constraintPK_邮件_分类primarykey(邮件编号)
)
go
/*==============================================================*/
/*Table:
邮件_处理*/
/*=====================