當前位置:首頁 » 數據倉庫 » 資料庫案例18例
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

資料庫案例18例

發布時間: 2023-03-20 02:39:04

A. Oracle資料庫實例及其相關概念

完整的Oracle資料庫通常由兩部分組成 Oracle資料庫實例和資料庫

)資料庫是一系列物理文件的集合(數據文件 控制文件 聯機日誌 參數文件等)

)Oracle資料庫實例則是一組Oracle後台進程/線程以及在伺服器分配的共享內存區

在啟動Oracle資料庫伺服器時 實際上是在伺服器的內存中創建一個Oracle實例(即在伺服器內存中分配共享內存並創建相關的後台內存) 然後由這個Oracle資料庫實例來訪問和控制磁碟中的數據文件 Oracle有一個很大的內存快 成為全局區(SGA)

一 資料庫 表空間 數據文件

資料庫

資料庫是數據集合 Oracle是一種資料庫管理系統 是一種關系型的資料庫管理系統

通常情況了我們稱的 資料庫 並不僅指物理的數據集合 他包含物理數據 資料庫管理系統 也即物理數據 內存 操作系統進程的組合體

資料庫的數據存儲在表中 數據的關系由列來定義 即通常我們講的欄位 每個列都有一個列名 數據以行(我們通常稱為記錄)的方式存儲在表中 表之間可以相互關聯 以上就是關系模型資料庫的一個最簡單的描述

當然 Oracle也是提供對面象對象型的結構資料庫的最強大支持 對象既可以與其它對象建立關系 也可以包含其它對象 關於OO型資料庫 以後利用專門的篇幅來討論 一般情況下我們的討論都基於關系模型

表空間 文件

無論關系結構還是OO結構 Oracle資料庫都將其數據存儲在文件中 資料庫結構提供對數據文件的邏輯映射 允許不同類型的數據分開存儲 這些邏輯劃分稱作表空間

表空間(tablespace)是資料庫的邏輯劃分 每個資料庫至少有一個表空間(稱作SYSTEM表空間) 為了便於管理和提高運行效率 可以使用一些附加表空間來劃分用戶和應用程序 例如 USER表空間供一般用戶使用 RBS表空間供回滾段使用 一個表空間只能屬於一個資料庫

每個表空間由同一磁碟上的一個或多個文件組成 這些文件叫數據文件(datafile) 一個數據文件只能屬於一個表空間 在Oracle 以後 數據文件創建可以改變大小 創建新的表空間需要創建新的數據文件 數據文件一旦加入到表空間中 就不能從這個表空間中移走 也不能與其它表空間發生聯系

如果資料庫存儲在多個表空間中 可以將它們各自的數據文件存放在不同磁碟上來對其進行物理分割 在規劃和協調資料庫I/O請求的方法中 上述的數據分割是一種很重要的方法

Oracle資料庫的存儲結構分為邏輯存儲結構和物理存儲結構

)邏輯存儲結構 用於描述Oracle內部組織和管理數據的方式

)物理存儲結構 用於描述Oracle外部即操作系統中組織和管理數據的方式

二 Oracle資料庫實例

為了訪問資料庫中的數據 Oracle使用一組所有用戶共享的後台進程 此外 還有一些存儲結構(統稱為System Gloabl Area 即SGA) 用來存儲最近從資料庫查詢的數據 數據塊緩存區和sql共享池(Shared SQL Pool)是SGA的最大部分 一般佔SGA內存的 %以上 通過減少對數據文件的I/O次數 這些存儲區域可以改善資料庫的性能

Oracle資料庫實例(instance)也稱作伺服器(server) 是用來訪問資料庫文件集的存儲結構及後台進程的集合 一個資料庫可以被多個實例訪問(這是Oracle並行伺服器選項)

lishixin/Article/program/Oracle/201311/17362

B. 資料庫索引的操作案例

最普通的情況,是為出現在where子句的欄位建一個索引。為方便講述,先建立一個如下的表。
CREATE TABLE mytable(
idserial primary key,
category_id int not null default0,
user_id int not null default0,
adddate int not null default0
);
如果在查詢時常用類似以下的語句:
SELECT * FROM mytable WHERE category_id=1;
最直接的應對之道,是為category_id建立一個簡單的索引:
CREATE INDEX mytable_categoryid ON mytable (category_id);
OK.如果有不止一個選擇條件呢?例如:
SELECT * FROM mytable WHERE category_id=1 AND user_id=2;
第一反應可能是,再給user_id建立一個索引。不好,這不是一個最佳的方法。可以建立多重的索引。
CREATE INDEX mytable_categoryid_userid ON mytable(category_id,user_id);
注意到在命名時的習慣了嗎?使用表名_欄位1名_欄位2名的方式。很快就會知道為什麼這樣做了。
現在已經為適當的欄位建立了索引,不過,還是有點不放心吧,可能會問,資料庫會真正用到這些索引嗎?測試一下就OK,對於大多數的資料庫來說,這是很容易的,只要使用EXPLAIN命令:
EXPLAIN
SELECT * FROM mytable
WHERE category_id=1 AND user_id=2;
This is what Postgres 7.1 returns (exactlyasI expected)
NOTICE:QUERY PLAN:
Index Scan using mytable_categoryid_userid on
mytable(cost=0.00..2.02 rows=1 width=16)
EXPLAIN
以上是postgres的數據,可以看到該資料庫在查詢的時候使用了一個索引(一個好開始),而且它使用的是創建的第二個索引。看到上面命名的好處了吧,馬上知道它使用適當的索引了。
接著,來個稍微復雜一點的,如果有個ORDERBY 子句呢?不管你信不信,大多數的資料庫在使用orderby的時候,都將會從索引中受益。
SELECT * FROM mytable
WHERE category_id=1 AND user_id=2
ORDER BY adddate DESC;
很簡單,就像為where子句中的欄位建立一個索引一樣,也為ORDER BY的子句中的欄位建立一個索引:
CREATE INDEX mytable_categoryid_userid_adddate ON mytable (category_id,user_id,adddate);
注意:mytable_categoryid_userid_adddate將會被截短為mytable_categoryid_userid_addda
CREATE
EXPLAIN SELECT * FROM mytable
WHERE category_id=1 AND user_id=2
ORDER BY adddate DESC;
NOTICE:QUERY PLAN:
Sort(cost=2.03..2.03 rows=1 width=16)
->Index Scanusing mytable_categoryid_userid_addda
on mytable(cost=0.00..2.02 rows=1 width=16)
EXPLAIN
看看EXPLAIN的輸出,資料庫多做了一個沒有要求的排序,這下知道性能如何受損了吧,看來對於資料庫的自身運作是有點過於樂觀了,那麼,給資料庫多一點提示吧。
為了跳過排序這一步,並不需要其它另外的索引,只要將查詢語句稍微改一下。這里用的是postgres,將給該資料庫一個額外的提示--在ORDER BY語句中,加入where語句中的欄位。這只是一個技術上的處理,並不是必須的,因為實際上在另外兩個欄位上,並不會有任何的排序操作,不過如果加入,postgres將會知道哪些是它應該做的。
EXPLAIN SELECT * FROM mytable
WHERE category_id=1 AND user_id=2
ORDER BY category_id DESC,user_id DESC,adddate DESC;
NOTICE:QUERY PLAN:
Index Scan Backward using
mytable_categoryid_userid_addda on mytable(cost=0.00..2.02 rows=1 width=16)
EXPLAIN
現在使用料想的索引了,而且它還挺聰明,知道可以從索引後面開始讀,從而避免了任何的排序。
以上說得細了一點,不過如果資料庫非常巨大,並且每日的頁面請求達上百萬算,想會獲益良多的。不過,如果要做更為復雜的查詢呢,例如將多張表結合起來查詢,特別是where限制字句中的欄位是來自不止一個表格時,應該怎樣處理呢?通常都盡量避免這種做法,因為這樣資料庫要將各個表中的東西都結合起來,然後再排除那些不合適的行,搞不好開銷會很大。
如果不能避免,應該查看每張要結合起來的表,並且使用以上的策略來建立索引,然後再用EXPLAIN命令驗證一下是否使用了料想中的索引。如果是的話,就OK。不是的話,可能要建立臨時的表來將他們結合在一起,並且使用適當的索引。
要注意的是,建立太多的索引將會影響更新和插入的速度,因為它需要同樣更新每個索引文件。對於一個經常需要更新和插入的表格,就沒有必要為一個很少使用的where字句單獨建立索引了,對於比較小的表,排序的開銷不會很大,也沒有必要建立另外的索引。
以上介紹的只是一些十分基本的東西,其實裡面的學問也不少,單憑EXPLAIN是不能判定該方法是否就是最優化的,每個資料庫都有自己的一些優化器,雖然可能還不太完善,但是它們都會在查詢時對比過哪種方式較快,在某些情況下,建立索引的話也未必會快,例如索引放在一個不連續的存儲空間時,這會增加讀磁碟的負擔,因此,哪個是最優,應該通過實際的使用環境來檢驗。
在剛開始的時候,如果表不大,沒有必要作索引,意見是在需要的時候才作索引,也可用一些命令來優化表,例如MySQL可用OPTIMIZETABLE。

C. 資料庫課程設計實例

資料庫課程設計

題目:小型超市管理系統
1、項目計劃
1.1系統開發目的
(1)大大提高超市的運作效率;
(2)通過全面的信息採集和處理,輔助提高超市的決策水平;
(3)使用本系統,可以迅速提升超市的管理水平,為降低經營成本, 提高效益,增強超市擴張力, 提供有效的技術保障。
1.2背景說明
21世紀,超市的競爭也進入到了一個全新的領域,競爭已不再是規模的競爭,而是技術的競爭、管理的競爭、人才的競爭。技術的提升和管理的升級是超市業的競爭核心。零售領域目前呈多元發展趨勢,多種業態:超市、倉儲店、便利店、特許加盟店、專賣店、貨倉等相互並存。如何在激烈的競爭中擴大銷售額、降低經營成本、擴大經營規模,成為超市營業者努力追求的目標。
1.3項目確立
針對超市的特點,為了幫助超市解決現在面臨的問題,提高小型超市的競爭力,我們將開發以下系統:前台POS銷售系統、後台管理系統,其中這兩個子系統又包含其它一些子功能。
1.4應用范圍
本系統適應於各種小型的超市。
1.5 定義
(1)商品條形碼:每種商品具有唯一的條形碼,對於某些價格一樣的商品,可以使用自定義條形碼。
(2)交易清單:包括交易的流水賬號、每類商品的商品名、數量、該類商品的總金額、交易的時間、負責本次收銀的員工號。
(3)商品積壓:在一定時期內,遠無法完成銷售計劃的商品會造成積壓。
(4)促銷:在一定時期內,某些商品會按低於原價的促銷價格銷售。
庫存告警提示:當商品的庫存數量低於庫存報警數量時發出提示。
(5)盤點:計算出庫存、銷售額、盈利等經營指標。
1.6 參考資料
《資料庫原理及設計》 陶宏才編 清華大學出版社
《SQL Server 2000 實用教程》范立南編 清華大學出版社
《SQL Server 2000 編程員指南》李香敏編 北京希望電子出版社
《輕松搞定 SQL Server 2000 程序設計》Rebecca M.Riordan編
《軟體工程規范》Watts S.Humphrey編 清華大學出版社
《軟體工程理論與實踐》 Shari Lawrence Pfleeger編 清華大學出版社
《軟體需求分析》 Swapna Kishore編 機械工業出版社
《軟體工程思想》 林銳編

2、邏輯分析與詳細分析
2.1系統功能
(1)、零售前台(POS)管理系統,本系統必須具有以下功能:
 商品錄入:根據超巿業務特點制定相關功能,可以通過輸入唯一編號、掃描條形碼、商品名稱等來實現精確或模糊的商品掃描錄入。該掃描錄入方法可以充分保證各種電腦操作水平層次的人員均能准確快速地進行商品掃描錄入。
 收銀業務:通過掃描條形碼或者直接輸入商品名稱(對於同類多件商品採用一次錄入加數量的方式)自動計算本次交易的總金額。在顧客付款後,自動計算找零,同時列印交易清單(包括交易的流水賬號、每類商品的商品名、數量、該類商品的總金額、交易的時間、負責本次收銀的員工號)。如果顧客是本店會員並持有本人會員卡,則在交易前先掃描會員卡,並對所購物品全部實行95折優惠,並將所購物品的總金額累計到該會員的總消費金額中。 會員卡的有效期限為一年,滿一年未續卡者,該會員卡將被注銷。
 安全性:OS登陸、退出、換班與操作鎖定等許可權驗證保護;斷電自動保護最大限度防止意外及惡意非法操作。
 獨立作業:有的斷網收銀即在網路伺服器斷開或網路不通的情況下,收銀機仍能正常作業
(2)、後台管理系統,本系統必須具備以下功能
 進貨管理: 根據銷售情況及庫存情況,自動制定進貨計劃(亦可手工制定修改),可以避免盲目進貨造成商品積壓。 按計劃單有選擇性地進行自動入庫登記。 綜合查詢列印計劃進貨與入庫記錄及金額。
 銷售管理: 商品正常銷售、促銷與限量、限期及禁止銷售控制。 綜合查詢各種銷售明細記錄、各地收銀員收銀記錄以及交結賬情況等。 按多種方式統計生成銷售排行榜,靈活察看和列印商品銷售日、月、年報表。
 庫存管理: 綜合查詢庫存明細記錄。 庫存狀態自動告警提示。如庫存過剩、少貨、缺貨等。軟體為您預警,避免庫存商品積壓損失和缺貨。 庫存自動盤點計算。
 人員管理: 員工、會員、供貨商、廠商等基本信息登記管理。 員工操作許可權管理。 客戶銷售許可權管理。

(3)系統結構
系統總體結構

模塊子系統結構

功能描述:商品錄入子系統要求能快速錄入商品,因此必須支持條形碼掃描。

功能描述:收銀業務子系統能計算交易總額,列印交易清單,並根據會員卡打折。

功能描述:進貨管理子系統可以根據庫存自動指定進貨計劃,進貨時自動等級,以及提供查詢和列印計劃進貨與入庫記錄的功能。

功能描述:銷售管理子系統可以控制某商品是否允許銷售,查詢每種商品的銷售情況並產生年、月、日報表,同時可以生成銷售排行榜。

功能描述:庫存管理子系統提供查詢庫存明細記錄的基本功能,並根據庫存的狀態報警,以及自動盤點計算。

功能描述:人員管理子系統提供基本信息登記管理,員工操作許可權管理,客戶銷售許可權管理的功能。
2.2、流程圖
前台管理系統

頂層DFD圖

第0層DFD圖

第1層DFD圖

2.3、戶類型與職能
(1)、員工(營業員):
 通過商品條形碼掃描輸入商品到購買清單
 操作軟體計算交易總金額
 操作軟體輸出交易清單
 對會員進行會員卡掃描以便打折
(2)、:超市經理
 操作軟體錄入商品,供貨商,廠商
 操作軟體制定進貨計劃
 查詢列印計劃進貨與入庫記錄
 操作軟體控制商品銷售與否
 查詢列印銷售情況
 操作軟體生成銷售排行榜
 查詢庫存明細記錄
 根據軟體發出的庫存告警進行入貨
 操作軟體進行盤點計算
(3)、總經理:
 基本信息登記管理
 員工操作許可權管理
 客戶銷售許可權管理
2.4、統開發步驟
 確定參與者和相關的用況
 為每個用況設計過程
 建立順序圖,確定每個腳本中對象的協作
 創建類,確定腳本中的對象
 設計, 編碼, 測試, 集成類
 為過程編寫系統測試案例
 運行測試案例,檢驗系統
2.5、系統環境需求
 系統模式

本系統採用C/S模式作為開發模式
 硬體環境
伺服器端:
高性能的計算機一台,
普通的雙絞線作為連接。
客戶端: 普通的計算機或者工作站,
普通的雙絞線作為連接。
 軟體環境
伺服器端:安裝SQL Server 2000的伺服器版本,
安裝windows 2000伺服器版本,
配置了諾頓等必須的防毒軟體。
客戶端: 安裝SQL Server2000的伺服器版本,
安裝了VB等可視化開發工具軟體,
安裝windows2000伺服器版本。

2.6、系統安全問題
信息系統盡管功能強大,技術先進,但由於受到自身體系結構,設計思路以及運行機制等限制,也隱含許多不安全因素。常見因素有:數據的輸入,輸出,存取與備份,源程序以及應用軟體,資料庫,操作系統等漏洞或缺陷,硬體,通信部分的漏洞,企業內部人員的因素,病毒,「黑客」等因素。因此,為使本系統能夠真正安全,可靠,穩定地工作,必須考慮如下問題:為保證安全,不致使系統遭到意外事故的損害,系統因該能防止火,盜或其他形式的人為破壞。
 系統要能重建
 系統應該是可審查的
 系統應能進行有效控制,抗干擾能力強
 系統使用者的使用許可權是可識別的
3、基於UML的建模
3.1語義規則
用例模型(use cases view)(用例視圖)的基本組成部件是用例(use case)、角色(actor)和系統(system)。用例用於描述系統的功能,也就是從外部用戶的角度觀察,系統應支持哪些功能,幫助分析人員理解系統的行為,它是對系統功能的宏觀描述,一個完整的系統中通常包含若干個用例,每個用例具體說明應完成的功能,代表系統的所有基本功能(集)。角色是與系統進行交互的外部實體,它可以是系統用戶,也可以是其它系統或硬體設備,總之,凡是需要與系統交互的任何東西都可以稱作角色。系統的邊界線以內的區域(即用例的活動區域)則抽象表示系統能夠實現的所有基本功能。在一個基本功能(集)已經實現的系統中,系統運轉的大致過程是:外部角色先初始化用例,然後用例執行其所代表的功能,執行完後用例便給角色返回一些值,這個值可以是角色需要的來自系統中的任何東西。
UML:是一種標準的圖形化建模語言,它是面向對象分析與設計的一種標准表示;它不是一種可視化的程序設計語言而是一種可視化的建模語言;不是工具或知識庫的規格說明而是一種建模語言規格說明是一種表示的標准;不是過程也不是方法但允許任何一種過程和方法使用它。

用例(use case):

參與者(actor):

3.2、UML模型
3.21、系統UML模型

3.22、子系統UML模型
(1)零售前台(POS)管理系統用例視圖

(2)後台管理系統用例視圖

3.3、系統實現圖

4、超市銷售系統概念設計文檔
(1)、系統ER圖

(2)、系統ER圖說明
1) 商店中的所有用戶(員工)可以銷售多種商品,每種商品可由不同用戶(員工)銷售;
2) 每個顧客可以購買多種商品,不同商品可由不同顧客購買;
3) 每個供貨商可以供應多種不同商品,每種商品可由多個供應商供應。
(3)、視圖設計
1) 交易視圖(v_Dealing)——用於查詢交易情況的視圖;
2) 計劃進貨視圖(v_PlanStock)——用於查詢進貨計劃的視圖;
3) 銷售視圖(v_Sale)——用於查詢銷售明細記錄的視圖;
4) 入庫視圖(v_Stock)——用於查詢入庫情況的視圖。
5、邏輯設計文檔
(1)、系統關系模型
a) 商品信息表(商品編號,商品名稱,價格,條形碼,促銷價格,促銷起日期,促銷止日期,允許打折,庫存數量,庫存報警數量,計劃進貨數,允許銷售,廠商編號,供貨商編號)
b) 用戶表(用戶編號,用戶名稱,用戶密碼,用戶類型)
c) 會員表(會員編號,會員卡號,累積消費金額,注冊日期)
d) 銷售表(銷售編號,商品編號,銷售數量,銷售金額,銷售日期)
e) 交易表(交易編號,用戶名稱,交易金額,會員卡號,交易日期)
f) 進貨入庫表(入庫編號,入庫商品編號,入庫數量,單額,總額,入庫日期,計劃進貨日期,入庫狀態)
g) 供貨商表(供貨商編號,供貨商名稱,供貨商地址,供貨商電話)
h) 廠商表(廠商編號,廠商名稱,廠商地址,廠商電話)

(2)、系統資料庫表結構
資料庫表索引
表名 中文名
MerchInfo 商品信息表
User 用戶表
Menber 會員表
Sale 銷售表
Dealing 交易表
Stock 進貨入庫表
Provide 供貨商表
Factory 廠商表

商品信息表(MerchInfo)
欄位名 欄位類型 長度 主/外鍵 欄位值約束 對應中文名
MerchID int 4 P Not null 商品編號
MerchName Varchar 50 Not null 商品名稱
MerchPrice Money 4 Not null 價格
MerchNum Int 4 Not null 庫存數量
CautionNum Int 4 Not null 庫存報警數量
PlanNum Int 4 null 計劃進貨數
BarCode Varchar 50 Not null 條形碼
SalesProPrice Money 4 促銷價格
SalesProDateS Datetime 8 促銷起日期
SalesProDateE Datetime 8 促銷止日期
AllowAbate Int 4 Not null 允許打折
AllowSale Int 4 Not null 允許銷售
FactoryID Varchar 10 F Not null 廠商編號
ProvideID Varchar 10 F Not null 供貨商編號

用戶表(User)
欄位名 欄位類型 長度 主/外鍵 欄位值約束 對應中文名
UserID varchar 10 P Not null 用戶編號
UserName Varchar 25 Not null 用戶名稱
UserPW Varchar 50 Not null 用戶密碼
UserStyle Int 4 Not null 用戶類型

會員表(Menber)
欄位名 欄位類型 長度 主/外鍵 欄位值約束 對應中文名
MemberID Varchar 10 P Not null 會員編號
MemberCard Varchar 20 Not null 會員卡號
TotalCost Money 4 Not null 累積消費金額
RegDate Datetime 8 Not null 注冊日期

銷售表(Sale)
欄位名 欄位類型 長度 主/外鍵 欄位值約束 對應中文名
SaleID Varchar 10 P Not null 銷售編號
MerChID Varchar 10 F Not null 商品編號
SaleDate Datetime 8 Not null 銷售日期
SaleNum Int 4 Not null 銷售數量
SalePrice Money 4 Not null 銷售單額

交易表(Dealing)
欄位名 欄位類型 長度 主/外鍵 欄位值約束 對應中文名
DealingID Varchar 10 P Not null 交易編號
DealingPrice Money 4 Not null 交易金額
DealingDate Money 4 Not null 交易日期
MemberID Varchar 10 會員卡號
UserName Varchar 10 F Not null 用戶名稱

入庫紀錄表(Stock)
欄位名 欄位類型 長度 主/外鍵 欄位值約束 對應中文名
StockID Varchar 10 P Not null 入庫編號
MerchID Varchar 10 F Not null 入庫商品編號
MerchNum Int 4 Not null 入庫數量
MerchPrice Money 4 Not null 單額
TotalPrice Money 4 Not null 總額
StockDate Datetime 8 Datetime 入庫日期
PlanDate Datetime 8 Datetime 計劃進貨日期
StockState Int 4 Not null 入庫狀態

供貨商表(Provide)
欄位名 欄位類型 長度 主/外鍵 欄位值約束 對應中文名
ProvideID varchar 10 P Not null 供貨商編號
ProvideName Varchar 50 Not null 供貨商名稱
ProvideAddress Varchar 250 供貨商地址
ProvidePhone Varchar 25 供貨商電話

廠商表(Provide)
欄位名 欄位類型 長度 主/外鍵 欄位值約束 對應中文名
FactoryID varchar 10 P Not null 廠商編號
FactoryName Varchar 50 Not null 廠商名稱
FactoryAddress Varchar 250 廠商地址
FactoryPhone Varchar 25 廠商電話
6、物理設計文檔
/*----------創建資料庫----------*/
create database SuperMarketdb
on primary
(
name=SuperMarketdb,
filename='C:\Program Files\Microsoft SQL Server\MSSQL\Data\SuperMarketdb.mdf',
size=100MB,
maxsize=200MB,
filegrowth=20MB
)
log on
(
name=SuperMarketlog,
filename='C:\Program Files\Microsoft SQL Server\MSSQL\Data\SuperMarketdb.ldf',
size=60MB,
maxsize=200MB,
filegrowth=20MB
)
go

/*----------創建基本表----------*/
use [SuperMarketdb]
go
/*創建交易表*/
CREATE TABLE Dealing (
DealingID int identity(1,1) Primary key ,
DealingDate datetime NOT NULL ,
DealingPrice money NOT NULL ,
UserName varchar(25) NULL ,
MemberCard varchar(20) NULL
)
GO
/*創建廠商表*/
CREATE TABLE Factory (
FactoryID varchar(10) Primary key ,
FactoryName varchar(50) NOT NULL ,
FactoryAddress varchar(250) NULL ,
FactoryPhone varchar(50) NULL
)
GO
/*創建會員表*/
CREATE TABLE Member (
MemberID varchar(10) Primary key ,
MemberCard varchar(20) NOT NULL ,
TotalCost money NOT NULL ,
RegDate datetime NOT NULL
)
GO
/*創建商品信息表*/
CREATE TABLE MerchInfo (
MerchID int identity(1,1) Primary key ,
MerchName varchar(50) Unique NOT NULL ,
MerchPrice money NOT NULL ,
MerchNum int NOT NULL ,
CautionNum int NOT NULL ,
PlanNum int NOT NULL ,
BarCode varchar(20) Unique NOT NULL ,
SalesProPrice money NULL ,
SalesProDateS datetime NULL ,
SalesProDateE datetime NULL ,
AllowAbate int NOT NULL ,
AllowSale int NOT NULL ,
FactoryID int NOT NULL ,
ProvideID int NOT NULL
)
GO
/*創建供應商表*/
CREATE TABLE Provide (
ProvideID varchar(10) Primary key ,
ProvideName varchar(50) NOT NULL ,
ProvideAddress varchar(250) NULL ,
ProvidePhone varchar(25) NULL
)
GO
/*創建銷售表*/
CREATE TABLE Sale (
SaleID int identity(1,1) Primary key ,
MerChID int NOT NULL ,
SaleDate datetime NOT NULL ,
SaleNum int NOT NULL,
SalePrice money NOT NULL
)
GO
/*創建入庫表*/
CREATE TABLE Stock (
StockID int identity(1,1) Primary key ,
MerchID int NOT NULL ,
MerchNum int NOT NULL ,
MerchPrice money NULL ,
TotalPrice money NULL ,
PlanDate datetime NULL ,
StockDate datetime NULL,
StockState int NOT NULL
)
GO
/*創建用戶表*/
CREATE TABLE User (
UserID varchar(10) Primary key ,
UserName varchar(25) NOT NULL ,
UserPW varchar(50) NOT NULL ,
UserStyle int NOT NULL ,
)
GO

/*----------創建表間約束----------*/
/*商品信息表中廠商編號、供應商編號分別與廠商表、供應商表之間的外鍵約束*/
ALTER TABLE MerchInfo ADD
CONSTRAINT [FK_MerchInfo_Factory] FOREIGN KEY
(
[FactoryID]
) REFERENCES Factory (
[FactoryID]
),
CONSTRAINT [FK_MerchInfo_Provide] FOREIGN KEY
(
[ProvideID]
) REFERENCES Provide (
[ProvideID]
)
GO
/*銷售表中商品編號與商品信息表之間的外鍵約束*/
ALTER TABLE Sale ADD
CONSTRAINT [FK_Sale_MerchInfo] FOREIGN KEY
(
[MerChID]
) REFERENCES MerchInfo (
[MerchID]
) ON DELETE CASCADE
GO
/*入庫表中商品編號與商品信息表之間的外鍵約束*/
ALTER TABLE Stock ADD
CONSTRAINT [FK_Stock_MerchInfo] FOREIGN KEY
(
[MerchID]
) REFERENCES MerchInfo (
[MerchID]
) ON DELETE CASCADE
GO

/*----------創建索引----------*/
/*在交易表上建立一個以交易編號、交易日期為索引項的非聚集索引*/
CREATE nonclustered INDEX IX_Dealing ON Dealing(DealingID, DealingDate)
GO
/*在商品信息表上建立一個以商品編號為索引項的非聚集索引*/
CREATE nonclustered INDEX IX_MerchInfo ON MerchInfo(MerchID)
GO
/*在銷售表上建立一個以銷售編號、銷售日期為索引項的非聚集索引*/
CREATE nonclustered INDEX IX_Sale ON Sale(SaleID, SaleDate)
GO
/*在入庫表上建立一個以入庫編號、入庫日期、商品編號為索引項的非聚集索引*/
CREATE nonclustered INDEX IX_Stock ON Stock(StockID, StockDate, MerchID)
GO

/*----------創建視圖----------*/
/*創建用於查詢交易情況的視圖*/
CREATE VIEW v_Dealing
AS
SELECT DealingDate as 交易日期,
UserName as 員工名稱,
MemberCard as 會員卡號,
DealingPrice as 交易金額
FROM Dealing
GO
/*創建用於查詢進貨計劃的視圖*/
CREATE VIEW v_PlanStock
AS
SELECT Stock.StockID as SID,
MerchInfo.MerchName as 商品名稱,
MerchInfo.BarCode as 條形碼,
Factory.FactoryName as 廠商,
Provide.ProvideName as 供貨商,
Stock.MerchNum as 計劃進貨數量,
Stock.PlanDate as 計劃進貨日期
FROM Stock,MerchInfo,Provide,Factory
Where Stock.MerchID = MerchInfo.MerchID
and Provide.ProvideID=MerchInfo.ProvideID
and Factory.FactoryID=MerchInfo.FactoryID
and Stock.StockState=0
GO
/*創建用於查詢銷售明細記錄的視圖*/
CREATE VIEW v_Sale
AS
SELECT MerchInfo.MerchName as 商品名稱,
MerchInfo.BarCode as 條形碼,
MerchInfo.MerchPrice as 商品價格,
Sale.SalePrice as 銷售價格,
Sale.SaleNum as 銷售數量,
Sale.SaleDate as 銷售日期
FROM Sale INNER JOIN
MerchInfo ON Sale.MerChID = MerchInfo.MerchID
GO
/*創建用於查詢入庫情況的視圖*/
CREATE VIEW v_Stock
AS
SELECT MerchInfo.MerchName as 商品名稱,
MerchInfo.BarCode as 條形碼,
Factory.FactoryName as 廠商,
Provide.ProvideName as 供貨商,
Stock.MerchPrice as 入庫價格,
Stock.MerchNum as 入庫數量,
Stock.TotalPrice as 入庫總額,
Stock.StockDate as 入庫日期
FROM Stock,MerchInfo,Provide,Factory
Where Stock.MerchID = MerchInfo.MerchID
and Provide.ProvideID=MerchInfo.ProvideID
and Factory.FactoryID=MerchInfo.FactoryID
and Stock.StockState=1
GO

7、小結
和傳統管理模式相比較,使用本系統,毫無疑問會大大提高超市的運作效率,輔助提高超市的決策水平,管理水平,為降低經營成本, 提高效益,減少差錯,節省人力,減少顧客購物時間,增加客流量,提高顧客滿意度,增強超市擴張能力, 提供有效的技術保障。
由於開發者能力有限,加上時間倉促,本系統難免會出現一些不足之處,例如:
 本系統只適合小型超市使用,不能適合中大型超市使用;
 超市管理系統涉及范圍寬,要解決的問題多,功能復雜,實現困難,但由於限於時間,本系統只能做出其中的一部分功能;
對於以上出現的問題,我們深表歉意,如發現還有其它問題,希望老師批評指正。

D. 有沒有利用python開發資料庫的案例

在Windows平台上安裝mysql模塊用於Python開發

用python連接mysql的時候,需要用的安裝版本,源碼版本容易有錯誤提示。下邊是打包了32與64版本。
MySQL-python-1.2.3.win32-py2.7.exe
MySQL-python-1.2.3.win-amd64-py2.7.exe
實例 1、取得 MYSQL 的版本

# -*- coding: UTF-8 -*-
#安裝 MYSQL DB for python
import MySQLdb as mdb
con = None
try:
#連接 mysql 的方法: connect('ip','user','password','dbname')
con = mdb.connect('localhost', 'root','root', 'test');

#所有的查詢,都在連接 con 的一個模塊 cursor 上面運行的
cur = con.cursor()

#執行一個查詢
cur.execute("SELECT VERSION()")
#取得上個查詢的結果,是單個結果

data = cur.fetchone()
print "Database version : %s " % data
finally:
if con:
#無論如何,連接記得關閉
con.close()

實例 2、創建一個表並且插入數據

import MySQLdb as mdb
import sys

#將 con 設定為全局連接
con = mdb.connect('localhost', 'root', 'root', 'test');
with con:

#獲取連接的 cursor,只有獲取了 cursor,我們才能進行各種操作
cur = con.cursor()

#創建一個數據表 writers(id,name)
cur.execute("CREATE TABLE IF NOT EXISTS
Writers(Id INT PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(25))")

#以下插入了 5 條數據
cur.execute("INSERT INTO Writers(Name) VALUES('Jack London')")
cur.execute("INSERT INTO Writers(Name) VALUES('Honore de Balzac')")
cur.execute("INSERT INTO Writers(Name) VALUES('Lion Feuchtwanger')")
cur.execute("INSERT INTO Writers(Name) VALUES('Emile Zola')")
cur.execute("INSERT INTO Writers(Name) VALUES('Truman Capote')")

實例 3、 python 使用 slect 獲取 mysql 的數據並遍歷

import MySQLdb as mdb
import sys

#連接 mysql,獲取連接的對象
con = mdb.connect('localhost', 'root', 'root', 'test');
with con:

#仍然是,第一步要獲取連接的 cursor 對象,用於執行查詢
cur = con.cursor()

#類似於其他語言的 query 函數, execute 是 python 中的執行查詢函數
cur.execute("SELECT * FROM Writers")

#使用 fetchall 函數,將結果集(多維元組)存入 rows 裡面
rows = cur.fetchall()

#依次遍歷結果集,發現每個元素,就是表中的一條記錄,用一個元組來顯示
for row in rows:
print row

運行結果:

(1L, 『Jack London')
(2L, 『Honore de Balzac')
(3L, 『Lion Feuchtwanger')
(4L, 『Emile Zola')
(5L, 『Truman Capote')
上面的代碼,用來將所有的結果取出,不過列印的時候是每行一個元祖列印,現在我們使用方法,取出其中的單個數據:

import MySQLdb as mdb
import sys

#獲取 mysql 的鏈接對象
con = mdb.connect('localhost', 'root', 'root', 'test');
with con:
#獲取執行查詢的對象
cur = con.cursor()
#執行那個查詢,這里用的是 select 語句
cur.execute("SELECT * FROM Writers")
#使用 cur.rowcount 獲取結果集的條數
numrows = int(cur.rowcount)
#循環 numrows 次,每次取出一行數據
for i in range(numrows):
#每次取出一行,放到 row 中,這是一個元組(id,name)
row = cur.fetchone()
#直接輸出兩個元素
print row[0], row[1]

運行結果:

1 Jack London
2 Honore de Balzac
3 Lion Feuchtwanger
4 Emile Zola
5 Truman Capote
實例 4、使用字典 cursor 取得結果集(可以使用表欄位名字訪問值)

import MySQLdb as mdb
import sys
#獲得 mysql 查詢的鏈接對象
con = mdb.connect('localhost', 'root', 'root', 'test')
with con:
#獲取連接上的字典 cursor,注意獲取的方法,
#每一個 cursor 其實都是 cursor 的子類
cur = con.cursor(mdb.cursors.DictCursor)
#執行語句不變
cur.execute("SELECT * FROM Writers")
#獲取數據方法不變
rows = cur.fetchall()
#遍歷數據也不變(比上一個更直接一點)
for row in rows:
#這里,可以使用鍵值對的方法,由鍵名字來獲取數據
print "%s %s" % (row["Id"], row["Name"])

實例 5、獲取單個表的欄位名和信息的方法

import MySQLdb as mdb
import sys
#獲取資料庫的鏈接對象
con = mdb.connect('localhost', 'root', 'root', 'test')
with con:
#獲取普通的查詢 cursor
cur = con.cursor()
cur.execute("SELECT * FROM Writers")
rows = cur.fetchall()
#獲取連接對象的描述信息
desc = cur.description
print 'cur.description:',desc
#列印表頭,就是欄位名字
print "%s %3s" % (desc[0][0], desc[1][0])
for row in rows:
#列印結果
print "%2s %3s" % row

運行結果:

cur.description: ((『Id', 3, 1, 11, 11, 0, 0), (『Name', 253, 17, 25, 25, 0, 1))
Id Name
1 Jack London
2 Honore de Balzac
3 Lion Feuchtwanger
4 Emile Zola
5 Truman Capote
實例 6、使用 Prepared statements 執行查詢(更安全方便)

import MySQLdb as mdb
import sys

con = mdb.connect('localhost', 'root', 'root', 'test')
with con:
cur = con.cursor()
#我們看到,這里可以通過寫一個可以組裝的 sql 語句來進行
cur.execute("UPDATE Writers SET Name = %s WHERE Id = %s",
("Guy de Maupasant", "4"))
#使用 cur.rowcount 獲取影響了多少行
print "Number of rows updated: %d" % cur.rowcount

結果:
Number of rows updated: 1

實例 7、把圖片用二進制存入 MYSQL

有人喜歡把圖片存入 MYSQL(這種做法貌似很少吧),我看大部分的程序,圖片都是存放在伺服器上的文件,資料庫中存的只是圖片的地址而已,不過 MYSQL 是支持把圖片存入資料庫的,也相應的有一個專門的欄位 BLOB (Binary Large Object),即較大的二進制對象欄位,請看如下程序,注意測試圖片自己隨便找一個,地址要正確:
首先,在資料庫中創建一個表,用於存放圖片:

復制代碼代碼如下:

CREATE TABLE Images(Id INT PRIMARY KEY AUTO_INCREMENT, Data MEDIUMBLOB);

然後運行如下 PYTHON 代碼進行:

import MySQLdb as mdb
import sys

try:
#用讀文件模式打開圖片
fin = open("../web.jpg")
#將文本讀入 img 對象中
img = fin.read()
#關閉文件
fin.close()
except IOError, e:
#如果出錯,列印錯誤信息
print "Error %d: %s" % (e.args[0],e.args[1])
sys.exit(1)
try:
#鏈接 mysql,獲取對象
conn = mdb.connect(host='localhost',user='root',passwd='root',
db='test')
#獲取執行 cursor
cursor = conn.cursor()
#直接將數據作為字元串,插入資料庫
cursor.execute("INSERT INTO Images SET Data='%s'" %
mdb.escape_string(img))
#提交數據
conn.commit()
#提交之後,再關閉 cursor 和鏈接
cursor.close()
conn.close()
except mdb.Error, e:
#若出現異常,列印信息
print "Error %d: %s" % (e.args[0],e.args[1])
sys.exit(1)

實例 8、從資料庫中把圖片讀出來

import MySQLdb as mdb
import sys

try:
#連接 mysql,獲取連接的對象
conn = mdb.connect('localhost', 'root', 'root', 'test');
cursor = conn.cursor()
#執行查詢該圖片欄位的 SQL
cursor.execute("SELECT Data FROM Images LIMIT 1")
#使用二進制寫文件的方法,打開一個圖片文件,若不存在則自動創建
fout = open('image.png','wb')
#直接將數據如文件
fout.write(cursor.fetchone()[0])
#關閉寫入的文件
fout.close()
#釋放查詢數據的資源
cursor.close()
conn.close()
except IOError, e:
#捕獲 IO 的異常 ,主要是文件寫入會發生錯誤
print "Error %d: %s" % (e.args[0],e.args[1])
sys.exit(1)

實例 9、使用 Transaction 即事務(手動提交,自動回滾)

import MySQLdb as mdb
import sys

try:
#連接 mysql,獲取連接的對象
conn = mdb.connect('localhost', 'root', 'root', 'test');
cursor = conn.cursor()
#如果某個資料庫支持事務,會自動開啟
#這里用的是 MYSQL,所以會自動開啟事務(若是 MYISM 引擎則不會)
cursor.execute("UPDATE Writers SET Name = %s WHERE Id = %s",
("Leo Tolstoy", "1"))
cursor.execute("UPDATE Writers SET Name = %s WHERE Id = %s",
("Boris Pasternak", "2"))
cursor.execute("UPDATE Writer SET Name = %s WHERE Id = %s",
("Leonid Leonov", "3"))
#事務的特性 1、原子性的手動提交
conn.commit()
cursor.close()
conn.close()
except mdb.Error, e:
#如果出現了錯誤,那麼可以回滾,就是上面的三條語句要麼執行,要麼都不執行
conn.rollback()
print "Error %d: %s" % (e.args[0],e.args[1])

結果:
1、因為不存在 writer 表( SQL 第三條語句),所以出現錯誤:Error 1146: Table 『test.writer' doesn't exist
2、出現錯誤,出發異常處理, 3 條語句的前兩條會自動變成了沒有執行,結果不變
3、如果本代碼放到一個 MyISAM 引擎表,前兩句會執行,第三句不會;如果是 INNDB 引擎,則都不會執行。

E. 列舉兩個現實生活中用到資料庫的例子

圖書管理系統:書庫、學生信息、購書單、超時繳費單、預定圖書單;
旅行社管理系統:旅行單號、客戶信息、員工信息、行程。
生活中很多很多。

F. 資料庫具體應用的實例有哪些

資料庫的應用領域

1、多媒體資料庫: 這類資料庫主要存儲與多媒體相關的數據,如聲音、圖像和視頻等數據。多媒體數據最大的特點是數據連續,而且數據量比較大,存儲需要的空間較大。

2、移動資料庫: 該類資料庫是在移動計算機系統上發展起來的,如筆記本電腦、掌上計算機等。該資料庫最大的特點是通過無線數字通信網路傳輸的。移動資料庫可以隨時隨地地獲取和訪問數據,為一些商務應用和一些緊急情況帶來了很大的便利。

3、空間資料庫: 這類資料庫目前發展比較迅速。它主要包括地理信息資料庫(又稱為地理信息系統,即GIS)和計算機輔助設計(CAD)資料庫。其中地理信息資料庫一般存儲與地圖相關的信息數據;計算機輔助設計資料庫一般存儲設計信息的空間資料庫,如機械、集成電路以及電子設備設計圖等。

4、信息檢索系統: 信息檢索就是根據用戶輸入的信息,從資料庫中查找相關的文檔或信息,並把查找的信息反饋給用戶。信息檢索領域和資料庫是同步發展的,它是一種典型的聯機文檔管理系統或者聯機圖書目錄。

5、分布式信息檢索: 這類資料庫是隨著Internet的發展而產生的資料庫。它一般用於網際網路及遠距離計算機網路系統中。特別是隨著電子商務的發展,這類資料庫發展更加迅猛。

許多網路用戶(如個人、公司或企業等)在自己的計算機中存儲信息,同時希望通過網路使用發送電子郵件、文件傳輸、遠程登錄方式和別人共享這些信息。分布式信息檢索滿足了這一要求。

6、專家決策系統: 專家決策系統也是資料庫應用的一部分。由於越來越多的數據可以聯機獲取,特別是企業通過這些數據可以對企業的發展作出更好的決策,以使企業更好地運行。由於人工智慧的發展,使得專家決策系統的應用更加廣泛。

(6)資料庫案例18例擴展閱讀

對資料庫系統的基本要求是:

①能夠保證數據的獨立性。數據和程序相互獨立有利於加快軟體開發速度,節省開發費用。

②冗餘數據少,數據共享程度高。

③系統的用戶介面簡單,用戶容易掌握,使用方便。

④能夠確保系統運行可靠,出現故障時能迅速排除;能夠保護數據不受非受權者訪問或破壞;能夠防止錯誤數據的產生,一旦產生也能及時發現。

⑤有重新組織數據的能力,能改變數據的存儲結構或數據存儲位置,以適應用戶操作特性的變化,改善由於頻繁插入、刪除操作造成的數據組織零亂和時空性能變壞的狀況。

⑥具有可修改性和可擴充性。

⑦能夠充分描述數據間的內在聯系。

G. 2。舉例5個資料庫在各行各業應用的實例

暈哦,這
資料庫在各行各業都用得到啊,基本上你生活中接觸到的所有行業都有應用,比如銀行,他們得用大型的資料庫,一般有SyBase等,他們一般都使用的是UNIX的主機.
各種企業的ERP(也叫企業資源整合管理),他們用來管理整個企業的產品包括從原料采購,生產,入庫一直到產品發貨銷售等的所有信息,所用資料庫種類繁多,Oracle,sql2000,firebird等都有使用,所用編程語言大多是:VB,.Net,Jave,Delphi,PB,等等;
還有電信業,用資料庫保存其所有的業務信息,他們也用的是大型的資料庫,SYBASE等等...還有你你應該熟悉的各種游戲呀,也需要使用資料庫來保存所有的玩家資料,角色等級和裝備信息等,而游戲的編程語言也是多種多樣;像著名網游:傳奇,就是使用的DELPHI+DBC2000;
還有你現在正在使用的網路知道,呵呵,他一樣要使用資料庫來保存這些龐大的用戶資料和所有的用戶問題及回答呀.
你的生活信息,身份資料,檔案等等也都是保存在公安局的資料庫里.
所以資料庫跟你的生活已經是密不可分了.

H. 打拐DNA資料庫的成功案例

15年前,不到6歲的小明(化名)在上學途中被人抱走販賣。15年來,小明的父母一直沒有放棄尋找。2010年春節前,通過公安部失蹤兒童DNA資料庫,小明的父親武明計在千里之外的福建與小明相見。

I. python連接MySQL資料庫實例分析

python連接MySQL資料庫實例分析
本文實例講述了python連接MySQL資料庫的方法。分享給大家供大家參考。具體實現方法如下:
import MySQLdb
conn = MySQLdb.connect(host="localhost",
user="root",
passwd="123456",
db="test")
cursor = conn.cursor()
cursor.execute("select * from hard")
res = cursor.fetchall()
for x in res:
print x
cursor.close()
conn.close()
運行結果如下:
希望本文所述對大家的python程序設計有所幫助。

J. 列舉身邊使用資料庫的案例

人力