拉格木呷数据库实训报告.docx
《拉格木呷数据库实训报告.docx》由会员分享,可在线阅读,更多相关《拉格木呷数据库实训报告.docx(26页珍藏版)》请在冰豆网上搜索。
拉格木呷数据库实训报告
数据库课程设计
题目:
在线交易网站的客户购买功能数据库分析及实现
姓 名:
拉格木呷
学 号:
2012080332024
学院:
信息学院
专业:
计算机科学与技术
指导教师:
马楠
2015年1月22日
一、系统需求收集分析
1.项目调查、资料收集情况
研究三个不同的网上交易网站
一.研究京东商城
商品(商品编号,商品名称,商品价格,商品规格,商品颜色,商品数量)
订单(订单编号,用户名称,支付信息,快递信息,商品名称,订单金额)
用户(用户名称,电话,地址,电子邮箱)
二.研究淘宝网
商品(商品编号,商品名称,商品价格,商品规格,商品颜色,商品数量)
订单(订单编号,用户名称,支付信息,快递信息,商品名称,订单金额)
用户(用户名称,联系方式,地址,电子邮箱)
三.研究当当网
商品(商品编号,商品名称,商品价格,商品规格,商品颜色,商品数量)
订单(订单编号,用户名称,支付信息,快递信息,商品名称,订单金额)
研究总结
综合浏览国内三大主流交易网站后,发现都大同小异。
无非就是由一些日常生活中耳熟能详,触手可及的实体构成。
人类社会的一切活动都离不开对信息的处理,由于信息世界中的绝大部分信息都可以用数据来表示,因此,信息处理实际上也可以说是数据处理。
商品,用户,订单这三个是电子商务网站不可或缺的元素。
现实生活中实实在在的这三个实体有其属性,商品属性有:
商品编号,商品名称,商品价格,商品规格,商品颜色,商品数量等;订单属性有:
订单编号,用户名称,支付信息,快递信息,商品名称,订单金额等;用户属性有:
用户名称,联系方式,地址,电子邮箱等。
把商品、用户(客户)、订单这三者作为我此次实训研究的切入点,分析三者的数据及三者之间的数据联系。
我们借用DBMS来完成对三大主流电商的相似实体的数据及数据之间联系的分析。
2.项目概述
通过分析现有在线销售网站,了解并熟悉此种网站的特点、功能实现流程,从而开发出一个简易的在线商品销售系统。
3.主要任务要求
●访问并分析现有的在线图书销售网站(三个)
●确定网站的功能
●确定数据库概念设计与数据库逻辑设计
●根据数据库逻辑设计完成数据库建立
●根据网站所需功能确定存储过程、触发器等程序。
二、数据库系统设计
4.引言
如今我们已经走进互联网时代,越来越多的事情都可以在互联网上解决:
网上收发邮件、网上聊天、网上打电话、网上游戏,等等。
当然,买东西同样也可以在网上实现。
现在,网上商城数量繁多,其销售的东西也是不同。
既有凡客这种服饰商城,也有1号店这种吃货天堂,新蛋这种数码电器商城也陆续出现了。
当然,传统的纸质图书也有亚马逊、当当这类网站在经营。
虽然电子书市场正逐渐发展,但不可否认的是纸质书籍还是占很大一部分。
本次课程设计就是围绕“在线交易网站购买功能”这一中心展开。
5.系统任务描述
根据“一、1”中对三个网站进行的分析,我们可以提取出以下实体需要的属性。
用户(用户编号,用户名称,电话,地址,电子邮箱)主键:
用户编号
商品(商品编号,商品名称,商品价格,商品规格,商品数量)主键:
商品编号
购买(订单编号,用户编号,商品编号,支付信息,快递信息,订单金额)主键:
订单编号外键:
用户编号、商品编号
数据库概念结构设计
图“用户”实体及其属性的E-R图表示
“商品”实体及其属性的E-R图表示
“购买”实体及其属性的E-R图表示
各实体及之间联系的E-R图表示
6.数据库逻辑结构设计
用户表设计
实体属性名称
属性代码
数据类型
完整性约束
用户编号
userId
Int
Primarykey
用户名称
userName
Varchar(30)
Notnull
电话
phone
Int
Notnull
地址
addr
Nvarchar(100)
Notnull
电子邮箱
email
Nvarchar(100)
Notnull
商品表设计
实体属性名称
属性代码
数据类型
完整性约束
商品编号
productId
Int
Primarykey
商品名称
productName
nvarchar(100)
unique
商品价格
productPrice
Int
Check(productPrice>0)
商品规格
productSize
Int
Check(productSize>0)
商品数量
productCount
Int
Check(productCount>=0)
购买表设计
实体属性名称
属性代码
数据类型
完整性约束
订单编号
orderId
Int
Primarykey
支付信息
payMessage
Varchar(20)
Notnull
快递信息
expressMessage
Varchar(20)
Notnull
订单金额
orderCheck
int
orderCheck>0
7.数据库物理结构设计(张翌)
注:
本项目最终在Windows8操作系统,MicrosoftSQLServer2012测试通过。
1)建立数据库
SQLCode
代码1建立数据库时自动生成的SQL代码
2)建立表
SQLCode
执行后数据库内表结构如图:
建立表后数据库内表结构
3)输入示例数据
SQLCode
createtableClient
(
userIdintprimarykey,
userNamenvarchar(100)notnull,
phoneintnotnull,
addrnvarchar(100)notnull,
emailnvarchar(100)notnull
)
insertintoClientvalues('024','拉格木呷','945529','北四环东路97号','lagemuga@');
insertintoClientvalues('025','刘晓弟','945530','北四环东路91号','liuxiaodi@');
insertintoClientvalues('026','张鹤轩','945531','北四环东路95号','zhanghexuan@');
insertintoClientvalues('027','高迪','945532','北四环东路94号','gaodi@');
insertintoClientvalues('028','李英妲','945533','北四环东路98号','李英妲@');
insertintoClientvalues('029','谢申兵','945534','北四环东路99号','xieshenbing@');
createtableproduct
(
productIdintprimarykey,
productNamenvarchar(100)unique,
productPriceintcheck(productPrice>0),
productSizeintcheck(productSize>0),
productCountintcheck(productCount>=0),
)
insertintoproductvalues(001,'阿迪达斯',290,39,5);
insertintoproductvalues(002,'耐克',490,40,9);
insertintoproductvalues(003,'李宁',390,42,10);
insertintoproductvalues(004,'鸿星尔克',290,41,20);
insertintoproductvalues(005,'安踏',190,40,14);
insertintoproductvalues(006,'乔丹',290,43,30);
createtablebuy
(
orderIdintprimarykey,
payMessagevarchar(100)notnull,
expressMessagevarchar(100)notnull,
orderCheckintcheck(orderCheck>0),
productIdintreferencesproduct,
userIdintreferencesClient
)
insertintobuyvalues(226320,'在线支付','京东快递',1450,001,024);
insertintobuyvalues(226321,'货到付款','圆通快递',4410,002,025);
insertintobuyvalues(226322,'在线支付','申通快递',3900,003,026);
insertintobuyvalues(226323,'货到付款','京东快递',5800,004,027);
insertintobuyvalues(226324,'货到付款','京东快递',5800,005,028);
insertintobuyvalues(226325,'在线支付','申通快递',8700,006,029);
导入后,该数据库中表内数据如下所示。
表Client的记录
图26表product的记录
表buy的记录
8.主要功能实现
1)查询
1.1简单查询
SQLCode
*查询useId为024的客户的详细情况*/
select*fromClientwhereuserIdlike'24';
/*查询商品的productId及productName,查询结果按productId降序排列*/
selectproductId,productNamefromproduct
orderbyproductIddesc;
执行结果:
查询1.1的执行结果
1.2连接查询
SQLCode /*等值连接查询*/
SELECTClient.*,buy.*
FROMClient,buy
WHEREClient.userId=buy.userId;
/*外连接查询*/
SELECTClient.userId,userName,phone,addr,email,payMessage,expressMessage
FROMClient,buy
WHEREClient.userId=buy.userId;
/*复合连接查询*/
SELECTClient.userId,Client.userName
FROMClient,buy
WHEREClient.userId=buy.userIdand
buy.orderId='226320'and
buy.orderCheck=1450
代码5查询1.2
执行结果:
查询1.2的执行结果
1.3嵌套查询
SQLCode
SELECT*FROMClient
WHEREuserIdIN
(SELECTuserId
FROMbuy
WHEREorderId='226320')
/*不相关查询*/
SELECTuserId
FROMClient
WHEREuserIdIN
(SELECTuserId
FROMbuy
WHEREexpressMessage='京东快递');
查询1.3
。
执行结果:
查询1.3的执行结果
建立视图:
SQLCode createviewC_client
ASSELECTuserName,addr,email
FROMClient
WHEREphone='945529'
withcheckoption;
createviewp_product
ASSELECT*
FROMproduct
WHEREproductName='阿迪达斯'
withcheckoption;
视图2.1的建立
2)存储过程
2.1创建一个存储过程,测试商品中是否有阿迪达斯运动鞋及检索指定userId的姓名和所在地址
建立存储过程:
SQLCode
/*创建一个存储过程,测试商品中是否有阿迪达斯运动鞋*/
use实训
go
createprocedureTestproduct
as
IFEXISTS(SELECT*
FROMproduct
WHEREproductName='阿迪达斯')
PRINT'商品中有阿迪达斯运动鞋'
ELSE
PRINT'商品中有阿迪达斯运动鞋'
go
execTestproduct;
/*检索指定userId的姓名和所在地址*/
use实训
go
CREATEPROCEDUREproc_userName@userIdchar(11)
AS
IF@userIdisNULL
PRINT'请输入客户userId!
'
ELSE
SELECT'name'=userName,addr
FromClient
WHEREuserId=@userId
execproc_userName'24'
存储过程3.1的建立
运行存储过程:
例:
查询2013年10月1日至今的各图书销售数量。
SQLCode
存储过程3.1的运行
运行结果:
存储过程3.1的运行结果
3)触发器
3.1插入订单明细记录时对库存进行判断与操作(张翌)
建立触发器:
SQLCode
/*建立delete触发器tric_buy,该触发器防止删除订单表buy中的记录
*/
use实训
go
CREATETRIGGERtrig_buyONbuy
afterdelete
AS
Begin
ifexists(select*fromdeletedwhereorderId='226320')
begin
raiserror('对不起,您不能删除该记录',1,1)
rollback
end
End
deletefrombuywhereorderId='226320';
触发器4.1的建立
测试触发器:
4)自定义函数
SQLcode
/*设计一个函数,检索指定客户姓名的userId,useName,addr,email)*/
use实训
go
CREATEFUNCTIONzidingyihanshu
(@namechar(10))
RETURNStable
AS
RETURN
(select*fromClient
WHEREuserName=@name)
declare@xnamechar(10)
set@xname='拉格木呷'
select*fromzidingyihanshu(@xname)
执行结果
三、收获和体会
上了一学期的数据库原理与应用这门课,外加这周的实训,在马老师的带领下学到了许多东西,感觉受益颇多。
通过实验及实训熟练使用了微软sqlserver2005/2008系列数据库管理系统软件,掌握了数据库的应用。
此次实训要求我们设计一个小型商务数据库,刚拿到这个题目的时候还是感觉有些无从下手。
经过多次阅读题目要求与请教老师,从最初的无从下手到有些许思绪,到最后自己会着手调研各大主流商务网站作为自己此次课程设计的材料来源,会把无数的知识点联系起来使用。
这与马老师平时声情并茂地讲解每一节课息息相关,如没有老师平时的付出,自己也很难做到学以致用。
经过研究三大主流网站,我从中抽取客户与商品两个实体作为自己研究的基础。
一步一步画实体的概念模式图、逻辑模式及各实体之间的联系。
最后,把自己分析研究的结果转化为数据表存储在数据库管理系统中。
从建表、查询、建立视图、建立存储过程、触发器、自定义函数等内容的操作,也把课本上的知识跟着过了一遍。
真心觉得自己学到的和锻炼的还是蛮多的,当然了自己也觉得这段时间蛮拼的。
此次课程设计的题目不是很大,不过呢,麻雀虽小五脏俱全。
该有的数据库原理与应用的知识也大体上都包括了,当然也有很多不足之处,觉得还是不够完善。
但是,这是自己亲手做出来的,感觉收获还是蛮大的。
感谢此次实践过程中马老师给予的帮助与指导!