云南大学数据库期末大作业数据库设计文档格式.docx
- 文档编号:20040484
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:19
- 大小:304.91KB
云南大学数据库期末大作业数据库设计文档格式.docx
《云南大学数据库期末大作业数据库设计文档格式.docx》由会员分享,可在线阅读,更多相关《云南大学数据库期末大作业数据库设计文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
5)一个订单对应至少有一件商品或多件,一个商品对应多个订单;
6)一个订单可以有一个商品配送单
7)一个仓库可以存放多种商品,一种商品可以存放在一个仓库;
2、数据库逻辑设计:
用文字简要描述实体之间的联系,画出E-R图(标出各联系中实体的基数)。
客户-商品:
n-n;
商品-类别:
n-1;
商品-商店:
客户-订单:
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,
配送人varchar(10),
联系电话numeric(11),
constraintPK_配送单primarykey(查询号),
constraintfk_订单编号foreignkey(订单编号)references订单
createclusteredindex配送_FKon配送单(
订单编号ASC
createuniqueindex配送单_PKon配送单(
查询号ASC
createtable商店
商店号char(5)notnullunique,
商店名char(10),
constraintPK_商店primarykey(商店号)
createtable销售
商店号char(5)notnull,
商品编号char(5)notnull,
库存量int,
constraintPK_销售primarykey(商店号,商品编号)
createtable订购
数量int,
金额float,
constraintPK_订购primarykey(订单编号,商品编号)
5、存储过程、触发器和视图:
根据需要给数据库添加至少六个实用的存储过程、触发器和视图,并说明它们各自的功能。
(需要给出语句执行的结果示意图)
(1)创建视图,查找商品名为'
苹果'
的商品
createviewfind_goods
as
select商品编号,商品名称,价格
from商品
where商品名称like'
苹果%'
(2)创建视图,查找价格在3000-6000的商品
createviewprice
select商品编号,商品名称
where价格>
3000and价格<
6000
(3)创建触发器,提醒店铺中库存量小于10的商品
createtriggertrigger_alarm
on销售
afterupdate
if(select库存量from销售where库存量<
10)<
10
print'
triggerout:
'
select商品编号,库存量from销售where库存量<
return
(4)创建触发器,当删除配送单中的数据时显示出所删信息
createtriggertrigger_del
on配送单
afterdelete
delete'
(5)创建存储过程,根据商品编号,查询该商品的订购量
createprocsp_find_quantity
@商品编号char(5),
@sumqintoutput
select商品编号,sum(数量)
from订购
groupby商品编号
having商品编号=@商品编号
declare@sumqint
execsp_find_quantity
@商品编号='
s0001'
@sumq=@sumqoutput
thesumquantityis:
+
convert(varchar(5),@sumq
(6)创建存储过程,通过商品名称寻找商品信息
createprocsp_find_price
@namechar(10)
select*
where商品名称like@name+'
%'
execsp_find_price
@name='
戴尔
6、分析常见的业务流程,列举出至少五种SQLSELECT语句。
实现的语句要满足如下要求:
a)在五种语句中的查询能反映正常的业务需求;
b)分析中至少要分别出现一次ORDERBY、GROUPBY…HAVING子句;
c)分析中至少使用一次聚集函数;
d)分析中至少使用一次嵌套查询;
e)分析中至少使用一次UNION或INTERSECT运算;
给出每一种语句执行的结果。
(1)计算并查找订购单中相同订单订购超过5000的总额
select订单编号,sum(金额)as总额
groupby订单编号
havingsum(金额)>
5000
(2)查找即购买了商品编号为s0001又买了s0002的客户
select姓名
from客户b,订单o,订购s
wheres.商品编号='
andb.客户编号=o.客户编号ando.订单编号=s.订单编号
intersect
s0002'
(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订购.商品编号='
)
(6)查询当日销售总额
select订购时间,sum(总额)as营业额
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{
broker.freeConnection(conn);
catch(Exceptione){
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"
>
html>
head>
metahttp-equiv="
Content-Type"
content="
charset=UTF-8"
title>
Inserttitlehere<
/title>
/head>
body>
p>
数据库实验大作业<
/p>
搜索配送单中的数据<
%
//从工厂中得到连接
ConnectionFactoryfactory=ConnectionFactory.getInstatnce();
Connectionconnection=factory.getConnection();
//执行语句
PreparedStatementpstatement=null;
//结果集
ResultSetrs=null;
pstatement=connection.prepareStatement("
select*from配送单"
//执行
rs=pstatement.executeQuery();
tableborder=1>
tr>
th>
查询号<
/th>
订单编号<
配送人<
/tr>
while(rs.next()){
out.println("
"
td>
+rs.getString
(1)+"
/td>
+rs.getString
(2)+"
+rs.getString(3)+"
/table>
%//显示完毕,释放资源
try{
if(rs!
rs.close();
if(pstatement!
pstatement.close();
if(factory!
factory.freeConnection(connection);
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
/body>
/html>
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 云南大学 数据库 期末 作业 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)