版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第6章數(shù)據(jù)資源管理技術(shù)6.1數(shù)據(jù)資源管理技術(shù)的發(fā)展6.2數(shù)據(jù)描述及數(shù)據(jù)資源6.3數(shù)據(jù)庫管理系統(tǒng)DBMS6.4關(guān)系型數(shù)據(jù)庫RDB6.5RDB設(shè)計(jì)6.6新型數(shù)據(jù)庫小結(jié)
習(xí)題組織的科學(xué)管理依賴信息。信息是一個(gè)組織重要的資源,而數(shù)據(jù)是信息的依據(jù)和基礎(chǔ)。數(shù)據(jù)與信息之間是原料和成品之間的關(guān)系。數(shù)據(jù)庫是數(shù)據(jù)的集合,它以系統(tǒng)、全局的觀點(diǎn)集中統(tǒng)一組織、管理數(shù)據(jù),以滿足用戶的信息需求,是管理信息系統(tǒng)的基礎(chǔ)。具有統(tǒng)一規(guī)劃集中管理的數(shù)據(jù)庫,信息才能真正成為組織管理的共享資源,數(shù)據(jù)庫技術(shù)的使用是管理信息系統(tǒng)成熟的重要標(biāo)志。本章介紹數(shù)據(jù)資源管理技術(shù),數(shù)據(jù)庫和數(shù)據(jù)庫管理系統(tǒng)的基本概念,以及數(shù)據(jù)庫的體系結(jié)構(gòu)。介紹RDB的基本概念和RDB設(shè)計(jì)、使用的有關(guān)問題。6.1數(shù)據(jù)資源管理技術(shù)的發(fā)展
20世紀(jì)60年代,計(jì)算機(jī)應(yīng)用由科學(xué)計(jì)算、自動(dòng)控制領(lǐng)域逐步擴(kuò)展到企業(yè)、事業(yè)及行政部門的管理領(lǐng)域,數(shù)據(jù)處理成為計(jì)算機(jī)的一個(gè)主要應(yīng)用領(lǐng)域。在數(shù)據(jù)處理中,通常計(jì)算比較簡單,處理的數(shù)據(jù)量很大,因此,數(shù)據(jù)處理的核心是數(shù)據(jù)收集和數(shù)據(jù)管理,用于數(shù)據(jù)資源管理的數(shù)據(jù)庫技術(shù),作為計(jì)算機(jī)軟件的一個(gè)重要分支得到迅速發(fā)展。6.1.1數(shù)據(jù)管理技術(shù)的發(fā)展數(shù)據(jù)管理技術(shù)的發(fā)展經(jīng)過了三個(gè)階段:數(shù)據(jù)人工管理階段、文件管理階段和數(shù)據(jù)庫階段。
1.數(shù)據(jù)人工管理階段在數(shù)據(jù)處理的初期沒有軟件支持,程序員直接管理數(shù)據(jù),這一階段的特點(diǎn)是數(shù)據(jù)保存在處理程序中或隨程序執(zhí)行人機(jī)交互地輸入,數(shù)據(jù)處理后將結(jié)果輸出,最后,程序和數(shù)據(jù)的內(nèi)存空間一起被釋放。數(shù)據(jù)和程序相互依賴,即每個(gè)應(yīng)用程序要包括被處理數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)、存取方法、輸入/輸出方式等;數(shù)據(jù)面向應(yīng)用,數(shù)據(jù)結(jié)構(gòu)的變化、修改,導(dǎo)致整個(gè)程序的修改。此外,在這一階段只有程序文件的概念,數(shù)據(jù)的組織方式由程序自行設(shè)計(jì)和安排。數(shù)據(jù)由人工管理最大的問題是編程效率低,程序依賴數(shù)據(jù),不靈活,容易出錯(cuò)。
2.文件管理階段隨著計(jì)算機(jī)技術(shù)的發(fā)展,數(shù)據(jù)處理量的增加,要求數(shù)據(jù)和程序分離,出現(xiàn)由計(jì)算機(jī)軟件管理數(shù)據(jù),由操作系統(tǒng)中的文件系統(tǒng)管理存儲(chǔ)外存設(shè)備上的數(shù)據(jù)。這一階段的特點(diǎn)是程序與數(shù)據(jù)具有設(shè)備獨(dú)立性,數(shù)據(jù)和程序一樣可長期保存在外存儲(chǔ)器上,構(gòu)成程序文件和數(shù)據(jù)文件。程序在訪問數(shù)據(jù)時(shí),不必關(guān)心其物理位置,也不涉及任何物理細(xì)節(jié),只需使用數(shù)據(jù)文件名,由文件系統(tǒng)提供數(shù)據(jù)的讀或?qū)懺L問。同時(shí),數(shù)據(jù)文件組織有索引文件,鏈接文件和散列文件等等,便于程序訪問數(shù)據(jù)。數(shù)據(jù)不屬于某個(gè)特定的程序,允許重復(fù)使用,但由于數(shù)據(jù)文件的結(jié)構(gòu)仍取決于特定的應(yīng)用,程序與數(shù)據(jù)間的依賴關(guān)系并未根本改變。文件管理階段具有設(shè)備獨(dú)立性,數(shù)據(jù)修改不必通過程序存儲(chǔ)設(shè)備,但不能徹底體現(xiàn)用戶觀點(diǎn)下的數(shù)據(jù)邏輯結(jié)構(gòu)獨(dú)立于數(shù)據(jù)在外存上物理結(jié)構(gòu)的要求,在數(shù)據(jù)物理結(jié)構(gòu)修改時(shí),仍需修改用戶應(yīng)用程序,所以文件系統(tǒng)只是計(jì)算機(jī)軟件管理數(shù)據(jù)資源的初級(jí)階段。文件管理方式是數(shù)據(jù)資源管理的一大進(jìn)步,乃至現(xiàn)在,它也是數(shù)據(jù)庫的基礎(chǔ)。隨著數(shù)據(jù)管理規(guī)模的進(jìn)一步擴(kuò)大,數(shù)據(jù)量的急劇增加,文件系統(tǒng)的缺陷也明顯地暴露無遺。首先是數(shù)據(jù)冗余,由于大多數(shù)應(yīng)用程序可能需要多個(gè)數(shù)據(jù)文件,數(shù)據(jù)文件間缺乏聯(lián)系,每個(gè)應(yīng)用程序有各自對(duì)應(yīng)的數(shù)據(jù)文件,如圖6-1(a)所示,同樣的數(shù)據(jù)可能在多個(gè)數(shù)據(jù)文件中重復(fù)出現(xiàn),造成數(shù)據(jù)冗余。冗余的數(shù)據(jù)不僅浪費(fèi)存儲(chǔ)空間,且給數(shù)據(jù)修改操作帶來很大麻煩,它必須毫不遺漏地修改每一個(gè)數(shù)據(jù)文件,稍有不謹(jǐn)慎,就會(huì)造成同一數(shù)據(jù)在不同數(shù)據(jù)文件中不一樣,即所謂數(shù)據(jù)的不一致性。其次,數(shù)據(jù)文件面向應(yīng)用,當(dāng)數(shù)據(jù)結(jié)構(gòu)改變時(shí),程序維護(hù)成為系統(tǒng)的主要矛盾。圖6-1文件管理方式和數(shù)據(jù)庫管理方式(a)文件管理方式;(b)數(shù)據(jù)庫管理方式
3.數(shù)據(jù)庫階段
1960年,數(shù)據(jù)庫技術(shù)的出現(xiàn)標(biāo)志著數(shù)據(jù)資源管理進(jìn)入數(shù)據(jù)庫階段,數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫中,數(shù)據(jù)資源使用數(shù)據(jù)庫管理系統(tǒng)的專門軟件管理,如圖6-1(b)所示。概括起來,數(shù)據(jù)庫階段數(shù)據(jù)管理具有以下特點(diǎn):實(shí)現(xiàn)數(shù)據(jù)在系統(tǒng)不同應(yīng)用中共享。數(shù)據(jù)庫技術(shù)采用復(fù)雜的數(shù)據(jù)模型表示數(shù)據(jù)結(jié)構(gòu),它不僅描述數(shù)據(jù)本身的特點(diǎn),還描述了數(shù)據(jù)間的聯(lián)系。數(shù)據(jù)不再面向某個(gè)特定的應(yīng)用,而是面向整個(gè)應(yīng)用系統(tǒng),減少冗余,真正實(shí)現(xiàn)數(shù)據(jù)在不同應(yīng)用中共享。數(shù)據(jù)庫技術(shù)使數(shù)據(jù)的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)分離。數(shù)據(jù)庫的結(jié)構(gòu)分成用戶的邏輯結(jié)構(gòu)、整體邏輯結(jié)構(gòu)和物理結(jié)構(gòu)三級(jí)模式。用戶(應(yīng)用程序)數(shù)據(jù)和外存中數(shù)據(jù)間的轉(zhuǎn)換由“數(shù)據(jù)庫管理系統(tǒng)”(DatabaseManagementSystem,DBMS)軟件實(shí)現(xiàn)。使數(shù)據(jù)的物理結(jié)構(gòu)改變時(shí),不影響整體結(jié)構(gòu)和用戶邏輯結(jié)構(gòu)及應(yīng)用程序,即所謂數(shù)據(jù)庫的物理數(shù)據(jù)獨(dú)立性,數(shù)據(jù)庫只需根據(jù)系統(tǒng)需求獨(dú)立設(shè)計(jì)。在數(shù)據(jù)整體結(jié)構(gòu)改變時(shí),不影響用戶邏輯結(jié)構(gòu)及應(yīng)用程序,用戶邏輯結(jié)構(gòu)是取自數(shù)據(jù)整體結(jié)構(gòu)的一個(gè)子集,這就是所謂數(shù)據(jù)庫的邏輯數(shù)據(jù)獨(dú)立性。某特定用戶在處理業(yè)務(wù)時(shí)無須建立文件,而以簡單的邏輯結(jié)構(gòu)(視圖)操作數(shù)據(jù),大大提高了編程效率。數(shù)據(jù)庫系統(tǒng)為用戶提供方便的用戶接口,用戶可使用查詢語言或終端命令或用程序方式操作數(shù)據(jù)庫。DBMS提供數(shù)據(jù)庫的恢復(fù),并發(fā)控制,數(shù)據(jù)完整性、安全性等控制功能,保證數(shù)據(jù)庫中數(shù)據(jù)的安全,可靠和正確性。數(shù)據(jù)庫系統(tǒng)對(duì)數(shù)據(jù)操作一般以記錄為單位,也可以操作數(shù)據(jù)項(xiàng),增加系統(tǒng)的靈活性。從文件系統(tǒng)發(fā)展到數(shù)據(jù)庫系統(tǒng)是信息處理領(lǐng)域中的一個(gè)重大變化。將人們處理信息從傳統(tǒng)的功能設(shè)計(jì)(以程序設(shè)計(jì)為主導(dǎo)地位,數(shù)據(jù)只服從程序的作用),改變?yōu)橐詳?shù)據(jù)為中心。這時(shí),數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)成為信息系統(tǒng)首先關(guān)心的問題,數(shù)據(jù)的應(yīng)用程序設(shè)計(jì)則退居為以數(shù)據(jù)結(jié)構(gòu)為基礎(chǔ)的外圍地位。
20世紀(jì)70年代,數(shù)據(jù)庫技術(shù)得到迅速發(fā)展,許多有效的軟件產(chǎn)品投入運(yùn)行。目前數(shù)據(jù)庫系統(tǒng)深入到人類社會(huì)生活的各個(gè)領(lǐng)域,從企業(yè)事業(yè)管理、生產(chǎn)管理、銀行業(yè)務(wù)、資源分配、經(jīng)濟(jì)預(yù)測一直到信息探索,檔案管理、普查統(tǒng)計(jì)等各個(gè)方面,并在通信網(wǎng)絡(luò)基礎(chǔ)上,建立了國際性聯(lián)機(jī)檢索系統(tǒng)、電子商務(wù)系統(tǒng)等等。數(shù)據(jù)庫技術(shù)還在不斷發(fā)展,并與計(jì)算機(jī)技術(shù)相互滲透、結(jié)合,形成分布式數(shù)據(jù)庫系統(tǒng),面向?qū)ο髷?shù)據(jù)庫系統(tǒng),多媒體數(shù)據(jù)庫系統(tǒng)等。6.1.2訪問遠(yuǎn)程數(shù)據(jù)資源隨著計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的發(fā)展,網(wǎng)絡(luò)中不止一臺(tái)計(jì)算機(jī)參與數(shù)據(jù)資源的存取和操作,計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)的結(jié)構(gòu)由三部分組成:客戶機(jī)——由用戶操作的個(gè)人(PC)計(jì)算機(jī),系統(tǒng)配置多臺(tái)客戶機(jī)。服務(wù)器——提供數(shù)據(jù)集中存儲(chǔ)的計(jì)算機(jī)。一個(gè)系統(tǒng)通常只有一臺(tái)服務(wù)器,有些系統(tǒng)配置有多臺(tái)服務(wù)器。通信網(wǎng)絡(luò)——連接客戶機(jī)和服務(wù)器的通信線路。計(jì)算機(jī)網(wǎng)絡(luò)中的客戶機(jī)訪問遠(yuǎn)程服務(wù)器上的數(shù)據(jù)資源,有以下三種方式:
1.傳統(tǒng)的文件方式傳統(tǒng)的客戶機(jī)應(yīng)用程序需要訪問遠(yuǎn)程數(shù)據(jù)資源時(shí),必須打開文件服務(wù)器上的數(shù)據(jù)文件,并將其裝載到客戶機(jī)上。而后,在客戶機(jī)上運(yùn)行用戶的應(yīng)用程序,在數(shù)據(jù)文件中找到它所需的數(shù)據(jù)集合,處理完成后,再將整個(gè)數(shù)據(jù)文件回送給文件服務(wù)器。對(duì)開發(fā)人員來說整個(gè)遠(yuǎn)程數(shù)據(jù)資源訪問過程都不可見,但它卻占據(jù)了時(shí)間和網(wǎng)絡(luò)總線的帶寬。文件方式要求有較大內(nèi)存容量,較強(qiáng)的處理能力的客戶機(jī),實(shí)際上,客戶機(jī)的處理能力不強(qiáng),而處理能力較強(qiáng)的文件服務(wù)器只用于數(shù)據(jù)文件訪問工作,出現(xiàn)處理分工不合理的現(xiàn)象。
2.客戶/服務(wù)器(Client/Server,C/S)方式在客戶/服務(wù)器環(huán)境中,客戶機(jī)的應(yīng)用程序請(qǐng)求服務(wù)器查找它所需的數(shù)據(jù),服務(wù)器將數(shù)據(jù)文件中匹配的數(shù)據(jù)集合,返回給客戶機(jī)的應(yīng)用程序,節(jié)省時(shí)間和網(wǎng)絡(luò)的開銷。發(fā)揮了服務(wù)器較強(qiáng)的處理功能,使客戶機(jī)只集中處理用戶界面,無需關(guān)心數(shù)據(jù)訪問工作。在兩層客戶/服務(wù)器結(jié)構(gòu)中,主要問題是客戶機(jī)必須配置被訪問的每一種數(shù)據(jù)庫的驅(qū)動(dòng)程序,成本較高;另外,用戶還必須考慮配置和軟件維護(hù)問題?;蚰承┨厥夤δ堋H龑涌蛻?服務(wù)器結(jié)構(gòu)解決兩層結(jié)構(gòu)的主要缺點(diǎn),在三層結(jié)構(gòu)中,客戶機(jī)應(yīng)用程序不再直接與服務(wù)器的DBMS通信,插入中間件服務(wù)器,客戶機(jī)僅需與中間件服務(wù)器的一種驅(qū)動(dòng)程序通信,中間件服務(wù)器完成與服務(wù)器的不同數(shù)據(jù)庫的驅(qū)動(dòng)問題。分布式客戶/服務(wù)器結(jié)構(gòu)用于更復(fù)雜的和更有彈性的系統(tǒng),系統(tǒng)中有多個(gè)分布配置的服務(wù)器,執(zhí)行不同的功能
3.瀏覽器/服務(wù)器(Browser/Server,B/S)方式隨著網(wǎng)絡(luò)技術(shù)和Web技術(shù)的發(fā)展,使用數(shù)據(jù)源的數(shù)據(jù)量劇增,開發(fā)Web數(shù)據(jù)庫系統(tǒng)十分有意義。在Internet和Intranet上,如網(wǎng)上銀行、在線購物、產(chǎn)品信息、市場調(diào)查分析、聯(lián)機(jī)數(shù)據(jù)庫查詢等,到處可看到Web數(shù)據(jù)庫的應(yīng)用。Web數(shù)據(jù)庫也基于C/S結(jié)構(gòu)的三層模式,即Browser/Webserver/DBserver,客戶層是統(tǒng)一界面的瀏覽器,數(shù)據(jù)服務(wù)器為服務(wù)層,中間層是Web服務(wù)器和應(yīng)用服務(wù)。用戶通過瀏覽器的Web頁上輸入信息,并發(fā)送到Web服務(wù)器,通過應(yīng)用程序訪問數(shù)據(jù)庫,將結(jié)果以圖形、圖像、文本或表的形式返回瀏覽器。網(wǎng)絡(luò)計(jì)算機(jī)是一種特別使人感興趣的PC,它是一種沒有磁盤驅(qū)動(dòng)器或其他當(dāng)?shù)財(cái)?shù)據(jù)存儲(chǔ)設(shè)備的PC機(jī),使網(wǎng)絡(luò)管理簡化,又能處理圖形用戶界面,需要的是能在任何計(jì)算機(jī)上運(yùn)行的圖形用戶界面,當(dāng)在服務(wù)器上修改某個(gè)驅(qū)動(dòng)程序或應(yīng)用程序時(shí),可以在該服務(wù)器的每個(gè)網(wǎng)絡(luò)計(jì)算機(jī)客戶機(jī)上運(yùn)行。面向?qū)ο蟮某绦蛟O(shè)計(jì)語言Java,使應(yīng)用程序獨(dú)立于異構(gòu)網(wǎng)絡(luò)上的多種平臺(tái),提供在任何計(jì)算機(jī)上運(yùn)行的圖形用戶界面設(shè)計(jì)。6.2數(shù)據(jù)描述及數(shù)據(jù)模型數(shù)據(jù)由組織業(yè)務(wù)活動(dòng)的原始事件產(chǎn)生。如果沒有數(shù)據(jù)及數(shù)據(jù)處理能力,企業(yè)、事業(yè)單位就無法成功而有效地完成其業(yè)務(wù)活動(dòng),更談不上為實(shí)現(xiàn)組織目標(biāo)做好管理工作。數(shù)據(jù)邏輯模型是現(xiàn)實(shí)世界的高層抽象,而數(shù)據(jù)物理模型是數(shù)據(jù)結(jié)構(gòu)形式,定義數(shù)據(jù)庫的依據(jù)。6.2.1數(shù)據(jù)描述數(shù)據(jù)處理中,數(shù)據(jù)描述需要運(yùn)用數(shù)據(jù)模型的方法,即現(xiàn)實(shí)世界的模型化。這個(gè)問題涉及到三個(gè)概念:現(xiàn)實(shí)世界、信息世界和計(jì)算機(jī)世界,如圖6-2所示。
1.現(xiàn)實(shí)世界現(xiàn)實(shí)世界是在人們頭腦以外的客觀世界,對(duì)信息系統(tǒng)而言,組織的業(yè)務(wù)活動(dòng)涉及的物流、人、事、單位以及相關(guān)的數(shù)據(jù),如庫存管理,涉及貨物的存放、進(jìn)出、搜查等業(yè)務(wù)活動(dòng)。業(yè)務(wù)活動(dòng)中抽取的數(shù)據(jù)為管理活動(dòng)提供報(bào)表、匯總、統(tǒng)計(jì)分析圖等。圖6-2三個(gè)世界的數(shù)據(jù)描述
2.信息世界信息世界是現(xiàn)實(shí)世界在人們頭腦中的反映。人的認(rèn)知有兩種過程,一是從特殊到一般的歸納,二是從一般到特殊的演繹。人們將現(xiàn)實(shí)世界各種業(yè)務(wù)活動(dòng)中客觀存在又相互區(qū)別的事物或事件抽象為實(shí)體集。一個(gè)實(shí)體集具有組成實(shí)體歸納的共同的性質(zhì)(屬性),例如,學(xué)生實(shí)體集有姓名、年齡、性別等共同屬性。(實(shí)際上,實(shí)體集還有共同的行為或操作,這就是面向?qū)ο笾械膶?duì)象類)。從現(xiàn)實(shí)世界的事物到信息世界的實(shí)體集,是人認(rèn)識(shí)世界的一次飛躍,人們關(guān)注的是實(shí)體集(事物)的屬性。實(shí)體集中的具體實(shí)例稱實(shí)體。對(duì)于具體的實(shí)體,有具體的屬性值,如某個(gè)學(xué)生姓名叫李四,年齡22歲,性別為男等,屬性值的不同用來區(qū)別不同的實(shí)體。為了便于唯一地識(shí)別每個(gè)實(shí)體,常用某個(gè)屬性(代碼)或一組屬性來標(biāo)識(shí)實(shí)體,稱為實(shí)體標(biāo)識(shí)符。
3.計(jì)算機(jī)世界計(jì)算機(jī)世界是數(shù)據(jù)存儲(chǔ)形式,信息世界的實(shí)體集和實(shí)體屬性,必須轉(zhuǎn)化為數(shù)據(jù)形式存儲(chǔ)在計(jì)算機(jī)中。計(jì)算機(jī)世界中要把數(shù)據(jù)轉(zhuǎn)化為有用的信息,要用有意義的方法組織數(shù)據(jù)。在計(jì)算機(jī)中數(shù)據(jù)以文件方式存儲(chǔ),并分下列層次:字段或稱數(shù)據(jù)項(xiàng)——字段可以命名的最小數(shù)據(jù)單位,字段名表示實(shí)體的屬性。字段值表示每個(gè)具體屬性值或數(shù)據(jù),一般分為兩大類型:數(shù)值型和字符型。記錄——記錄結(jié)構(gòu)是字段有序集合,記錄描述一個(gè)具體實(shí)體,是字段值有序集合,實(shí)體屬性的數(shù)據(jù)描述。[例]實(shí)體集:學(xué)生(學(xué)號(hào),姓名,年齡,性別,…)實(shí)體:99064111李四22男……文件(file)——文件是同一實(shí)體集的所有記錄的集合,所有的學(xué)生記錄組成一個(gè)學(xué)生文件。其中,主關(guān)鍵字簡稱主鍵,是能唯一標(biāo)識(shí)文件中每個(gè)記錄的字段或字段集,與信息世界中實(shí)體標(biāo)識(shí)符的概念相對(duì)應(yīng)。數(shù)據(jù)庫是數(shù)據(jù)層次最高一層,它是綜合的、相關(guān)的文件集合,它表示一個(gè)應(yīng)用項(xiàng)目中相關(guān)的實(shí)體集的集合及實(shí)體集間的關(guān)聯(lián)。我們可以不必關(guān)心數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)和具體實(shí)現(xiàn)方式,因?yàn)閿?shù)據(jù)庫系統(tǒng)的目標(biāo)之一,是用戶能簡單、方便地訪問數(shù)據(jù)庫中的數(shù)據(jù)。6.2.2數(shù)據(jù)的邏輯模型數(shù)據(jù)是組織重要資源之一,組織的管理如何有效地利用數(shù)據(jù)資源至關(guān)重要。數(shù)據(jù)庫應(yīng)設(shè)計(jì)成能存儲(chǔ)與組織業(yè)務(wù)相關(guān)的所有數(shù)據(jù),并能快速訪問、方便修改,能實(shí)時(shí)反映整個(gè)組織的業(yè)務(wù)情況。數(shù)據(jù)庫設(shè)計(jì)首先應(yīng)進(jìn)行需求分析,考慮應(yīng)收集哪些數(shù)據(jù)、數(shù)據(jù)的來源及誰將訪問這些數(shù)據(jù)。其次是根據(jù)需求構(gòu)建數(shù)據(jù)庫的數(shù)據(jù)模型。數(shù)據(jù)庫需要兩種數(shù)據(jù)模型:邏輯模型和物理模型。數(shù)據(jù)的邏輯模型獨(dú)立于計(jì)算機(jī)系統(tǒng),不涉及數(shù)據(jù)的表示、物理實(shí)現(xiàn),只需描述組織所關(guān)心的信息模型。邏輯模型是現(xiàn)實(shí)世界中,從系統(tǒng)需求到信息世界的高層抽象。用于創(chuàng)建數(shù)據(jù)邏輯模型的工具是實(shí)體聯(lián)系(E-R)圖。數(shù)據(jù)的物理模型,是面向信息模型所采用的具體數(shù)據(jù)結(jié)構(gòu),現(xiàn)實(shí)世界的第二層抽象。數(shù)據(jù)的物理模型有嚴(yán)格形式化定義,便于在計(jì)算機(jī)系統(tǒng)中實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)和訪問。它涉及計(jì)算機(jī)系統(tǒng)和數(shù)據(jù)庫管理系統(tǒng)。反映現(xiàn)實(shí)世界中系統(tǒng)需求的實(shí)體與實(shí)體間的聯(lián)系稱為數(shù)據(jù)的邏輯模型或信息模型。研究邏輯模型的目是從中導(dǎo)出數(shù)據(jù)的物理模型。數(shù)據(jù)的邏輯模型根據(jù)系統(tǒng)需求創(chuàng)建,它強(qiáng)調(diào)其語義表達(dá)功能,概念簡單、清晰,易于用戶理解,便于數(shù)據(jù)庫設(shè)計(jì)人員和用戶交流,啟發(fā)、檢驗(yàn)、返回補(bǔ)充系統(tǒng)需求。
實(shí)體聯(lián)系E-R圖,使用圖形符號(hào)來表示組織業(yè)務(wù)活動(dòng)涉及的實(shí)體及實(shí)體間聯(lián)系。一般用矩形框表示實(shí)體,菱形框表示實(shí)體間的聯(lián)系,直線將有關(guān)系的實(shí)體連接,橢圓框表示實(shí)體屬性。本書采用VFP的表示方法,保留用菱形框表示實(shí)體間的關(guān)系,矩形框表示實(shí)體,并分為上下兩部分分別表示實(shí)體標(biāo)識(shí)及其屬性,如果實(shí)體間的關(guān)系有屬性,亦不加橢圓框而將屬性直接附于菱形框。圖6-3是表示學(xué)生和課程多對(duì)多聯(lián)系的E-R圖。圖6-3多對(duì)多聯(lián)系的E-R圖在實(shí)際系統(tǒng)中往往有多個(gè)相互關(guān)聯(lián)的實(shí)體,作圖也比較復(fù)雜?,F(xiàn)舉一個(gè)較簡單的例子(一個(gè)倉庫管理的ER圖),倉庫主要管理零件入庫、出庫及采購等事項(xiàng)。工程項(xiàng)目需要倉庫提供零件,倉庫需要向零件供應(yīng)商采購零件。首先確定實(shí)體集:工程項(xiàng)目、零件、零件供應(yīng)商。確定實(shí)體間關(guān)系:一個(gè)項(xiàng)目需要多個(gè)零件,且一種零件亦可提供多個(gè)項(xiàng)目使用。所以項(xiàng)目與零件問題是多對(duì)多的供需關(guān)系,供需關(guān)系的屬性為零件數(shù)量。同樣一種零件可以向多個(gè)供應(yīng)商采購,一個(gè)供應(yīng)商可提供多種零件,零件與供應(yīng)商間亦是多對(duì)多的采供關(guān)系,采供關(guān)系有屬性零件總量。確定實(shí)體集名稱和屬性:工程項(xiàng)目(項(xiàng)目編號(hào)J#,項(xiàng)目名稱Jname,開工日期
DATE)零件(零件編號(hào)P#,零件名稱Pname,規(guī)格
Psize,重量Pweight)供應(yīng)商(供應(yīng)商代號(hào)S#,姓名Sname,地址SADR)倉庫管理的ER圖如圖6-4所示。圖6-4倉庫管理的E-R圖6.2.3數(shù)據(jù)的物理模型數(shù)據(jù)的物理模型指數(shù)據(jù)庫的數(shù)據(jù)結(jié)構(gòu)。物理模型中反映的記錄,實(shí)際上是反映了實(shí)體間的邏輯銜接和相關(guān)性,聯(lián)系指示了應(yīng)用存取數(shù)據(jù)的途徑。表達(dá)實(shí)體和實(shí)體聯(lián)系的物理數(shù)據(jù)結(jié)構(gòu)有層次、網(wǎng)狀、關(guān)系型及面向?qū)ο竽P?。層次、網(wǎng)狀模型稱為第一代數(shù)據(jù)庫,至今仍在使用。目前,關(guān)系模型是最重要的一種模型,人稱第二代數(shù)據(jù)庫,它概念簡單、清晰,用戶易懂易學(xué),有嚴(yán)格的數(shù)學(xué)基礎(chǔ)及在此基礎(chǔ)上的關(guān)系數(shù)據(jù)理論,大大簡化了數(shù)據(jù)庫的開發(fā)建立工作。隨著面向?qū)ο蠓椒▽W(xué)的發(fā)展,新一代數(shù)據(jù)庫,即面向?qū)ο竽P鸵嗾诎l(fā)展之中。
1.層次模型用自頂向下的倒樹狀結(jié)構(gòu)表示實(shí)體及實(shí)體間關(guān)系的模型,稱層次或樹狀模型。樹的結(jié)點(diǎn)是記錄類型,每個(gè)非根結(jié)點(diǎn)只有一個(gè)父結(jié)點(diǎn),上層記錄類型與下層記錄類型間是一對(duì)多的關(guān)系。層次模型的特點(diǎn)是記錄之間的聯(lián)系依靠指針實(shí)現(xiàn),查詢效率高。缺點(diǎn)是只能表示一對(duì)多的聯(lián)系,多對(duì)多聯(lián)系比較困難;二是數(shù)據(jù)查詢、更新復(fù)雜、編程比較復(fù)雜。
2.網(wǎng)狀模型用有向圖結(jié)構(gòu)表示實(shí)體及實(shí)體間關(guān)系的模型。有向圖的結(jié)點(diǎn)是記錄類型,有向邊從箭尾端記錄類型到箭頭端記錄類型是一對(duì)多關(guān)系。網(wǎng)狀模型的特點(diǎn)是記錄之間的聯(lián)系用指針實(shí)現(xiàn),多對(duì)多的關(guān)系亦可拆成兩個(gè)一對(duì)多的關(guān)系。網(wǎng)狀模型易于實(shí)現(xiàn),查詢效率較高,其缺點(diǎn)是編寫程序比較復(fù)雜,程序員必須熟悉數(shù)據(jù)庫的邏輯結(jié)構(gòu)。
3.關(guān)系模型用二維表格表達(dá)實(shí)體集,用外鍵表示實(shí)體間關(guān)系。關(guān)系模型概念簡單,易于理解。同樣關(guān)系模型也不支持多對(duì)多的關(guān)系,但可增加中間表,簡單地將其分解為二個(gè)一對(duì)多的關(guān)系。如果實(shí)體集的主鍵用直線下劃線表示,外鍵用波浪線下劃線表示,則上節(jié)倉庫管理的實(shí)體及實(shí)體間關(guān)系可簡單表示如下:工程項(xiàng)目(J#,Jname,Date)零件(P#,Pname,Psize,Pweight)供應(yīng)商(S#,Sname,Saddr)供需關(guān)系(J#,p#,Total)需供關(guān)系(P#,S#,Quantity)與層次網(wǎng)狀模型相比,關(guān)系模型不是用指針導(dǎo)航訪問數(shù)據(jù),簡單易懂,編程不涉及存儲(chǔ)結(jié)構(gòu)、訪問技術(shù)等細(xì)節(jié),更重要的是集合論是關(guān)系模型的數(shù)學(xué)基礎(chǔ)。SQL語言是關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)化語言,已得到廣泛應(yīng)用。目前市場上典型關(guān)系數(shù)據(jù)庫管理系統(tǒng)DBMS產(chǎn)品有DB2、ORACELE、SYBASE、INFORMIX和微機(jī)產(chǎn)品FOXPRO、ACCESS等。
4.面向?qū)ο竽P完P(guān)系模型雖然有數(shù)學(xué)基礎(chǔ),但對(duì)復(fù)雜的非結(jié)構(gòu)化數(shù)據(jù),如正文、圖、聲、多媒體數(shù)據(jù)顯得無能為力。對(duì)象是指現(xiàn)實(shí)世界中事物在計(jì)算機(jī)世界中的模擬,是事物屬性和行為的封裝體。面向?qū)ο蟾拍钭钤绯霈F(xiàn)在面向?qū)ο蟪绦蛟O(shè)計(jì)語言中,隨后出現(xiàn)在數(shù)據(jù)庫、信息系統(tǒng)軟件開發(fā)等領(lǐng)域。面向?qū)ο髷?shù)據(jù)庫是面向?qū)ο蠹夹g(shù)與數(shù)據(jù)庫技術(shù)相結(jié)合的產(chǎn)物。6.3數(shù)據(jù)庫管理系統(tǒng)DBMS合適的數(shù)據(jù)庫能支持組織的各項(xiàng)活動(dòng)及組織目標(biāo),數(shù)據(jù)庫管理系統(tǒng)DBMS是一個(gè)提供對(duì)共享數(shù)據(jù)可靠管理用的軟件,是數(shù)據(jù)庫系統(tǒng)的核心。通過DBMS對(duì)數(shù)據(jù)庫進(jìn)行定義、提供用戶視圖、查詢、更新等一切操作,用作數(shù)據(jù)庫與應(yīng)用程序之間,或數(shù)據(jù)庫與用戶之間的接口。DBMS總是基于數(shù)據(jù)模型,因此DBMS亦可看成是某個(gè)類型數(shù)據(jù)庫化。6.3.1三級(jí)模式結(jié)構(gòu)目前,大多數(shù)商業(yè)數(shù)據(jù)庫管理系統(tǒng)分為三級(jí):內(nèi)模式、概念模式和外模式。三級(jí)模式反映了數(shù)據(jù)庫的三種不同數(shù)據(jù)觀點(diǎn)。
1.三級(jí)模式結(jié)構(gòu)外模式是單個(gè)用戶所能見到的數(shù)據(jù)特性,單個(gè)用戶使用的數(shù)據(jù)視圖是概念模式的一個(gè)子集。概念模式涉及所有用戶的數(shù)據(jù)定義,系統(tǒng)的、全局的數(shù)據(jù)視圖,但不涉及數(shù)據(jù)的物理存儲(chǔ)。內(nèi)式涉及數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)(物理存儲(chǔ)數(shù)據(jù)視圖,又稱存儲(chǔ)模式),是數(shù)據(jù)庫中數(shù)據(jù)的底層表示。數(shù)據(jù)庫的三級(jí)模式是數(shù)據(jù)的三個(gè)抽象級(jí)別,用戶只要抽象地處理數(shù)據(jù),不必關(guān)心數(shù)據(jù)在計(jì)算機(jī)中的表示和存儲(chǔ),把數(shù)據(jù)的具體組織、管理工作交給DBMS,以減輕用戶使用系統(tǒng)的負(fù)擔(dān)。數(shù)據(jù)在三級(jí)模式間差別很大,DBMS在三級(jí)模式間提供兩個(gè)層次的映射——外模式到概念模式、概念模式到內(nèi)模式映射。
2.兩級(jí)數(shù)據(jù)獨(dú)立性數(shù)據(jù)庫系統(tǒng)采用三級(jí)模式結(jié)構(gòu),因此,系統(tǒng)數(shù)據(jù)具有兩級(jí)獨(dú)立性。邏輯獨(dú)立性:對(duì)概念模式的修改不影響外模式,只需改變外模式到概念模式的映射關(guān)系,從而保證子模式不變,應(yīng)用程序根據(jù)子模式編寫,亦無須修改(稱為數(shù)據(jù)庫的邏輯數(shù)據(jù)獨(dú)立性)。數(shù)據(jù)的邏輯獨(dú)立性,簡化了數(shù)據(jù)庫系統(tǒng)應(yīng)用程序的設(shè)計(jì)工作。物理獨(dú)立性:對(duì)內(nèi)模式的修改不影響概念模式,只需改變概念模式到存儲(chǔ)模式的映射關(guān)系,稱為數(shù)據(jù)庫的物理數(shù)據(jù)獨(dú)立性。數(shù)據(jù)的物理獨(dú)立性,使數(shù)據(jù)庫只需根據(jù)系統(tǒng)需求獨(dú)立設(shè)計(jì),又因?yàn)橛袛?shù)據(jù)庫的邏輯數(shù)據(jù)獨(dú)立性,從而保證對(duì)于外模式和應(yīng)用程序不受存儲(chǔ)模式影響,簡化了數(shù)據(jù)庫系統(tǒng)應(yīng)用系統(tǒng)的開發(fā)、設(shè)計(jì)工作。數(shù)據(jù)庫系統(tǒng)由DBMS在三級(jí)模式間提供兩個(gè)層次的映射。數(shù)據(jù)庫系統(tǒng)的兩級(jí)獨(dú)立性不僅簡化了數(shù)據(jù)庫系統(tǒng)應(yīng)用系統(tǒng)的開發(fā)、設(shè)計(jì)工作,而且提高了數(shù)據(jù)庫系統(tǒng)應(yīng)用系統(tǒng)開發(fā)的效率。又因數(shù)據(jù)庫的概念模式能導(dǎo)出系統(tǒng)不同應(yīng)用的多種子模式,所以數(shù)據(jù)庫的概念模式減少了數(shù)據(jù)冗余,有利于數(shù)據(jù)共享,保證了數(shù)據(jù)的一致性。此外,由于應(yīng)用程序只能操作自己的子模式范圍內(nèi)的數(shù)據(jù),因而把數(shù)據(jù)庫中其他用戶的數(shù)據(jù)隔離,且用戶對(duì)數(shù)據(jù)庫概念模式和存儲(chǔ)模式的數(shù)據(jù)都不可見,這樣有利于數(shù)據(jù)的安全性和保密性。6.3.2
DBMS的組成數(shù)據(jù)庫管理系統(tǒng)由兩大部分組成:查詢處理器和存儲(chǔ)管理器。
1.查詢處理器查詢處理器主要包括有DDL編譯器、DML編譯器、嵌入型DML預(yù)編譯器、查詢運(yùn)行核心程序。數(shù)據(jù)描述語言(DataDescriptionLanguage,DDL)提供了DDL語言定義數(shù)據(jù)庫的三級(jí)結(jié)構(gòu)及其相互之間的映射,并且定義了數(shù)據(jù)完整性、安全控制等約束。數(shù)據(jù)庫系統(tǒng)中存儲(chǔ)三級(jí)結(jié)構(gòu)定義的數(shù)據(jù)庫稱為數(shù)據(jù)字典(DataDictionary,DD)。數(shù)據(jù)操縱語言(DataManipulationLanguage,DML)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫中數(shù)據(jù)操作?;镜牟僮饔胁樵?、插入、刪除、更新等四種。DML分交互型和嵌入型兩種,因此,在DBMS中應(yīng)包括DML語言的編譯軟件或解釋軟件。
DML語言可分為過程性DML和非過程性DML。過程性的DML必須指示“做什么”和“怎么做”,層次、網(wǎng)狀的DML屬過程性DML。而關(guān)系型的DML屬非過程性的DML,只需指示“做什么”就可,操作簡單、使用方便,深受廣大用戶歡迎。
2.存儲(chǔ)管理器存儲(chǔ)管理器主要包括有授權(quán)和完整性管理器、事務(wù)管理器、文件管理器、緩沖管理器等,提供數(shù)據(jù)庫保護(hù)功能如數(shù)據(jù)恢復(fù)、并發(fā)控制、數(shù)據(jù)庫完整性和安全性控制。安全性保護(hù)——數(shù)據(jù)庫的一個(gè)重要特點(diǎn)是數(shù)據(jù)共享,但數(shù)據(jù)又是一個(gè)組織的重要資源,數(shù)據(jù)庫對(duì)非法用戶須有防止被竊取的安全、保密保護(hù)措施,必須規(guī)定用戶訪問數(shù)據(jù)庫的權(quán)限。許多系統(tǒng)采取各種措施,層層設(shè)防,如鑒定用戶身份、口令、數(shù)據(jù)編密碼、控制用戶權(quán)限等等安全性保護(hù)。完整性管理——完整性指數(shù)據(jù)的正確性和一致性,通過對(duì)數(shù)據(jù)及數(shù)據(jù)間的邏輯關(guān)系施加約束條件來實(shí)現(xiàn)。如字段值對(duì)類型、取值范圍、精度等約束,對(duì)實(shí)體唯一性約束,對(duì)實(shí)體間聯(lián)系的約束等。故障恢復(fù)——數(shù)據(jù)庫在運(yùn)行過程中難免會(huì)造成數(shù)據(jù)庫被破壞,如磁盤損壞、病毒、或操作不當(dāng)?shù)扰既灰蛩厥箶?shù)據(jù)丟失,系統(tǒng)能恢復(fù)到破壞前的狀態(tài)稱為故障恢復(fù)。在使用故障恢復(fù)功能時(shí),數(shù)據(jù)備份,事務(wù)管理必不可少。并發(fā)控制——在多用戶或網(wǎng)絡(luò)應(yīng)用中的數(shù)據(jù)庫,當(dāng)多個(gè)用戶操作同一數(shù)據(jù)時(shí),必須控制不合理的時(shí)差有可能造成的數(shù)據(jù)出錯(cuò)現(xiàn)象。
【案例6-1】設(shè)T1和T2是兩個(gè)用戶執(zhí)行同一程序P的數(shù)據(jù)處理進(jìn)程,但在時(shí)間上并行交錯(cuò),假設(shè)P:READAA=A-1WRITEA圖6-5給出了T1和T2的時(shí)序。圖6-5T1和T2并發(fā)操作時(shí)序
T1和T2先后讀取數(shù)據(jù)A,如果A為5,而后T2將A修改成4,接著T1又將原來的A是5也修改成4,最后T1和T2重復(fù)地存入修改后的值4。如果T1和T2是火車或民航的兩個(gè)售票處,并發(fā)修改剩余票數(shù)就造成了數(shù)據(jù)丟失,這樣會(huì)將一張票賣給兩個(gè)顧客。并發(fā)錯(cuò)誤解決的方法是控制相關(guān)進(jìn)程互斥地訪問數(shù)據(jù)庫,如用加鎖和開鎖控制。死鎖問題:用戶程序中使用鎖,就可能存在死鎖問題。
【案例6-2】以下兩個(gè)用戶并發(fā)處理T1和T2,就可能發(fā)生死鎖
T1:T2:
LOCKALOCKBLOCKBLOCKA……UNLOCKAUNLOCKBUNLOCKBUNLOCKA當(dāng)T1和T2并發(fā)時(shí),T1鎖住了A,T2鎖住了B,T1需要A和B才能繼續(xù)運(yùn)行,等待B開鎖,而T2需要B和A才能繼續(xù)運(yùn)行,等待A開鎖,導(dǎo)致兩個(gè)處理相互等待,這樣就發(fā)生了死鎖。因此編寫應(yīng)用程序時(shí),必須采取預(yù)防死鎖的措施。數(shù)據(jù)庫的維護(hù)功能是管理員運(yùn)行DB系統(tǒng)時(shí)使用。如數(shù)據(jù)導(dǎo)入、備份、文件重組、性能監(jiān)控等,以確保數(shù)據(jù)庫保持最佳工作狀態(tài)。6.3.3用戶訪問數(shù)據(jù)的全過程應(yīng)用程序通過數(shù)據(jù)庫管理系統(tǒng)訪問數(shù)據(jù)庫中記錄的全過程,如圖6-6所示。程序運(yùn)行時(shí),數(shù)據(jù)庫管理系統(tǒng)為應(yīng)用程序開辟一個(gè)用戶工作區(qū),用于與系統(tǒng)緩沖區(qū)交換數(shù)據(jù)。圖6-6用戶訪問數(shù)據(jù)的全過程(1)、(2)應(yīng)用程序執(zhí)行一條讀記錄的DML語句時(shí),立即啟動(dòng)數(shù)據(jù)庫管理系統(tǒng),接收、分析命令,并從數(shù)據(jù)字典DD中調(diào)出程序?qū)?yīng)的外模式,檢查并決定是否執(zhí)行命令。(3)決定執(zhí)行命令后,數(shù)據(jù)庫管理系統(tǒng)調(diào)出相應(yīng)的概念模式,確定應(yīng)讀入的記錄。(4)數(shù)據(jù)庫管理系統(tǒng)調(diào)出相應(yīng)的內(nèi)模式,確定應(yīng)讀入的物理記錄和相應(yīng)的地址,并向操作系統(tǒng)OS發(fā)出從指定地址讀入的物理記錄的命令。(5)、(6)OS按指定地址從數(shù)據(jù)庫中讀入相應(yīng)的物理記錄,存入系統(tǒng)緩沖區(qū),并向數(shù)據(jù)庫管理系統(tǒng)做出操作結(jié)束的回答。(7)、(8)數(shù)據(jù)庫管理系統(tǒng)收到OS操作結(jié)束的回答后,將讀入數(shù)據(jù)庫緩沖區(qū)中的數(shù)據(jù)轉(zhuǎn)換成概念模式、外模式,送到應(yīng)用程序,數(shù)據(jù)庫管理系統(tǒng)在運(yùn)行日志數(shù)據(jù)庫中寫入一條讀記錄信息,并將讀取記錄送用戶工作區(qū),操作狀態(tài)信息返回應(yīng)用程序。此后,應(yīng)用程序可根據(jù)返回的狀態(tài)信息對(duì)讀取的記錄做出相應(yīng)的處理。應(yīng)用程序執(zhí)行修改記錄DML語句的過程與此類似。6.3.4用戶界面用戶是指使用管理信息系統(tǒng)應(yīng)用程序的聯(lián)機(jī)終端用戶。程序員用程序設(shè)計(jì)語言(稱宿主語言),設(shè)計(jì)數(shù)據(jù)庫應(yīng)用程序或用戶界面,編寫數(shù)據(jù)庫應(yīng)用系統(tǒng)。由于數(shù)據(jù)庫管理系統(tǒng)主要由數(shù)據(jù)定義語言DDL和數(shù)據(jù)操作語言DML組成,是基于記錄模式的語言,程序設(shè)計(jì)語言是基于整數(shù)、實(shí)數(shù)、字符、記錄、數(shù)組等數(shù)據(jù)類型的運(yùn)算模式的語言,兩者之間有“縫隙”。例如SQL語言不能直接使用指針,數(shù)組等數(shù)據(jù)結(jié)構(gòu),程序設(shè)計(jì)語言也沒有DDL、DML。但有兩種處理方式:一是擴(kuò)充宿主語言的編譯程序,使之能處理SQL語句,如VC++、VB等;另一種是自含語言(數(shù)據(jù)庫管理系統(tǒng)有自己的編譯器,也有程序控制命令),可直接用于編寫數(shù)據(jù)庫應(yīng)用程序,如VFP、Delphi等,使用方便,很受歡迎。6.4關(guān)系型數(shù)據(jù)庫RDB關(guān)系模型數(shù)據(jù)庫(RDB)是繼層次、網(wǎng)狀模型后發(fā)展的第二代數(shù)據(jù)庫,關(guān)系模型數(shù)據(jù)庫有三個(gè)組成部分:數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)操作和完整性規(guī)則。和層次、網(wǎng)狀模型相比,關(guān)系模型有兩個(gè)顯著的特點(diǎn):一是其數(shù)據(jù)結(jié)構(gòu)是二維表格,簡單易理解;二是集合論是其理論基礎(chǔ)——有嚴(yán)密的關(guān)系運(yùn)算理論和關(guān)系模式設(shè)計(jì)理論。具體地說:(1)關(guān)系模型面向集合處理,一次可以操作多個(gè)元組,而層次、網(wǎng)狀模型一次只能操作一個(gè)元組。(2)關(guān)系模型有視圖等工具,應(yīng)用不隨數(shù)據(jù)庫的改變而改變,具有數(shù)據(jù)邏輯獨(dú)立性。(3)在關(guān)系模型數(shù)據(jù)庫管理系統(tǒng)(RDBMS)中,只需指出“做什么”不必指出“怎么做”,而層次、網(wǎng)狀模型必須在應(yīng)用程序中用指針指出數(shù)據(jù)訪問路徑。6.4.1基本概念關(guān)系模型數(shù)據(jù)庫中全部數(shù)據(jù)及其相互聯(lián)系都組織成“關(guān)系”,數(shù)據(jù)庫的數(shù)據(jù)結(jié)構(gòu)是一個(gè)由元組行和屬性列組成的關(guān)系,或直接稱做二維表或表,用以表示實(shí)體集。用外鍵實(shí)現(xiàn)實(shí)體集間的聯(lián)系。
1.關(guān)系的定義關(guān)系是元組的集合,元組是集合中的元素,一個(gè)元組為k(k≥1)個(gè)屬性的集合。圖6-7表示一個(gè)職工的關(guān)系。關(guān)系和二維表格及數(shù)據(jù)文件類似,但關(guān)系有如下限制:(1)關(guān)系中每一個(gè)屬性值不可分解,即不允許“表中套表”,也不允許出現(xiàn)重復(fù)值。(2)屬性的取值范圍稱為值域,每個(gè)屬性對(duì)應(yīng)一個(gè)值域,不同屬性可對(duì)應(yīng)同一值域。關(guān)系中各屬性的次序不改變關(guān)系的實(shí)際意義。元組中屬性理論上是無序的,但在用戶使用時(shí)應(yīng)考慮其有序排列。圖6-7一個(gè)名為“職工工資”的關(guān)系(3)關(guān)系中元組代表具體實(shí)體,不允許出現(xiàn)相同元組。元組的順序不改變關(guān)系的實(shí)際意義。
2.基本術(shù)語數(shù)據(jù)庫技術(shù)關(guān)系模型SQL語言記錄類型關(guān)系模式基本表記錄元組行文件關(guān)系、實(shí)例(表)基本表、表格字段、數(shù)據(jù)項(xiàng)屬性列以上是數(shù)據(jù)庫技術(shù),關(guān)系模型,典型的關(guān)系數(shù)據(jù)庫語言SQL的術(shù)語對(duì)照。實(shí)際上,關(guān)系、元組和屬性等術(shù)語來自于關(guān)系數(shù)學(xué),多數(shù)人習(xí)慣直接將關(guān)系稱為表,元組稱為記錄或行,屬性稱為字段或列。
3.鍵(key)鍵又稱關(guān)鍵字,是關(guān)系模型的一個(gè)重要概念,鍵是由一個(gè)或多個(gè)屬性組成。有下列幾種鍵:超鍵——在關(guān)系模式中,能標(biāo)識(shí)唯一元組的屬性集候選鍵——能標(biāo)識(shí)唯一元組又無多余屬性的屬性集。主鍵(主關(guān)鍵字)——標(biāo)識(shí)唯一元組的一個(gè)候選鍵。主鍵必須唯一,不能為空,以保證標(biāo)識(shí)唯一元組。外鍵——如果關(guān)系R中的主鍵又是另一個(gè)關(guān)系P的候選鍵的組成部分,則它是關(guān)系P的外部主鍵或簡稱外鍵。外鍵不是關(guān)系P的主鍵,但用它可構(gòu)成關(guān)系R和P的聯(lián)系。次鍵又稱次關(guān)鍵字——用以標(biāo)識(shí)一類元組的一個(gè)或多個(gè)屬性。6.4.2關(guān)系數(shù)據(jù)模型的完整性規(guī)則為了維護(hù)數(shù)據(jù)庫中數(shù)據(jù)與現(xiàn)實(shí)世界的一致性,RDB中數(shù)據(jù)更新(增刪、修改)必須遵循關(guān)系模型的三類完整性規(guī)則。字段(用戶定義)完整性——針對(duì)某個(gè)具體數(shù)據(jù)項(xiàng)的約束條件,取決于環(huán)境。系統(tǒng)提供定義和檢驗(yàn)完整性的機(jī)制,無需應(yīng)用程序承擔(dān),用以保證系統(tǒng)收集數(shù)據(jù)的準(zhǔn)確性。例如,學(xué)生的年齡定義為兩位數(shù),并可進(jìn)一步限制為15~30歲之間,以保證系統(tǒng)收集準(zhǔn)確的數(shù)據(jù)。記錄(實(shí)體)完整性——要求關(guān)系中元組在主鍵的屬性值不能為空,否則不能起到唯一標(biāo)識(shí)元組的作用;并要求元組中某些屬性之間有相互約束條件。例如,在職工實(shí)體集中,職工的年齡應(yīng)大于等于工齡+16,否則為非法記錄。引用完整性又稱參照完整性——不允許引用不存在的元組。在RDB中依靠外碼實(shí)現(xiàn)表間的聯(lián)系。如上例中,插入一個(gè)職工,外碼車間號(hào)是允許置為空(NULL),但不允許車間號(hào)的值不在車間表中。同樣,若要?jiǎng)h除車間表中某個(gè)元組,對(duì)職工表中對(duì)應(yīng)的車間號(hào)必須采取下列三種方法之一才能保證引用完整性:一是刪除職工表中相關(guān)的元組;二是將職工表中相關(guān)元組車間號(hào)為空,或其他存在的車間號(hào);三是若職工表中存在要?jiǎng)h除車間號(hào)時(shí),禁止刪除。否則將導(dǎo)致插入或刪除出現(xiàn)異?,F(xiàn)象,或出現(xiàn)孤立無聯(lián)系的元組。6.4.3關(guān)系模型的操作關(guān)系模型提供關(guān)系運(yùn)算,支持RDB的各種操作。關(guān)系模型集中反映在關(guān)系代數(shù)上,它允許用戶在整個(gè)關(guān)系范圍內(nèi)進(jìn)行操作,而非關(guān)系模型所支持的語言那樣只能操作數(shù)據(jù)庫的一個(gè)記錄。依據(jù)關(guān)系代數(shù),關(guān)系模型的操作分為兩類:代數(shù)操作和關(guān)系操作。關(guān)系操作有單目的投影、篩選操作和雙目的連接操作(是所有RDBMS必備的操作),所以稱為RDB的特征操作。
1.關(guān)系模型的特征操作關(guān)系操作又稱關(guān)系模型的特征操作,即一個(gè)關(guān)系數(shù)據(jù)庫管理系統(tǒng)必需具備的操作,它包括:投影、篩選和連接三類操作。
1)投影投影操作從關(guān)系中垂直地選擇指定的列,消去一些列,并重新安排列的關(guān)系,即進(jìn)行重點(diǎn)減維,以滿足某些屬性要求,重新組成的關(guān)系。設(shè)R是k元的關(guān)系,R在其分量Ai1,Ai2,…,Aim(m≤k)上的投影,結(jié)果是m元元組的集合。t為元組變量,形式定義為:πi1,…,πim(R)≡{t∣t=〈ti1,…,tim〉∧〈t1,…,tk〉∈R}
【案例6-3】圖6-8所示的“職工工資”關(guān)系,在屬性“職工姓名”和“工作部門”上的投影操作的結(jié)果,新關(guān)系“職工部門”如圖6-8的右圖所示。職工部門=π職工姓名,工作部門(職工工資)圖6-8投影操作
2)篩選篩選操作從關(guān)系中水平地選擇出滿足條件要求的元組子集構(gòu)成的關(guān)系。條件可用命題公式F(計(jì)算機(jī)語言中的條件表達(dá)式)表示,F(xiàn)中有兩個(gè)部分:運(yùn)算對(duì)象——常量,元組分量(屬性或列序號(hào))。運(yùn)算符——比較符(<,≤,>,≥,=,≠)用θ表示和邏輯運(yùn)算符(∧,∨,¬)。關(guān)系R由公式F的篩選操作用σF(R)表示,形式定義為:σF(R)≡{t∣t∈R∧F(t)=true}
【案例6-4】從“職工工資”關(guān)系中,選擇女性職工組成“女性職工”新關(guān)系,如圖6-9所示。女性職工=σ性別=“女”(職工工資)圖6-9篩選操作
3)連接連接是雙目的操作,它把兩個(gè)關(guān)系連接成一個(gè)新關(guān)系,笛卡兒積是基礎(chǔ)。(1)笛卡兒積。設(shè)關(guān)系R和S的元數(shù)分別為r和s
,則R和S
的笛卡兒積是一個(gè)(r+s)元的元組集合,每個(gè)元組前r個(gè)分量來自R的一個(gè)元組,后s個(gè)分量來自S的一個(gè)元組,記作:R×S≡{t│t=〈tr,ts〉∧tr∈R∧ts∈S}若R有m個(gè)元組,S有n個(gè)元組,笛卡兒積共有m×n個(gè)元組,如圖6-10所示。圖6-10笛卡兒積運(yùn)算笛卡兒積連接所得的表(元組和列數(shù))往往十分龐大,而實(shí)際意義不大。連接操作還有許多類型,在此,僅介紹用得較多的比較連接和自然連接。
(2)條件連接。條件連接是關(guān)系R和S的笛卡兒積中選出滿足θ條件兩個(gè)關(guān)系的元組R
S≡{t│t〈tr,ts〉∧tr∈R∧ts∈S∧}其中,i和j分別是關(guān)系R和S第i和j個(gè)屬性序號(hào);和分別表示元組t+和ts的第i和j個(gè)分量;表示兩個(gè)分量邏輯條件:θ為等號(hào)(=),為等值連接;θ為比較符,稱比較連接;θ為某個(gè)邏輯條件,稱邏輯條件連接。
【案例6-5】如圖6-11示,已知R和S兩個(gè)關(guān)系,滿足屬性Y>B的連接結(jié)果。圖6-11條件連接(3)自然連接。自然連接是實(shí)用價(jià)值很大的一種連接,它要求被連接的兩個(gè)關(guān)系有若干相同的屬性(字段)名。在公共屬性上具有相等值為依據(jù),進(jìn)行元組合并構(gòu)成的關(guān)系,即新關(guān)系的元組來自R和S,記作:R
S≡πi1,…,πim(σR.A=S.A∧R.B=S.B(R×S))自然連接先做R×S計(jì)算,再從公共屬性上具有相等值為條件篩選,提取滿足條件的元組,去掉重復(fù)的公共屬性,得到自然連接的結(jié)果。
【案例6-6】如圖6-12所示,兩個(gè)關(guān)系R、S有公共屬性Y和Z,分別用R.Y、R.Z和S.Y、S.Z表示,滿足R.Y=S.Y
和R.Z=S.Z條件的自然連接結(jié)果。圖6-12自然連接
2.關(guān)系模型的集合操作關(guān)系的集合操作包括:并、交和差,這些集合操作的共同特點(diǎn)是只能在屬性來自相同域值的關(guān)系中進(jìn)行,操作結(jié)果的屬性數(shù)不變。
1)并設(shè)關(guān)系R和S,R和S的并是由屬于R或?qū)儆赟的元組組成的集合,記作:
R∪S≡{t│t∈R∨t∈S}式中t是元組變量。
2)交設(shè)關(guān)系R和S,R和S的交是由既屬于R又屬于S的元組組成的集合,t為元組變量,記作:R-S≡{t│t∈R∧t∈S}
【案例6-7】設(shè)R和S如圖6-13所示的兩個(gè)關(guān)系,及它們?nèi)N基本集合運(yùn)算的結(jié)果。圖6-13三種基本集合運(yùn)算
3)差設(shè)關(guān)系R和S,R和S的差是由屬于R但不屬于S的元組組成的集合,t為元組變量,記作:R-S≡{t│t∈R∧t
S}
3.SQL數(shù)據(jù)查詢命令(StructuredQueryLanguage,SQL)結(jié)構(gòu)化查詢語言,用來訪問RDB,是與RDB通信的專用語言。程序設(shè)計(jì)人員和終端用戶,使用SQL語言對(duì)存儲(chǔ)在數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行檢索、修改、定義和管理。SQL先后被ANSI和ISO確定為美國國家標(biāo)準(zhǔn)和國際標(biāo)準(zhǔn)的RDB語言。目前所有的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(從大型數(shù)據(jù)庫Oracle、Sybase、Informix、DB2等,到微機(jī)關(guān)系型數(shù)據(jù)庫管理系統(tǒng)Foxpro、Access等)都支持SQL。
SQL包括:數(shù)據(jù)定義、數(shù)據(jù)查詢、數(shù)據(jù)操縱和數(shù)據(jù)控制。
SQL語言的特點(diǎn):SQL語言既是自含式語言,又是嵌入式語言。它可用于聯(lián)機(jī)交互使用方式,便于數(shù)據(jù)庫管理員維護(hù)數(shù)據(jù)庫和提取信息,又可嵌入程序設(shè)計(jì)高級(jí)語言的程序中,便于編寫數(shù)據(jù)庫應(yīng)用程序。SQL語言是面向問題型的語言,在進(jìn)行數(shù)據(jù)操作時(shí),只需指出“做什么”,不必指出“怎么做”,大大減輕了用戶的負(fù)擔(dān);加之功能豐富,語法簡單、易學(xué)易用,深受用戶歡迎。查詢是SQL的核心,現(xiàn)介紹Foxpro中的SQL數(shù)據(jù)庫查詢命令。命令格式如下:
SELECT[ALL/DISTINCT][別名.]選擇項(xiàng)[AS別名][,[別名.]選擇項(xiàng)[AS別名]…]
FROM表名[表別名][,表名[表別名]…][[INTO目標(biāo)表名]/[TOFILE文件名[ADDITIVE]/TOPRINTER[PROMPT]/TOSCREEN]][WHERE條件][GROUPBY分組列[,分組列…]][HAVING過濾條件][UNION[ALL]SELECT命令][ORDERBY排序項(xiàng)[ASC/DESC][,排序項(xiàng)[ASC/DESC]…]]該查詢命令共有七個(gè)子句,除SELECT和FROM子句外,其他可以任選。FROM子句用來指明查詢出自一個(gè)或多個(gè)表的表名;INTO短語指明查詢結(jié)果目標(biāo)表的去向,忽略INTO短語表明查詢結(jié)果出現(xiàn)在BROWSE瀏覽窗口中。SELECT子句指明查詢表(一個(gè)或多個(gè)表)投影字段,選擇項(xiàng)還可以是常量、表達(dá)式和系統(tǒng)函數(shù),如AVG(),MAX(),MIN(),COUNT()和SUM()等用以建立目標(biāo)表的新字段,用“AS別名”指定新字段名。WHERE子句十分重要,它指明查詢表記錄篩選條件和查詢表為多個(gè)表時(shí)的連接條件,多表?xiàng)l件篩選選中記錄構(gòu)成目標(biāo)表的記錄集合。忽略WHERE子句表明無篩選或連接條件。其他子句完成對(duì)目標(biāo)表的進(jìn)一步修飾。GROUPBY子句將查詢結(jié)果分組;HAVING子句和GROUPBY子句聯(lián)用通過“過濾條件”進(jìn)一步說明分組;UNION子句中,由SELECT命令組成另一個(gè)子查詢,將當(dāng)前查詢結(jié)果與子查詢的結(jié)果進(jìn)行并操作;ORDERBY將當(dāng)前查詢結(jié)果排序。
【案例6-8】用Foxpro中的SQL數(shù)據(jù)庫查詢命令,對(duì)如圖6-7所示的“職工工資”表查詢、顯示女職工而且基本工資大于300元的職工名單,名單中要求顯示職工姓名,性別,工作部門,工作日期,基本工資和應(yīng)發(fā)工資。其中應(yīng)發(fā)工資是新添字段,應(yīng)發(fā)工資=基本工資+煤糧補(bǔ)貼+副食補(bǔ)貼。以下是查詢命令:
SELECT職工姓名,性別,工作部門,工作日期,基本工資,基本工資+煤糧補(bǔ)貼+副食補(bǔ)貼,as應(yīng)發(fā)工資FROM職工工資WHERE性別="女"AND基本工資>300。查詢結(jié)果瀏覽窗口如圖6-14所示。圖6-14基本工資大于300元的女職工名單6.5
RDB設(shè)計(jì)在數(shù)據(jù)庫的物理模型采用關(guān)系模型基礎(chǔ)上研究邏輯設(shè)計(jì)。數(shù)據(jù)庫的邏輯設(shè)計(jì)是一種自頂而下,逐步逼近系統(tǒng)設(shè)計(jì)目標(biāo)的過程。如果說數(shù)據(jù)庫應(yīng)用系統(tǒng)可以分步實(shí)施的話,數(shù)據(jù)庫的設(shè)計(jì)必須先行,而且一定要以系統(tǒng)的、全局的觀念進(jìn)行設(shè)計(jì)。數(shù)據(jù)庫設(shè)計(jì)好壞直接影響數(shù)據(jù)庫應(yīng)用系統(tǒng)的性能,最壞的情況可能導(dǎo)致整個(gè)應(yīng)用系統(tǒng)無法實(shí)現(xiàn)。數(shù)據(jù)庫邏輯設(shè)計(jì)步驟:用戶需求分析;E-R模型設(shè)計(jì),確定實(shí)體;確定實(shí)體屬性及表間的聯(lián)系;優(yōu)化設(shè)計(jì)。系統(tǒng)的需求分析十分重要,具體做法見第7章內(nèi)容,本節(jié)介紹E-R圖到關(guān)系模型的轉(zhuǎn)化和關(guān)系模型的規(guī)范化原則。6.5.1
RDB實(shí)體聯(lián)系模型在用戶需求的驅(qū)動(dòng)下,可用E-R圖確定了系統(tǒng)所需的實(shí)體和實(shí)體間的聯(lián)系。
1.RDB的ER圖的關(guān)系模型
E-R圖主要成分是實(shí)體集和聯(lián)系類型。在關(guān)系模型中,一個(gè)實(shí)體集轉(zhuǎn)換成一個(gè)關(guān)系(表),實(shí)體的屬性為關(guān)系屬性,實(shí)體標(biāo)識(shí)符為關(guān)系的鍵。要在關(guān)系模型中反映實(shí)體集間的聯(lián)系必須根據(jù)實(shí)體集間的聯(lián)系類型不同選擇不同的轉(zhuǎn)換方法。(1)若實(shí)體間是1∶1的聯(lián)系時(shí),則將任何一個(gè)關(guān)系的主鍵,加入另一關(guān)系作為外鍵,即兩個(gè)關(guān)系間的聯(lián)系。
【案例6-9】學(xué)校與校長兩個(gè)實(shí)體集如下:學(xué)校S(學(xué)校名稱,地址,電話)校長P(校長姓名,性別,年齡,職稱)學(xué)校與校長間存在1∶1聯(lián)系,建立聯(lián)系后的關(guān)系模型為:學(xué)校S(學(xué)校名稱,校長姓名,地址,電話)校長P(校長姓名,性別,年齡,職稱)或?qū)W校S(學(xué)校名稱,地址,電話)校長P(校長姓名,學(xué)校名稱,性別,年齡,職稱)注:本教材中用直線下劃線表示關(guān)系的主鍵,波浪線下劃線表示外鍵。(2)若實(shí)體集間聯(lián)系是1∶M,則在M端關(guān)系中加入1端關(guān)系的主鍵作外鍵,構(gòu)成聯(lián)系。相反,如果將1端關(guān)系中加入M端關(guān)系中的主鍵作外鍵構(gòu)成1∶M的聯(lián)系,會(huì)造成外鍵有很多冗余,不僅浪費(fèi)存儲(chǔ)空間,而且可能造成數(shù)據(jù)的不一致性。
【案例6-10】車間和職工兩個(gè)實(shí)體集如下:車間W(車間號(hào),車間名稱,電話)職工E(職工號(hào),姓名,性別,年齡,聘期)車間聘用職工是1∶M的聯(lián)系,建立聯(lián)系后的關(guān)系模型為車間W(車間號(hào),車間名稱,電話)職工E(職工號(hào),車間號(hào),姓名,性別,年齡,聘期)(3)若實(shí)體集間是M∶N的聯(lián)系,由于RDB不直接支持多對(duì)多的聯(lián)系,需引入紐帶將其分解為兩個(gè)一對(duì)多的聯(lián)系。建立紐帶表,分別將兩個(gè)關(guān)系的主鍵,及聯(lián)系的屬性置于紐帶表中構(gòu)成兩個(gè)實(shí)體集間是M∶M的聯(lián)系。
【案例6-11】教學(xué)模型中,學(xué)生和課程兩個(gè)實(shí)體集為:學(xué)生S(學(xué)號(hào),姓名,性別)課程C(課號(hào),課名,學(xué)分,開課學(xué)期,學(xué)時(shí)數(shù))學(xué)生和課程兩個(gè)實(shí)體集間,由學(xué)生選課建立M∶M聯(lián)系,選課聯(lián)系有成績、績點(diǎn)等屬性,建立聯(lián)系后的關(guān)系模型為:學(xué)生S(學(xué)號(hào),姓名,性別)課程C(課號(hào),課名,學(xué)分,開課學(xué)期,學(xué)時(shí)數(shù))選課SC(學(xué)號(hào),課號(hào),成績,績點(diǎn))在該例中,選課聯(lián)系的屬性置于稱為選課的紐帶表中,如果置于學(xué)生或課程關(guān)系中,都不合適。
2.RDB的體系結(jié)構(gòu)關(guān)系模型基本上遵循數(shù)據(jù)庫體系結(jié)構(gòu)的三級(jí)體系結(jié)構(gòu),通常稱關(guān)系模式、用戶模式和存儲(chǔ)模式分別對(duì)應(yīng)于概念、外模式和內(nèi)模式。
【案例6-12】教學(xué)模型——學(xué)生選課的E-R圖(案例6-11),涉及兩個(gè)實(shí)體集,“學(xué)生”和“課程”。學(xué)生選課是M∶M的聯(lián)系,建立的關(guān)系模式由下面三個(gè)關(guān)系組成:學(xué)生S(學(xué)號(hào),姓名,性別)課程C(課號(hào),課名,學(xué)分,開課學(xué)期,學(xué)時(shí)數(shù))選課SC(學(xué)號(hào),課號(hào),成績,績點(diǎn))假設(shè)用戶所需的子模式G成績子模式G(學(xué)號(hào),姓名,課名,成績,績點(diǎn))子模式G反映了用戶使用的數(shù)據(jù)視圖,對(duì)應(yīng)的數(shù)據(jù)來自關(guān)系模式的s和sc。由于關(guān)系模式的物理獨(dú)立性,用戶子模式的邏輯獨(dú)立性,用戶無需關(guān)心存儲(chǔ)模式,數(shù)據(jù)的訪問由DBMS自動(dòng)實(shí)現(xiàn)。值得注意的是,在數(shù)據(jù)庫的邏輯設(shè)計(jì)時(shí),牢記不要將應(yīng)用的子模式或系統(tǒng)的輸出報(bào)表直接看成一個(gè)完整的實(shí)體。6.5.2
RDB規(guī)范化理論
RDB是關(guān)系的集合,規(guī)范化或稱范式(NormalForm,NF)理論,研究如何從多種組合中選取一個(gè)性能好的關(guān)系集合,使得數(shù)據(jù)庫減少數(shù)據(jù)冗余和便于維護(hù),這是數(shù)據(jù)庫設(shè)計(jì)技術(shù)中一個(gè)重要問題。規(guī)范化理論是基于數(shù)學(xué)理論產(chǎn)生的處理方法,有助于確定表的屬性定義,表的分解。非規(guī)范化數(shù)據(jù)表必須規(guī)范化,規(guī)范化主要基于范式的概念,表的范式可分5個(gè)等級(jí),且滿足較高等級(jí)范式者必須滿足較低等級(jí)范式。通常在解決一般問題時(shí),滿足前三個(gè)范式即已經(jīng)有比較滿意的性能。(1)1NF—如果關(guān)系模式中的關(guān)系R,其所有屬性的值域中每一個(gè)值不可再分解,稱R滿足第一范式(1NF),否則將其分解,即表是一個(gè)簡表,任何一字段不能為子表,或字段值不能是數(shù)組、集合、枚舉量。不符合1NF的關(guān)系無法進(jìn)行關(guān)系運(yùn)算,這是RDBMS不支持?jǐn)?shù)組、列表和嵌套的原因。
【案例6-13】關(guān)系:工資(工號(hào),姓名,基本工資,加班補(bǔ)貼,交通補(bǔ)貼,…)顯然,這是非1NF的關(guān)系,在工資表套有補(bǔ)貼表,而且補(bǔ)貼項(xiàng)是枚舉量,除非列舉所有的補(bǔ)貼項(xiàng),或用其他補(bǔ)貼表示未被列舉的補(bǔ)貼項(xiàng),否則無法完整表達(dá)。但如果全部列舉(假設(shè)可以)也不實(shí)用,有的職工可能有其中的幾項(xiàng),有的可能一項(xiàng)也沒有,當(dāng)記錄數(shù)較多時(shí),空白項(xiàng)浪費(fèi)存儲(chǔ)空間十分可觀。如果采用其他補(bǔ)貼一是無法清楚表達(dá)究竟是些什么補(bǔ)貼,二是當(dāng)有幾項(xiàng)未被列舉的補(bǔ)貼項(xiàng)時(shí),將其歸入其他補(bǔ)貼必須介入人工計(jì)算。將補(bǔ)貼表從工資表分離,對(duì)應(yīng)的兩個(gè)符合1NF關(guān)系為:工資(工號(hào),姓名,基本工資)補(bǔ)貼(補(bǔ)貼名稱,補(bǔ)貼數(shù))以上描述的問題都得到了妥善解決。同樣,工資中的扣款、產(chǎn)品中的供應(yīng)商等等,都應(yīng)該依此解決。(2)2NF——如果關(guān)系R滿足1NF,且R中每一個(gè)非主屬性完全函數(shù)依賴于主鍵屬性則稱R滿足第二范式,即在滿足1NF的關(guān)系中,每一個(gè)非主屬性不能依賴主鍵屬性的一部分,否則不符合2NF。
【案例6-14】如下一個(gè)“學(xué)生社團(tuán)”的關(guān)系“學(xué)生社團(tuán)”關(guān)系,滿足1NF,但不滿足2NF,該關(guān)系由學(xué)號(hào),社團(tuán)代號(hào)組成主鍵,學(xué)生姓名、性別只依賴于學(xué)號(hào),和社團(tuán)無關(guān)。同樣,社團(tuán)名稱只依賴于社團(tuán)代號(hào),和學(xué)號(hào)無關(guān),不滿足2NF。不滿足2NF關(guān)系,會(huì)引起數(shù)據(jù)冗余和插入、刪除異常等現(xiàn)象。例如插入新社團(tuán)而缺少學(xué)號(hào)無法添加;當(dāng)刪去某個(gè)學(xué)生信息時(shí),可能會(huì)丟失有關(guān)的社團(tuán)信息。解決方法:將非函數(shù)依賴部分分解成兩個(gè)或多個(gè)滿足要求第二范式(2NF)的關(guān)系。學(xué)生(學(xué)號(hào),姓名,性別)社團(tuán)(社團(tuán)代號(hào),名稱)學(xué)生社團(tuán)(學(xué)號(hào),社團(tuán)代號(hào))(3)3FN——如果學(xué)生關(guān)系R滿足第二范式,且非主鏈屬性都不傳遞依賴主鏈屬性,則R滿足第三范式的關(guān)系。
【案例6-15】如下一個(gè)“產(chǎn)品供銷”的關(guān)系產(chǎn)品代碼是主鍵,名稱,規(guī)格直接依賴主鏈,供應(yīng)商地址依賴供應(yīng)商名,而供應(yīng)商名又依賴于產(chǎn)品代碼,則供應(yīng)商地址傳遞依賴產(chǎn)品代碼。非3FN關(guān)系同樣在冗余和更新異常問題。解決方法,分解成多個(gè)滿足3FN的關(guān)系。產(chǎn)品(產(chǎn)品代碼,名稱,規(guī)格,供應(yīng)商名)供應(yīng)商(供應(yīng)商名,供應(yīng)商地址)關(guān)系規(guī)范化實(shí)際上是關(guān)系分解、關(guān)系屬性確定的過程,通過分解使關(guān)系達(dá)到較高的范式。分解有多種可能性,但必須遵循關(guān)系分解的基本原則:無損分解原則,即分解后不丟失信息;獨(dú)立關(guān)系分解原則,即分解后的關(guān)系必須相互獨(dú)立,避免對(duì)一個(gè)關(guān)系的修改,涉及到另一個(gè)關(guān)系。
RDB最大特點(diǎn)之一,它有堅(jiān)實(shí)的理論基礎(chǔ)。關(guān)系代數(shù)以集合代數(shù)為基礎(chǔ),以關(guān)系(表)為分散對(duì)象的一組分散集合。6.5.3
RDB設(shè)計(jì)實(shí)例下面以一家出版社為例,介紹RDB的設(shè)計(jì)。在應(yīng)用開發(fā)中,最初與用戶交談,了解用戶需求時(shí),用戶會(huì)提出種種如下的要求:“我們有很多事情要做,但不知道如何開始。首先,我們要有作者的情況,比如姓名,地址什么的。其次是出版書的情況,這方面信息量很大。我們用四位內(nèi)部編碼表示所出版的書,有關(guān)書的信息包括書名、頁數(shù)、售價(jià)等。有些書由多個(gè)作者合寫,我們需要知道書的出版時(shí)間和印刷的冊(cè)數(shù)。另外,還要有月銷售書的數(shù)量等有關(guān)情況,每月我們要知道每本書銷售了多少冊(cè)。我們按書的內(nèi)容分類,例如,用RO表示浪漫類,MY表示神秘類,WE表示西部類等等。一本書只能歸屬一個(gè)分類。另外,一些作者喜歡用筆名發(fā)表作品,為此,我們必須知道作者的原名,因?yàn)榘垂P名郵寄的支票不能兌現(xiàn)。有的作者筆名很多。你能在數(shù)據(jù)庫中處理這些問題嗎?”對(duì)此首先要做的是定義實(shí)體和選擇主鍵,從用戶描述中可提煉出下列實(shí)體:作者(作者編號(hào),姓名,通信地址)書(書號(hào),書名,頁數(shù),售價(jià))分類(分類碼,分類名稱)印數(shù)(書號(hào),版數(shù),印數(shù),出版日期)銷售(書號(hào),年月,銷售數(shù))筆名(作者編號(hào),筆名)接下來是確定實(shí)體間的聯(lián)系,我們可得出下列聯(lián)系:書和作者之間是多對(duì)多的聯(lián)系分類和書之間是一對(duì)多的聯(lián)系作者和筆名之間是一對(duì)多的聯(lián)系書和印數(shù)及書和銷售之間都是一對(duì)一的聯(lián)系筆名是個(gè)枚舉量接下來是確定實(shí)體的屬性,以下給出數(shù)據(jù)庫的完整模型:作者(作者編號(hào),姓名,通信地址)書(書號(hào),分類碼,書名,頁數(shù),售價(jià))作者書(作者編號(hào),書號(hào),作者序位)分類(分類碼,分類名稱)印數(shù)(書號(hào),版數(shù),印數(shù),出版日期)銷售(書號(hào),年月,銷售數(shù))筆名(作者編號(hào),筆名)(1)書和作者之間是多對(duì)多的聯(lián)系,引入“作者書”的紐帶表,紐帶表的“作者序位”是聯(lián)系的屬性,它表示作者是該書的第幾作者。(2)書和印數(shù)及書和銷售之間都是一對(duì)一的聯(lián)系,分別建表有利于減小冗余。(3)對(duì)枚舉量筆名單獨(dú)建表。6.6新型數(shù)據(jù)庫6.6.1數(shù)據(jù)倉庫
1.從數(shù)據(jù)庫到數(shù)據(jù)倉庫數(shù)據(jù)庫系統(tǒng)作為數(shù)據(jù)管理的主要手段,主要用于事務(wù)處理。在這些數(shù)據(jù)庫中已經(jīng)保存了大量的日常業(yè)務(wù)數(shù)據(jù)。傳統(tǒng)的決策支持系統(tǒng)(DSS)一般是直接建立在這種事務(wù)處理環(huán)境上的。數(shù)據(jù)庫技術(shù)在事務(wù)處理、批處理、分析處理等方面發(fā)揮了巨大的作用,但它對(duì)分析處理的支持一直不能令人滿意,尤其是當(dāng)以事務(wù)處理為主的聯(lián)機(jī)事務(wù)處理(OLTP)和以分析處理為主的決策支持系統(tǒng)(DSS)共存時(shí),人們逐漸認(rèn)識(shí)到事務(wù)處理和分析處理具有不同的特性。以下原因?qū)е率聞?wù)處理環(huán)境不適宜DSS應(yīng)用:(1)事務(wù)處理和分析處理的特性不同;(2)數(shù)據(jù)集成問題;(3)數(shù)據(jù)動(dòng)態(tài)集成問題;(4)歷史數(shù)據(jù)問題;(5)數(shù)據(jù)的綜合問題。以上這些問題表明,在事務(wù)型環(huán)境中直接構(gòu)建分析應(yīng)用是很困難的。要從本質(zhì)上解決這些問題,就需要提高分析、決策的效率和結(jié)論的有效性。分析處理及其數(shù)據(jù)必須與操作型處理和數(shù)據(jù)相分離,必須把分析數(shù)據(jù)從事務(wù)處理環(huán)境中提取出來,按照DSS處理的需要進(jìn)行重新組織,建立單獨(dú)的分析處理環(huán)境。數(shù)據(jù)倉庫正是為了構(gòu)建這種新的分析處理環(huán)境而出現(xiàn)的一種數(shù)據(jù)存儲(chǔ)和組織技術(shù)。
2.數(shù)據(jù)倉庫的定義及其特點(diǎn)
1)數(shù)據(jù)倉庫的定義數(shù)據(jù)倉庫是近年來信息領(lǐng)域中迅速發(fā)展起來的數(shù)據(jù)庫新技術(shù)。數(shù)據(jù)倉庫一詞尚沒有一個(gè)統(tǒng)一的定義,比較一致的說法是:數(shù)據(jù)倉庫是一個(gè)面向主題的、集成的、相對(duì)穩(wěn)定的、反映歷史變化的數(shù)據(jù)集合,主要用于支持管理決策過程。關(guān)于數(shù)據(jù)倉庫的概念,首先,數(shù)據(jù)倉庫用于支持決策,面向分析型數(shù)據(jù)處理,它不同于操作型數(shù)據(jù)庫;其次,數(shù)據(jù)倉庫是對(duì)多個(gè)異構(gòu)的數(shù)據(jù)源的有效集成,集成后按照主題進(jìn)行了重組,并包含歷史數(shù)據(jù),且存放在數(shù)據(jù)倉庫中的數(shù)據(jù)一般不再修改。建立數(shù)據(jù)倉庫能充分利用已存在的數(shù)據(jù)資源,獲得有用信息,并由此創(chuàng)造出效益。目前越來越多的企業(yè)、行政、事業(yè)單位開始認(rèn)識(shí)到數(shù)據(jù)倉庫應(yīng)用所帶來的好處。與傳統(tǒng)的數(shù)據(jù)庫技術(shù)相比較,傳統(tǒng)數(shù)據(jù)庫是以單一的數(shù)據(jù)資源,即數(shù)據(jù)庫為中心,進(jìn)行從事務(wù)處理、批處理到?jīng)Q策分析等各種類型的數(shù)據(jù)處理工作的。不同類型的數(shù)據(jù)處理有著其不同的處理特點(diǎn),以單一的數(shù)據(jù)組織方式進(jìn)行組織的數(shù)據(jù)庫并不能反映這種差異,滿足不了數(shù)據(jù)處理的多樣化要求。隨著數(shù)據(jù)庫應(yīng)用的普及,人們發(fā)現(xiàn):對(duì)數(shù)據(jù)處理除了操作型處理外還會(huì)有分析型處理,而且分析型處理會(huì)帶來更好的效益。所謂操作型處理(或事務(wù)處理),是指對(duì)數(shù)據(jù)庫進(jìn)行的聯(lián)機(jī)的日常操作,如對(duì)一個(gè)或一組記錄的查詢和修改等,主要是為特定應(yīng)用服務(wù)的,操作人員比較注重響應(yīng)時(shí)間、數(shù)據(jù)的安全性和完整性等問題。而分析型處理則主要由管理人員處理,處理結(jié)果往往會(huì)影響其決策行為,這種操作經(jīng)常要訪問大量的歷史數(shù)據(jù),與操作型數(shù)據(jù)之間有很大的差異。數(shù)據(jù)倉庫是以已有的業(yè)務(wù)系統(tǒng)和大量業(yè)務(wù)數(shù)據(jù)的積累為基礎(chǔ)的,數(shù)據(jù)倉庫不是靜態(tài)的概念。把信息加以整理、歸納和重組,并及時(shí)提供給相應(yīng)的管理決策人員,是數(shù)據(jù)倉庫的根本任務(wù)。從產(chǎn)業(yè)界的角度看,數(shù)據(jù)倉庫建設(shè)是一個(gè)工程。
2)數(shù)據(jù)倉庫的特點(diǎn)與傳統(tǒng)數(shù)據(jù)庫相比較,數(shù)據(jù)倉庫擁有面向主題、集成的、相對(duì)穩(wěn)定、反映歷史變化等四個(gè)特點(diǎn)。(1)面向主題。與傳統(tǒng)數(shù)據(jù)庫面向事務(wù)處理應(yīng)用進(jìn)行數(shù)據(jù)組織的特點(diǎn)相對(duì)應(yīng),數(shù)據(jù)倉庫中的數(shù)據(jù)是面向主題進(jìn)行組織的。主題是一個(gè)抽象的概念,是指用戶使用數(shù)據(jù)倉庫進(jìn)行決策時(shí)所關(guān)心的重點(diǎn)方面,是在較高層次上將企業(yè)信息系統(tǒng)中的數(shù)據(jù)綜合、歸類并進(jìn)行分析利用的抽象,一個(gè)主題通常與多個(gè)操作型信息系統(tǒng)相關(guān)。在邏輯意義上,它對(duì)應(yīng)企業(yè)中某一宏觀分析領(lǐng)域所涉及的分析對(duì)象。所謂較高層次,是相對(duì)面向應(yīng)用的數(shù)據(jù)組織方式而言的,是指按照主題進(jìn)行數(shù)據(jù)組織的方式具有更高的數(shù)據(jù)抽象級(jí)別。“主題”在數(shù)據(jù)倉庫中是由一系列表實(shí)現(xiàn)的。一個(gè)主題下表的劃分可以按數(shù)據(jù)的綜合、數(shù)據(jù)所屬時(shí)間段進(jìn)行劃分?;谝粋€(gè)主題的所有表都含有一個(gè)稱為公共碼鍵的屬性作為其主碼的一部分。公共碼鍵將一個(gè)主題的各個(gè)表聯(lián)系起來。由于數(shù)據(jù)倉庫中的數(shù)據(jù)都是同某一時(shí)刻聯(lián)系在一起的,因此除了其公共碼鍵之外,還必須包括時(shí)間成分作為其碼鍵的一部分。數(shù)據(jù)倉庫中的數(shù)據(jù)是按照一定的主題域進(jìn)行組織的,同一主題的表不一定存儲(chǔ)在相同的介質(zhì)中,而可以根據(jù)數(shù)據(jù)被關(guān)心的程度,分別存儲(chǔ)在磁盤、磁帶、光盤等不同的介質(zhì)中。一般而言,查詢頻率低的數(shù)據(jù)存儲(chǔ)在廉價(jià)慢速設(shè)備(如磁帶)上,而查詢頻率高的數(shù)據(jù)則保存在磁盤上。(2)集成的。面向事務(wù)處理的操作型數(shù)據(jù)庫通常與某些特定的應(yīng)用相關(guān)。數(shù)據(jù)庫之間相互獨(dú)立,并且往往是異構(gòu)的。而數(shù)據(jù)倉庫中的數(shù)據(jù)是在對(duì)原有分散的數(shù)據(jù)庫數(shù)據(jù)抽取、清理的基礎(chǔ)上經(jīng)過系統(tǒng)加工、匯總和整理得到的,必須消除源數(shù)據(jù)中的不一致性,以保證數(shù)據(jù)倉庫內(nèi)的信息是關(guān)于整個(gè)企業(yè)的一致的全局信息。由于操作型處理與分析型處理之間的差別,數(shù)據(jù)倉庫的數(shù)據(jù)是從原有的分散的數(shù)據(jù)庫數(shù)據(jù)中抽取來的,在數(shù)據(jù)進(jìn)入數(shù)據(jù)倉庫之前,需要經(jīng)過加工、統(tǒng)一和綜合等集成處理。數(shù)據(jù)集成是數(shù)據(jù)倉庫建設(shè)中最關(guān)鍵、最復(fù)雜的一步。(3)相對(duì)穩(wěn)定。操作型數(shù)據(jù)庫中的數(shù)據(jù)通常需要實(shí)時(shí)更新,數(shù)據(jù)根據(jù)需要及時(shí)發(fā)生變化。數(shù)據(jù)倉庫的數(shù)據(jù)主要供企業(yè)決策分析之用,所涉及的數(shù)據(jù)操作主要是數(shù)據(jù)查詢,一旦某個(gè)數(shù)據(jù)進(jìn)入數(shù)據(jù)倉庫以后,一般情況下將被長期保留,也就是數(shù)據(jù)倉庫中一般有大量的查詢操作,但修改和刪除操作很少,通常只需要定期的加載、刷新。數(shù)據(jù)倉庫存儲(chǔ)的是相當(dāng)長一段時(shí)間內(nèi)的歷史數(shù)據(jù),是不同時(shí)刻數(shù)據(jù)庫快照的集合,以及基于這些快照進(jìn)行統(tǒng)計(jì)、綜合和重組的導(dǎo)出數(shù)據(jù),不是聯(lián)機(jī)處理的數(shù)據(jù)。因而,數(shù)據(jù)一經(jīng)集成進(jìn)入數(shù)據(jù)庫后是極少或根本不用更新的,是穩(wěn)定的。(4)反映歷史變化。操作型數(shù)據(jù)庫主要關(guān)心當(dāng)前某一個(gè)時(shí)間段內(nèi)的數(shù)據(jù),而數(shù)據(jù)倉庫中的數(shù)據(jù)通常包含歷史信息,系統(tǒng)記錄了企業(yè)從過去某一時(shí)點(diǎn)(如開始應(yīng)用數(shù)據(jù)倉庫的時(shí)點(diǎn))到目前的各個(gè)階段的信息,通過這些信息,可以對(duì)企業(yè)的發(fā)展歷程和未來趨勢(shì)做出定量分析和預(yù)測。數(shù)據(jù)倉庫中的數(shù)據(jù)相對(duì)穩(wěn)定是指,數(shù)據(jù)倉庫的用戶進(jìn)行分析處理時(shí)可能是不進(jìn)行數(shù)據(jù)更新操作的。但并不是說,在數(shù)據(jù)倉庫的整個(gè)生存周期中數(shù)據(jù)集合是不變的。
3.數(shù)據(jù)倉庫系統(tǒng)的體系結(jié)構(gòu)整個(gè)數(shù)據(jù)倉庫系統(tǒng)的體系結(jié)構(gòu)可以劃分為數(shù)據(jù)源、數(shù)據(jù)的存儲(chǔ)與管理、OLAP服務(wù)器、前端工具等四個(gè)層次。數(shù)據(jù)源是數(shù)據(jù)倉庫系統(tǒng)的基礎(chǔ),是各類數(shù)據(jù)的源泉,常包括企業(yè)的各類信息。如存放于RDBMS中的各種業(yè)務(wù)處理數(shù)據(jù)、各類文檔數(shù)據(jù)、各類法律法規(guī)、市場信息、競爭對(duì)手的信息等。數(shù)據(jù)的存儲(chǔ)與管理是整個(gè)數(shù)據(jù)倉庫系統(tǒng)的核心,是數(shù)據(jù)倉庫的關(guān)鍵。數(shù)據(jù)倉庫的組織管理方式?jīng)Q定了它有別于傳統(tǒng)數(shù)據(jù)庫,同時(shí)也決定了其對(duì)外部數(shù)據(jù)的表現(xiàn)形式。數(shù)據(jù)倉庫按照數(shù)據(jù)的覆蓋范圍可以分為企業(yè)級(jí)數(shù)據(jù)倉庫和部門級(jí)數(shù)據(jù)倉庫(通常稱為數(shù)據(jù)集市)。
OLAP服務(wù)器對(duì)分析需要的數(shù)據(jù)進(jìn)行有效集成,按多維模型予以組織,以便進(jìn)行多角度、多層次的分析,并發(fā)現(xiàn)趨勢(shì)。按其具體實(shí)現(xiàn)可以分為:ROLAP、MOLAP和HOLAP。
ROLAP基本數(shù)據(jù)和聚合數(shù)據(jù)均存放在RDBMS之中;MOLAP基本數(shù)據(jù)和聚合數(shù)據(jù)均存放在多維數(shù)據(jù)庫之中;HOLAP基本數(shù)據(jù)存放在RDBMS之中,聚合數(shù)據(jù)存放在多維數(shù)據(jù)庫中。前端工具主要包括各種報(bào)表工具、查詢工具、數(shù)據(jù)分析工具、數(shù)據(jù)挖掘工具以及各種基于數(shù)據(jù)倉庫或數(shù)據(jù)集市的應(yīng)用開發(fā)工具。其中數(shù)據(jù)分析工具主要針對(duì)OLAP服務(wù)器,報(bào)表工具、數(shù)據(jù)挖掘工具主要針對(duì)數(shù)據(jù)倉庫。
4
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 18041-2025民用航空貨物運(yùn)輸術(shù)語
- 健身房衛(wèi)生消毒制度
- 敬老院衛(wèi)生值日制度
- 城中村衛(wèi)生保潔制度
- 上午取村愛國衛(wèi)生制度
- 門店衛(wèi)生器具管理制度
- 低年級(jí)班級(jí)衛(wèi)生打掃制度
- 涼菜間衛(wèi)生與管理制度
- 店長消防衛(wèi)生管理制度
- 廚房衛(wèi)生消毒管理制度
- 2026海南安??毓捎邢挢?zé)任公司招聘11人筆試模擬試題及答案解析
- 裝飾裝修工程施工組織設(shè)計(jì)方案(二)
- 2026上海碧海金沙投資發(fā)展有限公司社會(huì)招聘參考題庫必考題
- 保險(xiǎn)業(yè)客戶服務(wù)手冊(cè)(標(biāo)準(zhǔn)版)
- 2026年張家界航空工業(yè)職業(yè)技術(shù)學(xué)院單招職業(yè)傾向性考試模擬測試卷新版
- 2026遼寧機(jī)場管理集團(tuán)校招面筆試題及答案
- 2025徽銀金融租賃有限公司社會(huì)招聘筆試歷年典型考題及考點(diǎn)剖析附帶答案詳解
- 2026年遼寧軌道交通職業(yè)學(xué)院單招綜合素質(zhì)筆試備考題庫帶答案解析
- 檢驗(yàn)科內(nèi)控制度
- DB44-T 2771-2025 全域土地綜合整治技術(shù)導(dǎo)則
- 碳排放核算及企業(yè)減排策略
評(píng)論
0/150
提交評(píng)論