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