云南大学大数据库期末大作业大数据库设计.docx

上传人:b****7 文档编号:9200281 上传时间:2023-02-03 格式:DOCX 页数:22 大小:304.75KB
下载 相关 举报
云南大学大数据库期末大作业大数据库设计.docx_第1页
第1页 / 共22页
云南大学大数据库期末大作业大数据库设计.docx_第2页
第2页 / 共22页
云南大学大数据库期末大作业大数据库设计.docx_第3页
第3页 / 共22页
云南大学大数据库期末大作业大数据库设计.docx_第4页
第4页 / 共22页
云南大学大数据库期末大作业大数据库设计.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

云南大学大数据库期末大作业大数据库设计.docx

《云南大学大数据库期末大作业大数据库设计.docx》由会员分享,可在线阅读,更多相关《云南大学大数据库期末大作业大数据库设计.docx(22页珍藏版)》请在冰豆网上搜索。

云南大学大数据库期末大作业大数据库设计.docx

云南大学大数据库期末大作业大数据库设计

云南大学软件学院实验报告

课程:

数据库原理与实用技术实验学期:

任课教师:

专业:

学号:

姓名:

成绩:

期末大作业:

ElectronicVentor数据库设计

一、实验目的

(1)掌握数据库设计的基本方法

(2)掌握各种数据库对象的设计方法

(3)熟练掌握DBA必须具备的技能

二、实验内容

1、根据项目的应用和项目的需求说明文档,进行详细的需求分析,给出需求分析的结果。

(1)客户可以在网站上注册,注册的客户要提供客户的姓名、电话、地址,以方便售后和联系,姓名即作为用户名,和密码一起用于注册和登录,客户编号可唯一识别用户,卡号可网上支付。

其中地址、电话以方便联系和寄货;

(2)网站管理员可以登记各种商品,供客户查询,订购。

登记商品时要提供商品的名称、价格,商店中现有商品量,商品编号可唯一识别商品;

(3)类别表示商品所属类别,类别编号可唯一识别类别,其中包含了,商品类别名称和制造厂商,可以对商品进行分类售卖;

(4)客户可以在网上下订单,也可以到实体店购物,其在订单上所选择的支付方式不同(信用卡、借记卡、现金,现金代表实体店购物),网站管理员可以查看订单,并及时将订单的处理情况更新(比如货物已寄出的信息,订单状态:

0:

未处理,1:

已处理,2:

已发货);订单编号可唯一识别订单,订单中包含订单产生时间,订单状态,支付方式和支付总额;

(5)实体商店有自己的店名,卖多种商品,每个商店都有固定的地址,顾客可以到店中买商品,(注:

在实体店中购买商品的顾客一律将顾客名默认为佚名),当商店中的库存量小于10时会有提醒到仓库中拿货;

(6)配送单中包含查询号可唯一识别配送单,配送人,联系方式;

(7)仓库中仓库编号可唯一识别仓库,其中每个仓库都有区号,代表其地址。

(8)各实体间关系

1)一个客户可以购买多种商品,一种商品可以被多个客户购买;

2)一个商品属于且仅属于一种类别,一种类别的商品可以包含多个商品或没有;

3)一种商品放在多个商店中销售,一个商店至少销售一种或销售多种商品;

4)一个订单对应一个客户,一个客户对应多个订单;

5)一个订单对应至少有一件商品或多件,一个商品对应多个订单;

6)一个订单可以有一个商品配送单

7)一个仓库可以存放多种商品,一种商品可以存放在一个仓库;

 

2、数据库逻辑设计:

用文字简要描述实体之间的联系,画出E-R图(标出各联系中实体的基数)。

客户-商品:

n-n;

商品-类别:

n-1;

商品-商店:

n-n;

客户-订单:

1-n;

订单-商品:

1-n;

订单-配送当:

1-1;

仓库-商品:

1-n

 

3、数据库物理设计:

将E-R图转换为数据表。

需要给出详细的转换规则,对应生成的表,属性(主属性、描述性属性,多值属性,符合属性等),主键,外键,约束(取值是否NULL等),索引(三种类型的索引至少每种出现一次)等。

在客户,配送单,类别中建立索引,语句在4题中

如3中,有2个n-n关系,分生成订购表和销售表

 

4、SQL中创建语句的使用:

根据第二步中的结果,将相应的表,属性,主键,外键,约束等使用标准的SQLCREATE语句实现。

(要求给出创建的标准语句,以及创建之后在SQL数据库中的脚本和截图)。

createtable客户

客户编号char(5)notnullunique,

姓名varchar(10),

密码varchar(15),

电话numeric(11),

地址varchar(20),

卡号char(19),

constraintPK_客户primarykey(客户编号)

);

createtable类别

类别编号char(5)notnullunique,

类别名称varchar(10),

制造商varchar(10),

constraintPK_类别primarykey(类别编号)

);

createuniqueindex类别_PKon类别(

类别编号ASC

);

createtable仓库

仓库编号char(5)notnullunique,

仓库区号varchar(5),

constraintPK_仓库primarykey(仓库编号)

);

createtable商品

商品编号char(5)notnullunique,

仓库编号char(5)notnull,

类别编号char(5)notnull,

商品名称varchar(50),

价格float,

constraintPK_商品primarykey(商品编号),

constraintfk_仓库编号foreignkey(仓库编号)references仓库,

constraintfk_类别编号foreignkey(类别编号)references类别

);

createuniqueclusteredindex客户_PKon客户(

客户编号ASC

);

createtable订单

订单编号char(5)notnull,

客户编号char(5),

订购时间varchar(10),

支付方式varchar(10),

订单状态numeric,

总额float,

constraintPK_订单primarykey(订单编号),

constraintfk_客户编号foreignkey(客户编号)references客户

);

createtable配送单

查询号char(10)notnullunique,

订单编号char(5)notnull,

配送人varchar(10),

联系电话numeric(11),

constraintPK_配送单primarykey(查询号),

constraintfk_订单编号foreignkey(订单编号)references订单

);

createclusteredindex配送_FKon配送单(

订单编号ASC

);

createuniqueindex配送单_PKon配送单(

查询号ASC

);

createtable商店

商店号char(5)notnullunique,

商店名char(10),

地址varchar(20),

constraintPK_商店primarykey(商店号)

);

createtable销售

商店号char(5)notnull,

商品编号char(5)notnull,

库存量int,

constraintPK_销售primarykey(商店号,商品编号)

);

createtable订购

订单编号char(5)notnull,

商品编号char(5)notnull,

数量int,

金额float,

constraintPK_订购primarykey(订单编号,商品编号)

);

5、存储过程、触发器和视图:

根据需要给数据库添加至少六个实用的存储过程、触发器和视图,并说明它们各自的功能。

(需要给出语句执行的结果示意图)

(1)创建视图,查找商品名为'苹果'的商品

createviewfind_goods

as

select商品编号,商品名称,价格

from商品

where商品名称like'苹果%'

(2)创建视图,查找价格在3000-6000的商品

createviewprice

as

select商品编号,商品名称

from商品

where价格>3000and价格<6000

(3)创建触发器,提醒店铺中库存量小于10的商品

createtriggertrigger_alarm

on销售

afterupdate

as

if(select库存量from销售where库存量<10)<10

print'triggerout:

'

select商品编号,库存量from销售where库存量<10

return

(4)创建触发器,当删除配送单中的数据时显示出所删信息

createtriggertrigger_del

on配送单

afterdelete

as

print'delete'

(5)创建存储过程,根据商品编号,查询该商品的订购量

createprocsp_find_quantity

@商品编号char(5),

@sumqintoutput

as

select商品编号,sum(数量)

from订购

groupby商品编号

having商品编号=@商品编号

declare@sumqint

execsp_find_quantity

@商品编号='s0001',

@sumq=@sumqoutput

print'thesumquantityis:

'+

convert(varchar(5),@sumq

(6)创建存储过程,通过商品名称寻找商品信息

createprocsp_find_price

@namechar(10)

as

select*

from商品

where商品名称like@name+'%'

execsp_find_price

@name='戴尔

6、分析常见的业务流程,列举出至少五种SQLSELECT语句。

实现的语句要满足如下要求:

a)在五种语句中的查询能反映正常的业务需求;

b)分析中至少要分别出现一次ORDERBY、GROUPBY…HAVING子句;

c)分析中至少使用一次聚集函数;

d)分析中至少使用一次嵌套查询;

e)分析中至少使用一次UNION或INTERSECT运算;

给出每一种语句执行的结果。

(1)计算并查找订购单中相同订单订购超过5000的总额

select订单编号,sum(金额)as总额

from订购

groupby订单编号

havingsum(金额)>5000

(2)查找即购买了商品编号为s0001又买了s0002的客户

select姓名

from客户b,订单o,订购s

wheres.商品编号='s0001'andb.客户编号=o.客户编号ando.订单编号=s.订单编号

intersect

select姓名

from客户b,订单o,订购s

wheres.商品编号='s0002'andb.客户编号=o.客户编号ando.订单编号=s.订单编号

(3)按照顾客c0002消费的总额大小顺序排订单编号

select订单编号,总额

from订单

where客户编号='c0001'

orderby总额desc

(4)查询订单编号为00003的配送信息

selecto.订单编号,配送人,联系电话

from订单o,配送单s

whereo.订单编号=s.订单编号ands.订单编号='00003'

(5)查找同样买了商品编号为s0002的客户信息

select客户编号,姓名,电话

from客户

where客户编号

in

(select客户编号

from订单,订购

where订单.订单编号=订购.订单编号and订购.商品编号='s0002')

(6)查询当日销售总额

select订购时间,sum(总额)as营业额

from订单

groupby订购时间

7、(选做)完成数据库的设计之后,根据自己所熟悉的编程语言(C、C++、JAVA),实现一个简单的程序,能够在程序中组装SELECT语句,链接创建的数据库,进行查询,并显示查询结果。

若完成,请提供详细的代码清单(代码作为附件,附在本报告的最后)。

用JSP页面编写

实现如下:

8、实验小结。

在本次实验中一共建立了9个表,完成了6条Select语句,6条关于视图、触发器和存储过程,在语句实现过程中,因为涉及内容比较广,差不多把数据库语句全部复习了一遍才开始做,所花的时间较长,但也收益颇丰,对数据库的设计和实现也有了总体了解。

最后在做选做时,选择了通过网页的方式实现,因为在做专业实训时也用了JavaEE这项技术,所以实现起来颇为得心应手。

附件

packagecom.ynu.myBusiness.db;

importjava.sql.Connection;

importjava.sql.SQLException;

importjava.sql.ResultSet;

importjava.sql.Statement;

importcom.devdaily.opensource.database.DDConnectionBroker;

publicclassConnectionBrokerimplementsBuildConnection{

privateStringdriver=null;

privateStringurl=null;

privateStringusername=null;

privateStringpassword=null;

privateintminConnections=0;

privateintmaxConnections=0;

privatelongtimeout=0;

privatelongleaseTime=0;

privateStringlogFile=null;

privateDDConnectionBrokerbroker=null;

voidsetUp(){

//驱动包

driver="com.microsoft.sqlserver.jdbc.SQLServerDriver";

//连接到数据库business

url="jdbc:

sqlserver:

//127.0.0.1:

1433;DatabaseName=business";

username="sa";

password="yym";

minConnections=3;

maxConnections=6;

timeout=100;

leaseTime=60000;

//日志文件存储位置

logFile="C:

/D/DDConnectionBroker.log";

broker=null;

}

publicConnectiongetConnection()throwsSQLException{

try{

//construct(建立)thebroker(中间人)

broker=newDDConnectionBroker(driver,url,username,password,

minConnections,maxConnections,timeout,leaseTime,logFile);

}

catch(SQLExceptionse){

//couldnotgetabroker;notmuchreasontogoon

System.out.println(se.getMessage());

System.out.println("Couldnotconstructabroker,quitting.");

}

//建立broker成功

returnbroker.getConnection();

}

publicvoidfreeConnection(Connectionconn)throwsSQLException{

try{

broker.freeConnection(conn);

}

catch(Exceptione){

System.out.println("ThrewanexceptiontryingtofreemyConnection:

"+e.getMessage());

}

}

publicintgetNumberConnections()throwsSQLException{

if(broker!

=null)

returnbroker.getNumberConnections();

else

return-1;

}

publicConnectionBroker(){

super();

setUp();

}

}

<%@pagelanguage="java"contentType="text/html;charset=GB2312"

pageEncoding="GB2312"%>

<%@pageimport="com.ynu.myBusiness.db.*,java.sql.Connection,java.sql.PreparedStatement,java.sql.ResultSet,java.sql.Statement"%>

DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http:

//www.w3.org/TR/html4/loose.dtd">

Inserttitlehere

数据库实验大作业

搜索配送单中的数据

<%

//从工厂中得到连接

ConnectionFactoryfactory=ConnectionFactory.getInstatnce();

Connectionconnection=factory.getConnection();

//执行语句

PreparedStatementpstatement=null;

//结果集

ResultSetrs=null;

pstatement=connection.prepareStatement("select*from配送单");

//执行

rs=pstatement.executeQuery();

%>

查询号订单编号配送人

<%

while(rs.next()){

out.println("");

out.println(""+rs.getString

(1)+"");

out.println(""+rs.getString

(2)+"");

out.println(""+rs.getString(3)+"");

out.println("");

}

%>

<%//显示完毕,释放资源

try{

if(rs!

=null)

rs.close();

if(pstatement!

=null)

pstatement.close();

if(factory!

=null)

factory.freeConnection(connection);

}catch(Exceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

%>

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1