云南大學(xué)數(shù)據(jù)庫期末大作業(yè):數(shù)據(jù)庫設(shè)計.doc
《云南大學(xué)數(shù)據(jù)庫期末大作業(yè):數(shù)據(jù)庫設(shè)計.doc》由會員分享,可在線閱讀,更多相關(guān)《云南大學(xué)數(shù)據(jù)庫期末大作業(yè):數(shù)據(jù)庫設(shè)計.doc(20頁珍藏版)》請在裝配圖網(wǎng)上搜索。
云南大學(xué)軟件學(xué)院 實驗報告 課程: 數(shù)據(jù)庫原理與實用技術(shù)實驗 學(xué)期: 任課教師: 專業(yè): 學(xué)號: 姓名: 成績: 期末大作業(yè): Electronic Ventor 數(shù)據(jù)庫設(shè)計 一、實驗?zāi)康? (1)掌握數(shù)據(jù)庫設(shè)計的基本方法 (2)掌握各種數(shù)據(jù)庫對象的設(shè)計方法 (3)熟練掌握DBA必須具備的技能 二、實驗內(nèi)容 1、 根據(jù)項目的應(yīng)用和項目的需求說明文檔,進(jìn)行詳細(xì)的需求分析,給出需求分析的結(jié)果。 (1) 客戶可以在網(wǎng)站上注冊,注冊的客戶要提供客戶的姓名、電話、地址,以方便售后和聯(lián)系,姓名即作為用戶名,和密碼一起用于注冊和登錄,客戶編號可唯一識別用戶,卡號可網(wǎng)上支付。其中地址、電話以方便聯(lián)系和寄貨; (2) 網(wǎng)站管理員可以登記各種商品,供客戶查詢,訂購。登記商品時要提供商品的名稱、價格,商店中現(xiàn)有商品量,商品編號可唯一識別商品; (3) 類別表示商品所屬類別,類別編號可唯一識別類別,其中包含了,商品類別名稱和制造廠商,可以對商品進(jìn)行分類售賣; (4) 客戶可以在網(wǎng)上下訂單,也可以到實體店購物,其在訂單上所選擇的支付方式不同(信用卡、借記卡、現(xiàn)金,現(xiàn)金代表實體店購物),網(wǎng)站管理員可以查看訂單,并及時將訂單的處理情況更新(比如貨物已寄出的信息,訂單狀態(tài):0:未處理,1:已處理,2:已發(fā)貨);訂單編號可唯一識別訂單,訂單中包含訂單產(chǎn)生時間,訂單狀態(tài),支付方式和支付總額; (5) 實體商店有自己的店名,賣多種商品,每個商店都有固定的地址,顧客可以到店中買商品,(注:在實體店中購買商品的顧客一律將顧客名默認(rèn)為佚名),當(dāng)商店中的庫存量小于10時會有提醒到倉庫中拿貨; (6) 配送單中包含查詢號可唯一識別配送單,配送人,聯(lián)系方式; (7) 倉庫中倉庫編號可唯一識別倉庫,其中每個倉庫都有區(qū)號,代表其地址 。 (8) 各實體間關(guān)系 1) 一個客戶可以購買多種商品,一種商品可以被多個客戶購買; 2) 一個商品屬于且僅屬于一種類別,一種類別的商品可以包含多個商品或沒有; 3) 一種商品放在多個商店中銷售,一個商店至少銷售一種或銷售多種商品; 4) 一個訂單對應(yīng)一個客戶,一個客戶對應(yīng)多個訂單; 5) 一個訂單對應(yīng)至少有一件商品或多件,一個商品對應(yīng)多個訂單; 6) 一個訂單可以有一個商品配送單 7) 一個倉庫可以存放多種商品,一種商品可以存放在一個倉庫; 2、 數(shù)據(jù)庫邏輯設(shè)計:用文字簡要描述實體之間的聯(lián)系,畫出E-R圖(標(biāo)出各聯(lián)系中實體的基數(shù))。 客戶-商品:n-n; 商品-類別:n-1; 商品-商店:n-n; 客戶-訂單:1-n; 訂單-商品:1-n; 訂單-配送當(dāng):1-1; 倉庫-商品:1-n 3、數(shù)據(jù)庫物理設(shè)計:將E-R圖轉(zhuǎn)換為數(shù)據(jù)表。需要給出詳細(xì)的轉(zhuǎn)換規(guī)則,對應(yīng)生成的表,屬性(主屬性、描述性屬性,多值屬性,符合屬性等),主鍵,外鍵,約束(取值是否NULL等),索引(三種類型的索引至少每種出現(xiàn)一次)等。 在客戶,配送單,類別中建立索引,語句在4題中 如3中,有2個n-n關(guān)系,分生成訂購表和銷售表 4、SQL中創(chuàng)建語句的使用:根據(jù)第二步中的結(jié)果,將相應(yīng)的表,屬性,主鍵,外鍵,約束等使用標(biāo)準(zhǔn)的SQL CREATE語句實現(xiàn)。(要求給出創(chuàng)建的標(biāo)準(zhǔn)語句,以及創(chuàng)建之后在SQL數(shù)據(jù)庫中的腳本和截圖)。 create table 客戶 ( 客戶編號 char(5) not null unique, 姓名 varchar(10), 密碼 varchar(15), 電話 numeric(11), 地址 varchar(20), 卡號 char(19), constraint PK_客戶 primary key (客戶編號) ); create table 類別 ( 類別編號 char(5) not null unique, 類別名稱 varchar(10), 制造商 varchar(10) , constraint PK_類別 primary key (類別編號) ); create unique index 類別_PK on 類別 ( 類別編號 ASC ); create table 倉庫 ( 倉庫編號 char(5) not null unique, 倉庫區(qū)號 varchar(5), constraint PK_倉庫 primary key (倉庫編號) ); create table 商品 ( 商品編號 char(5) not null unique, 倉庫編號 char(5) not null, 類別編號 char(5) not null, 商品名稱 varchar(50), 價格 float, constraint PK_商品 primary key (商品編號), constraint fk_倉庫編號 foreign key(倉庫編號) references 倉庫, constraint fk_類別編號 foreign key(類別編號)references 類別 ); create unique clustered index 客戶_PK on 客戶 ( 客戶編號 ASC ); create table 訂單 ( 訂單編號 char(5) not null, 客戶編號 char(5), 訂購時間 varchar(10), 支付方式 varchar(10), 訂單狀態(tài) numeric, 總額 float , constraint PK_訂單 primary key (訂單編號), constraint fk_客戶編號 foreign key(客戶編號)references 客戶 ); create table 配送單 ( 查詢號 char(10) not null unique, 訂單編號 char(5) not null, 配送人 varchar(10), 聯(lián)系電話 numeric(11), constraint PK_配送單 primary key (查詢號), constraint fk_訂單編號 foreign key(訂單編號) references 訂單 ); create clustered index 配送_FK on 配送單 ( 訂單編號 ASC ); create unique index 配送單_PK on 配送單 ( 查詢號 ASC ); create table 商店 ( 商店號 char(5) not null unique, 商店名 char(10), 地址 varchar(20), constraint PK_商店 primary key (商店號) ); create table 銷售 ( 商店號 char(5) not null, 商品編號 char(5) not null, 庫存量 int, constraint PK_銷售 primary key(商店號, 商品編號) ); create table 訂購 ( 訂單編號 char(5) not null, 商品編號 char(5) not null, 數(shù)量 int, 金額 float, constraint PK_訂購 primary key (訂單編號, 商品編號) ); 5、存儲過程、觸發(fā)器和視圖:根據(jù)需要給數(shù)據(jù)庫添加至少六個實用的存儲過程、觸發(fā)器和視圖,并說明它們各自的功能。(需要給出語句執(zhí)行的結(jié)果示意圖) (1)創(chuàng)建視圖,查找商品名為蘋果的商品 create view find_goods as select 商品編號,商品名稱,價格 from 商品 where 商品名稱 like 蘋果% (2)創(chuàng)建視圖,查找價格在3000-6000的商品 create view price as select 商品編號,商品名稱 from 商品 where 價格>3000 and 價格<6000 (3)創(chuàng)建觸發(fā)器,提醒店鋪中庫存量小于10的商品 create trigger trigger_alarm on 銷售 after update as if(select 庫存量 from 銷售 where 庫存量<10)<10 print trigger out: select 商品編號,庫存量 from 銷售 where 庫存量<10 return (4) 創(chuàng)建觸發(fā)器,當(dāng)刪除配送單中的數(shù)據(jù)時顯示出所刪信息 create trigger trigger_del on 配送單 after delete as print delete (5)創(chuàng)建存儲過程,根據(jù)商品編號,查詢該商品的訂購量 create proc sp_find_quantity @商品編號 char(5), @sumq int output as select 商品編號,sum(數(shù)量) from 訂購 group by 商品編號 having 商品編號=@商品編號 declare @sumq int exec sp_find_quantity @商品編號=s0001, @sumq=@sumq output print the sum quantity is:+ convert(varchar(5),@sumq (6)創(chuàng)建存儲過程,通過商品名稱尋找商品信息 create proc sp_find_price @name char(10) as select * from 商品 where 商品名稱 like @name + % exec sp_find_price @name=戴爾 6、分析常見的業(yè)務(wù)流程,列舉出至少五種SQL SELECT語句。實現(xiàn)的語句要滿足如下要求: a) 在五種語句中的查詢能反映正常的業(yè)務(wù)需求; b) 分析中至少要分別出現(xiàn)一次ORDER BY、GROUP BY … HAVING子句; c) 分析中至少使用一次聚集函數(shù); d) 分析中至少使用一次嵌套查詢; e) 分析中至少使用一次UNION或INTERSECT運算; 給出每一種語句執(zhí)行的結(jié)果。 (1)計算并查找訂購單中相同訂單訂購超過5000的總額 select 訂單編號,sum(金額)as 總額 from 訂購 group by 訂單編號 having sum(金額)>5000 (2) 查找即購買了商品編號為s0001又買了s0002的客戶 select 姓名 from 客戶 b,訂單 o,訂購 s where s.商品編號=s0001 and b.客戶編號=o.客戶編號 and o.訂單編號=s.訂單編號 intersect select 姓名 from 客戶 b,訂單 o,訂購 s where s.商品編號=s0002 and b.客戶編號=o.客戶編號 and o.訂單編號=s.訂單編號 (3)按照顧客c0002消費的總額大小順序排訂單編號 select 訂單編號,總額 from 訂單 where 客戶編號=c0001 order by 總額 desc (4)查詢訂單編號為00003的配送信息 select o.訂單編號,配送人,聯(lián)系電話 from 訂單 o,配送單 s where o.訂單編號=s.訂單編號 and s.訂單編號=00003 (5)查找同樣買了商品編號為s0002的客戶信息 select 客戶編號,姓名,電話 from 客戶 where 客戶編號 in (select 客戶編號 from 訂單,訂購 where 訂單.訂單編號=訂購.訂單編號 and 訂購.商品編號=s0002) (6)查詢當(dāng)日銷售總額 select 訂購時間,sum(總額) as 營業(yè)額 from 訂單 group by 訂購時間 7、 (選做)完成數(shù)據(jù)庫的設(shè)計之后,根據(jù)自己所熟悉的編程語言(C、C++、JAVA),實現(xiàn)一個簡單的程序,能夠在程序中組裝SELECT語句,鏈接創(chuàng)建的數(shù)據(jù)庫,進(jìn)行查詢,并顯示查詢結(jié)果。若完成,請?zhí)峁┰敿?xì)的代碼清單(代碼作為附件,附在本報告的最后)。 用JSP頁面編寫 實現(xiàn)如下: 8、實驗小結(jié)。 在本次實驗中一共建立了9個表,完成了6條Select語句,6條關(guān)于視圖、觸發(fā)器和存儲過程,在語句實現(xiàn)過程中,因為涉及內(nèi)容比較廣,差不多把數(shù)據(jù)庫語句全部復(fù)習(xí)了一遍才開始做,所花的時間較長,但也收益頗豐,對數(shù)據(jù)庫的設(shè)計和實現(xiàn)也有了總體了解。最后在做選做時,選擇了通過網(wǎng)頁的方式實現(xiàn),因為在做專業(yè)實訓(xùn)時也用了Java EE這項技術(shù),所以實現(xiàn)起來頗為得心應(yīng)手。 附件 package com.ynu.myBusiness.db; import java.sql.Connection; import java.sql.SQLException; import java.sql.ResultSet; import java.sql.Statement; import com.devdaily.opensource.database.DDConnectionBroker; public class ConnectionBroker implements BuildConnection { private String driver = null; private String url = null; private String username = null; private String password = null; private int minConnections = 0; private int maxConnections = 0; private long timeout = 0; private long leaseTime = 0; private String logFile = null; private DDConnectionBroker broker = null; void setUp() { //驅(qū)動包 driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; //連接到數(shù)據(jù)庫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; } public Connection getConnection() throws SQLException { try { // construct(建立) the broker(中間人) broker = new DDConnectionBroker(driver, url, username, password, minConnections, maxConnections, timeout, leaseTime, logFile); } catch (SQLException se) { // could not get a broker; not much reason to go on System.out.println(se.getMessage()); System.out.println("Could not construct a broker, quitting."); } //建立broker成功 return broker.getConnection(); } public void freeConnection(Connection conn) throws SQLException { try { broker.freeConnection(conn); } catch (Exception e) { System.out.println("Threw an exception trying to free my Connection: "+ e.getMessage()); } } public int getNumberConnections() throws SQLException { if (broker != null) return broker.getNumberConnections(); else return -1; } public ConnectionBroker() { super(); setUp(); } } <%@ page language="java" contentType="text/html; charset=GB2312" pageEncoding="GB2312"%> <%@ page import="com.ynu.myBusiness.db.*,java.sql.Connection,java.sql.PreparedStatement,java.sql.ResultSet,java.sql.Statement" %>數(shù)據(jù)庫實驗大作業(yè)
搜索配送單中的數(shù)據(jù)
<% //從工廠中得到連接 ConnectionFactory factory=ConnectionFactory.getInstatnce(); Connection connection= factory.getConnection(); //執(zhí)行語句 PreparedStatement pstatement = null; //結(jié)果集 ResultSet rs = null; pstatement = connection.prepareStatement("select * from 配送單"); //執(zhí)行 rs = pstatement.executeQuery(); %>查詢號 | 訂單編號 | 配送人 |
---|---|---|
" + rs.getString(1) + " | "); out.println("" + rs.getString(2) + " | "); out.println("" + rs.getString(3) + " | "); out.println("
- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該PPT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 云南大學(xué) 數(shù)據(jù)庫 期末 作業(yè) 設(shè)計
鏈接地址:http://weibangfood.com.cn/p-6683992.html