Access數據庫一日通講義-郭安定-gtd_第1頁
Access數據庫一日通講義-郭安定-gtd_第2頁
Access數據庫一日通講義-郭安定-gtd_第3頁
Access數據庫一日通講義-郭安定-gtd_第4頁
Access數據庫一日通講義-郭安定-gtd_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、關系型數據庫的正規(guī)化數據庫并不是數據的堆積場沒有適當加以規(guī)劃, 即使程序代碼優(yōu)化也難提升效率正規(guī)化是數據庫領域的重要課題同時也是建立數據表的最高指導原則數據庫的應用發(fā)展極其廣泛, 它的哲學其實很簡單, 就是留住時間、儲存思考精華, 這個世界上, 即使再平凡的文件都可稱為數據庫:因為信息儲存在不因時間而消失的媒介, 以便可以重新延續(xù)既有的生命。數據庫研究領域尚未風行前, 文件存取多半經由循序存取、隨機存取和二進制制存取方式達成, 大多數程序語言都有這門技術的相關課題, 其中, 循序存取是將文件從頭到尾讀過一遍, 我們可以將它想象成錄音帶, 如果存取第一百筆數據, 那么得經過第一到第九十九筆數據的

2、讀取, 非常沒有效率。相對于循序存取的方式, 隨機存取則像雷射唱盤, 它的存取機制可以任意定位, 無形中改進了存取速度, 對于非一般文字型態(tài)的數據, 例如:聲音或影像則透過二進制制的存取方式, 不論是隨機或二進制制的存取方式, 數據異動都是個很大的挑戰(zhàn), 剛開始您得準備兩個文件, 一個作為讀取, 另一個則作為寫入, 例如:刪除某個文件的第1000筆數據, 那么得先從A文件讀999個文件寫入B文件, 然后跳過第1000筆記錄, 再將A文件的第1001筆記錄寫到B文件, 如果文件不大, 那么沒有人會抗議, 但如果文件高達10MB呢?或者說高達100MB呢?恐怕沒有人會癡癡等待。折衷的辦法是在文件的

3、前端設定參照的表頭(Head), 刪除文件時僅是在某個紀錄上做個標記, 并未實際刪除, 雖然速度快, 但還是沒有節(jié)省儲存空間, 因此, 我們需要另全新的儲存機制, 以便存取更多數字化數據, 它必須夠快而且更有效率, 而數據庫的領域正是在這樣的背景下誕生的。資料建構的第一步科技的歷史不僅短暫而且快速, 盡管世界的某個角落還可以看到ISAM的影子, 但現在畢竟已經是關系型數據庫(Relational Database)的天下了, 桌上型數據庫的產品幾乎多到還來不及認識, 每個月都有新產品的誕生和淘汰?,F代數據庫工具講究的是效率, 用戶建立數據庫并不需要偉大的知識, 有些建構精靈(Wizard)甚至

4、在還沒來得及看清楚前, 就把作品完成了, 但這是個很大的危機, 因為了解內部運作原理的人越來越少了, 有些專家認為世界上并不會出現 唯一的解決方案 , 因為即使我們和鄰家用的調味料都未必相同, 又怎么認定機器能決定所有人的喜好呢自定工作環(huán)境是未來的趨勢, 對于數據庫, 能夠了解關系型數據庫的特性, 并擅用正規(guī)化的技巧將有助于存取效益的提升, 首先, 我們必須了解, 在數據庫的概念里, 數據表是最常見的輸入口, 也是組成數據庫的重要單元, 數據表由不同字段構成, 就好像對象擁有不同的屬性一樣。對象的屬性定義非常具有彈性, 數據表的字段定義也一樣, 那么當一個數據表定義兩個不同的字段和兩個數據表各

5、自定義一個不同的字段有什么不同呢?當然, 這種問題不會難倒專家, 他們會在紙上畫些簡單邏輯, 還有講授令初學者滿腹狐疑的理論。很多人第一次建構數據庫時, 都是將可以想到的字段塞進一個數據表里, 他們認為非常直覺:因為當開啟數據表時, 所有能夠存取的東西都在那里。但您知道的, 這種做法就好像出門時, 戴著安全帽、雨傘、盥洗用具, 外加鍋碗瓢盆。為什么我們不能只將注意力集中在存取數據本身呢?當然可以, 這種替數據表特別規(guī)劃、決定哪些字段應該放在相同數據表, 哪些字段應該分開的優(yōu)化過程就稱為正規(guī)化(Normalization), 底下我們即將從一個簡單案例學習正規(guī)化的步驟及其注意事項。為了說明起見,

6、 表一是未經正規(guī)化的數據, 我們假想機器貓小叮當建了一個郵購網站, 它的好朋友大雄、技安和宜靜都來捧場, 小叮當將所有交易都紀錄在它的魔術筆記本, 現在讓我們來幫小叮當進行數據庫的正規(guī)化。客戶編號客戶姓名信用評等消費日期商品分類商品代碼購買商品購買金額備注說明001大雄尚可2/2AMB01一年會員$ 1000-001大雄尚可2/2BGD01任意門$ 999款項未清001大雄尚可2/3BGD02竹蜻蜓$150交換條件002技安差2/2AMB02半年會員$ 500-002技安差2/3BGD03縮小機$ 2000-002技安差2/4BGD02竹蜻蜓$ 150-002技安差2/4BGD04無痛膠布$

7、200-002技安差2/4BGD05透視鏡$ 2500-003宜靜不錯2/2AMB02半年會員$ 800大雄支付003宜靜不錯2/5BGD06快速滑板$ 400-表一:未經正規(guī)化的數據表有許多重復的字段。一次正規(guī)化正規(guī)化可經由幾個不同的階段逐一分析, 第一階段是找出數據庫里重復出現的數據, 并設法將它獨立成另一個數據表, 例如表一的客戶編號、客戶姓名和信用評等重復出現了好幾次, 其實只要使用一個客戶編號就可以代表客戶姓名和信用評等, 例如:大雄的信用評等為 尚可 , 不會突然有一筆信用平等不同的狀況出現, 因此, 經過第一次正規(guī)化的結果可以拆成如下的兩個數據表。客戶編號客戶姓名信用評等001大

8、雄尚可002技安差003宜靜不錯表二:將客戶的基本數據獨立成一個數據表??蛻艟幪栂M日期消費分類商品代碼商品名稱購買金額備注說明0012/2AMB01一年會員$ 1000-0012/2BGD01任意門$ 999款項未清0012/3BGD02竹蜻蜓$150交換條件0022/2AMB02半年會員$ 500-0022/3BGD03縮小機$ 2000-0022/4BGD02竹蜻蜓$ 50-0022/4BGD04無痛膠布$ 200-0022/4BGD05透視鏡$ 2500-0032/2AMB02半年會員$ 800大雄支付0032/5BGD06快速滑板$ 400-表三:簡化后的消費數據。在這種情況下, 簡

9、化后的消費數據表可以藉由 客戶編號 到基本數據表找到更多詳細數據, 小叮當還可以在數據表擴充性別、生日、地址等其它數據, 而且不會增加數據的重復性, 至此我們算是完成了第一階段的任務。二次正規(guī)化正規(guī)化的第二步驟是找出數據表中絕對依賴的字段, 并獨立成另一個數據表, 例如 商品代碼 和 商品名稱 的關系是絕對依賴, GD02代表 竹蜻蜓 , 如果種類很多種, 應該賦予不同代碼, 好比 飛天竹蜻蜓 的商品代碼命名為GD021、潛水竹蜻蜓的代碼則是GD022, 如此可以避免混淆, 像這種存在絕對依賴的字段可以再拆成不同的數據表。商品代碼商品名稱購買金額MB01一年會員$ 1000MB02半年會員$

10、500GD01任意門$ 999GD02竹蜻蜓$150GD03縮小機$ 2000GD04無痛膠布$ 200GD05透視鏡$ 2500GD06快速滑板$ 400表四:再分出一個商品基本數據??蛻艟幪栂M日期消費分類商品代碼備注說明0012/2AMB01-0012/2BGD01款項未清0012/3BGD02交換條件0022/2AMB02-0022/3BGD03-0022/4BGD02-0022/4BGD04-0022/4BGD05-0032/2AMB02大雄支付0032/5BGD06-表五:二次正規(guī)化后的消費數據。在進行的過程中, 我們意外地發(fā)現商品名稱和購買金額也具有絕對依賴關系, 為了貪圖方便,

11、 所以將它并入商品的基本數據表, 目前表一已經拆成 客戶基本數據 、 商品基本數據 和 客戶消費數據 三個數據表了, 趕緊再接再厲吧。三次正規(guī)化第三正規(guī)化的法則是將數據表中相依字段獨立成數據表, 這句話是什么意思呢?仔細檢查消費數據表會發(fā)現表五重復率最高的是 消費分類 的A和B, 小叮當最初的想法是將繳交會員費用的部分歸在A等級, 這樣它可以很快經由篩選 消費分類 為A的紀錄, 統(tǒng)計某月會員費的繳交情形, 而B等級的則代表一般商品。其實, 這個字段與 商品代碼 存在著相依的關系, 因為從MB01或MB02反查自然就可以找到它們都是屬于A等級的消費, 而GD01 GD06則可以知道是屬于B等級的

12、消費, 在這種情況下, 我們可以將商品代碼和消費分類另外獨立成底下的數據表:消費分類商品代碼AMB01AMB02BGD01BGD02BGD03BGD04BGD05BGD06表六:三次正規(guī)化后的相依數據。而消費數據表就再度縮減成表七了:客戶編號消費日期商品代碼備注說明0012/2MB01-0012/2GD01款項未清0012/3GD02交換條件0022/2MB02-0022/3GD03-0022/4GD02-0022/4GD04-0022/4GD05-0032/2MB02大雄支付0032/5GD06-表七:三次正規(guī)化后的消費數據。以上示范的就是最常見的三階段正規(guī)化, 但還是必須經過測試, 才知道

13、是否可以滿足實際的需求, 首先, 正規(guī)化的最大好處是數據異動時, 提供完整的一致性, 例如:當小叮當開始生產 隱形竹蜻蜓 和 潛水竹蜻蜓 時, 只要更改 GD02的商品名稱為 飛天竹蜻蜓 , 那么過去參照到GD02的紀錄, 進行查詢作業(yè)時也會一起變更, 不會有錯誤的情況, 目前看起來是不錯的。大哥!過頭了但我們也發(fā)現了一些問題, 好比任意門的特惠價是$ 999, 如果想優(yōu)待大雄成為$ 800該怎么辦?由于交易價格并非制定在消費歷史數據而是商品基本數據, 所以就會顯得格外棘手, 像這種情況稱為 假性依賴 , 也就是原先認定絕對依賴的項目會在某些情況改變, 因此, 這種字段不應獨立成另外一個數據表

14、, 此外, 檢視表四和表六, 不難發(fā)現這兩個數據表可以再結合成單一數據表, 這種情況下, 反而更加精簡。有時數據表的切割會因疏忽而有過度正規(guī)的現象, 這時就可重新修正字段的分配, 但請牢記正規(guī)化僅是建立數據表的原則而非鐵則, 重復數據數據過多時才能顯現正規(guī)化的威力, 如果數據表永遠固定只有五筆記錄, 那么經過正規(guī)化的切割方式不見得提升存取效率, 就好比表一的 備注說明 字段, 它的內容和長度都是不固定的, 與其增加備注代碼另外興建一個數據表, 不如直接將它加在消費數據表來得恰當。關系的建立通常經過正規(guī)化的數據表已經很難看出紀錄原貌, 有時甚至要查上十幾個數據表才有辦法得出完整紀錄, 這也正是關

15、系型數據庫的最大威力:將數個數據表整合成能夠閱讀的紀錄。以Access 97為例, 關系的建立采用圖形操作模式, 您可以將某個數據表的字段拖曳到另一個數據表的字段進行連結, 連結字段的名稱可以不同, 但必須具備同性質內容, 以小叮當情況為例, 它的關系圖像圖一所示。圖一:將數個數據表透過索引關系在一起。常見的關系方式有三種, 第一種是對等連結, 也就是左側數據表與右側數據表的字段內容相同時才顯示數據;另一種是左邊關系則是以左側數據庫為主, 與右側數據庫字段相符或空白的紀錄都會顯示;最后, 則是右側關系。除了關系的建立外, 您也可以在數據表內增加索引(Index)加快存取速度, 但建立索引的缺點是減緩數據的異動速度, 因此, 整個數據庫的規(guī)劃必須經過慎密的分析, 就數據異動的頻繁和關系特性詳細布局。維護的問題當數據庫建立后, 只是讓它具備架構, 還必須另外設計數據輸入接口, 這時就牽涉到維護的問題, 以表七為例, 如果更新大雄第二筆交易紀錄, 搜尋條件會很難決定, 因為不論是滿足任何字段的設定條件都不是唯一, 因此必需賦予每筆記錄一個識別代碼, 就像身分證字號一樣, 不會因為其它字段異動而受到影響。在Access 97的工作環(huán)境, 您可以在數據表內新增 自動編號 型態(tài)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論