第1章關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)_第1頁(yè)
第1章關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)_第2頁(yè)
第1章關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)_第3頁(yè)
第1章關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)_第4頁(yè)
第1章關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第1章關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)

SQL語(yǔ)言及采用SQL語(yǔ)言的關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)是計(jì)算機(jī)中重要的基礎(chǔ)技術(shù)之一。在使

用任何數(shù)據(jù)庫(kù)之前,都必須設(shè)計(jì)好數(shù)據(jù)庫(kù),包括將要存儲(chǔ)的數(shù)據(jù)的類型,數(shù)據(jù)之間的相互

關(guān)系以及數(shù)據(jù)的組織形式.本章將對(duì)SQL語(yǔ)言進(jìn)行簡(jiǎn)要的介紹,并詳細(xì)地介紹如何進(jìn)行數(shù)

據(jù)庫(kù)的設(shè)計(jì)。

本章主要內(nèi)容:

?SQL簡(jiǎn)史及功能特性

?關(guān)系數(shù)據(jù)模型

?關(guān)系操作

?數(shù)據(jù)庫(kù)設(shè)計(jì)概述

?概念數(shù)據(jù)庫(kù)設(shè)計(jì)

?邏輯數(shù)據(jù)庫(kù)設(shè)計(jì)

?完整性

?數(shù)據(jù)庫(kù)設(shè)計(jì)的其他問(wèn)題

?回顧數(shù)據(jù)庫(kù)設(shè)計(jì)

1.1SQL簡(jiǎn)史及功能特性

與其他編程語(yǔ)言類似,SQL語(yǔ)言也有一個(gè)從簡(jiǎn)單到復(fù)雜的發(fā)展過(guò)程。同時(shí),所提供的

功能也逐步強(qiáng)大。本節(jié)中簡(jiǎn)單介紹一下SQL語(yǔ)言的歷史與功能特性。

1.1.1SQL簡(jiǎn)史

SQL語(yǔ)言的歷史與關(guān)系數(shù)據(jù)庫(kù)的發(fā)展密切聯(lián)系在一起。關(guān)系數(shù)據(jù)庫(kù)的概念是由IBM

的研究員Dr.E.F.Codd提出的,他在1970年6月發(fā)表了一篇題為“大型共享數(shù)據(jù)銀行的關(guān)

系數(shù)據(jù)模型”的論文,在該文中描述了關(guān)于數(shù)據(jù)如何在表中存儲(chǔ)和處理的數(shù)學(xué)理論。70年

代中期,IBMSanJose研究實(shí)驗(yàn)室把SQL作為一種新型關(guān)系數(shù)據(jù)模型的數(shù)據(jù)庫(kù)語(yǔ)言設(shè)計(jì)出

來(lái),其含義是結(jié)構(gòu)化查詢語(yǔ)言(StructedQueryLanguage)。SQL語(yǔ)言不同于C、JAVA等其

他程序設(shè)計(jì)語(yǔ)言,它屬于一種描述性的語(yǔ)言,描述的是檢索、刪除或插入何種數(shù)據(jù),而不

是說(shuō)明如何去執(zhí)行它,SQL的出現(xiàn)使得建立關(guān)系數(shù)據(jù)庫(kù)成為可能。它的正式發(fā)音是

ess-cue-ell(按照AmericanNationalStandardsInstitute),但許多人發(fā)音為sequelo在本書中,

SQL的發(fā)音為sequeL

七十年代后期,IBM準(zhǔn)備開發(fā)一個(gè)關(guān)系數(shù)據(jù)庫(kù)系統(tǒng):SQL/DSRDBMS,其他開發(fā)商也

迅速準(zhǔn)備開發(fā)他們的RDBMSo但是低性能的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)制約了他們的商業(yè)生

存能力。在早期關(guān)系系統(tǒng)中,關(guān)系模型的重要問(wèn)題,“數(shù)學(xué)上的有效描述和直觀的顯示”

沒(méi)有有效的處理方法,導(dǎo)致了大型數(shù)據(jù)庫(kù)管理系統(tǒng)速度慢又難以使用。直到大容量、高速

度的計(jì)算機(jī)出現(xiàn)和開發(fā)了優(yōu)秀的數(shù)據(jù)檢索、數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)訪問(wèn)方法,這些方法有效地支

持了關(guān)系系統(tǒng)的后臺(tái)處理功能,才在一定程度上解決了這個(gè)問(wèn)題。

1981年,IBM發(fā)布了它的第一個(gè)基于SQL的商業(yè)產(chǎn)品SQL/DSo在八十年代早期,

Oracle,RelationalTechnology等其他幾個(gè)開發(fā)商也紛紛發(fā)布了各自的基于SQL的關(guān)系型數(shù)

據(jù)庫(kù)管理系統(tǒng)。到1989年,市場(chǎng)上出現(xiàn)了許多種SQL或類似于SQL的數(shù)據(jù)庫(kù)管理系統(tǒng),

這些系統(tǒng)運(yùn)行在從個(gè)人計(jì)算機(jī)到處理多用戶計(jì)算機(jī)等各種計(jì)算機(jī)上。在市場(chǎng)的推動(dòng)下SQL

得到了普及。同時(shí)IBM公司加快了對(duì)SQL的普及,并把DB2定位為九十年代數(shù)據(jù)管理的

解決方案。

關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)市場(chǎng)的激烈競(jìng)爭(zhēng)導(dǎo)致出現(xiàn)了各種各樣的SQL實(shí)現(xiàn)版本,每一種

版本都代表了開發(fā)商在開發(fā)完整和高效關(guān)系模型表達(dá)語(yǔ)言方面所做的最大努力。1986年美

國(guó)國(guó)家標(biāo)準(zhǔn)化學(xué)會(huì)(AmericanNationalStandardInstitute,ANSI)和國(guó)際標(biāo)準(zhǔn)化組織

(InternationalStandardOrganization,ISO)發(fā)布的ANSI/ISO標(biāo)準(zhǔn)正式確認(rèn)SQL的標(biāo)準(zhǔn)地位,

這是SQL在市場(chǎng)中確定地位最重要的一點(diǎn)。并且在1992年與1999年先后進(jìn)行了修訂,現(xiàn)

在的正式版本是SQL3版本。從九十年代初起,SQL性能便開始穩(wěn)步提高,處理器速度明

顯加快,使SQL成為事務(wù)處理程序的有效工具,隨著網(wǎng)絡(luò)的發(fā)展,SQL成為客戶機(jī)/服務(wù)

器結(jié)構(gòu)的關(guān)鍵部分,通過(guò)網(wǎng)絡(luò)實(shí)現(xiàn)數(shù)據(jù)庫(kù)的連接與使用變得越來(lái)越普遍,現(xiàn)在已經(jīng)可以基

于Web應(yīng)用程序來(lái)實(shí)現(xiàn)遠(yuǎn)程訪問(wèn)數(shù)據(jù)庫(kù)。

1.1.2SQL的功能與特性

SQL是與DBMS進(jìn)行通信的一種語(yǔ)言和工具,將DBMS的組件聯(lián)系在一起??梢詾?/p>

用戶提供強(qiáng)大的功能,使用戶可以方便地進(jìn)行數(shù)據(jù)庫(kù)的管理以及數(shù)據(jù)的操作。通過(guò)控制

DBMS,SQL能提供給用戶如下的功能。

?數(shù)據(jù)定義:SQL能讓用戶自己定義所存儲(chǔ)數(shù)據(jù)的結(jié)構(gòu),以及所存儲(chǔ)數(shù)據(jù)各項(xiàng)之間

的關(guān)系。這樣用戶就可以按自己的需要方便地進(jìn)行數(shù)據(jù)的組織。

?數(shù)據(jù)更新:SQL為用戶和應(yīng)用程序提供了添加、刪除、修改等數(shù)據(jù)更新操作,使

用戶或應(yīng)用程序可以向數(shù)據(jù)庫(kù)中增加新的數(shù)據(jù),刪除舊的數(shù)據(jù)以及修改已有數(shù)據(jù),

有效地支持了數(shù)據(jù)庫(kù)數(shù)據(jù)的更新。

?數(shù)據(jù)查詢:SQL使用戶或應(yīng)用程序可以從數(shù)據(jù)庫(kù)中按照自己的需要查詢數(shù)據(jù)并組

織使用它們。其中SQL不僅支持簡(jiǎn)單條件的檢索操作,而且支持子查詢、查詢的

嵌套、視圖等復(fù)雜的檢索,為用戶和應(yīng)用程序提供了很好的數(shù)據(jù)查詢方法。

?數(shù)據(jù)安全:SQL能對(duì)用戶和應(yīng)用程序訪問(wèn)數(shù)據(jù)、添加數(shù)據(jù)等操作的權(quán)限進(jìn)行限制,

以防止未經(jīng)授權(quán)的訪問(wèn),有效地保護(hù)數(shù)據(jù)庫(kù)的安全。

?數(shù)據(jù)完整性:SQL使用戶可以定義約束規(guī)則,定義的規(guī)則將存在數(shù)據(jù)庫(kù)內(nèi)部,可

以防止因數(shù)據(jù)庫(kù)更新過(guò)程中的意外事件或系統(tǒng)錯(cuò)誤導(dǎo)致的數(shù)據(jù)庫(kù)崩潰。

?數(shù)據(jù)庫(kù)結(jié)構(gòu)的修改:SQL使用戶或應(yīng)用程序可以修改數(shù)據(jù)庫(kù)的結(jié)構(gòu)。

可見,SQL為用戶提供了完整的數(shù)據(jù)庫(kù)操作、安全及維護(hù)的各種操作,為用戶提供了

很好的可操作性。

SQL是一種易于理解的語(yǔ)言,同時(shí)又是綜合管理數(shù)據(jù)的工具。作為現(xiàn)在數(shù)據(jù)庫(kù)市場(chǎng)普

遍應(yīng)用的語(yǔ)言,它具有以下一些特性。

?確定的標(biāo)準(zhǔn):美國(guó)國(guó)家標(biāo)準(zhǔn)化學(xué)會(huì)(ANSI)和國(guó)際標(biāo)準(zhǔn)化組織(ISO)在1986年制訂

了SQL的標(biāo)準(zhǔn),并在1989年、1992年與1999年進(jìn)行了3次擴(kuò)展,使得所有生產(chǎn)

商都可以按照統(tǒng)一標(biāo)準(zhǔn)實(shí)現(xiàn)對(duì)SQL的支持,SQL語(yǔ)言在數(shù)據(jù)庫(kù)廠家之間具有廣泛

的適用性。雖然在不同廠家之間SQL語(yǔ)言的實(shí)現(xiàn)方式存在某些差異,但是通常情

況下無(wú)論選擇何種數(shù)據(jù)庫(kù)平臺(tái),SQL語(yǔ)言都保持相同。這就是SQL的最大優(yōu)點(diǎn)。

?軟件提供商的獨(dú)立性:現(xiàn)在所有主流的DBMS軟件提供商均提供對(duì)SQL的支持,

SQL標(biāo)準(zhǔn)的確立使不同的生產(chǎn)商可以獨(dú)立地進(jìn)行DBMS軟件的設(shè)計(jì),一個(gè)基于

SQL的數(shù)據(jù)庫(kù)和使用該數(shù)據(jù)庫(kù)的應(yīng)用程序能很方便地從一種DBMS系統(tǒng)轉(zhuǎn)向另一

種DBMS系統(tǒng)。查詢、報(bào)表生成器等數(shù)據(jù)庫(kù)工具能在許多不同類型的SQL數(shù)據(jù)庫(kù)

中使用。

?跨計(jì)算機(jī)系統(tǒng)的移植性:基于SQL的數(shù)據(jù)庫(kù)產(chǎn)品能夠在大型計(jì)算機(jī)、個(gè)人計(jì)算機(jī)

等各種計(jì)算機(jī)上運(yùn)行,也支持在不同的操作系統(tǒng)上運(yùn)行,同時(shí)也可以通過(guò)網(wǎng)絡(luò)進(jìn)行

訪問(wèn)和管理。

?各大公司的支持:SQL最初由IBM研究人員發(fā)明,已經(jīng)成為IBM數(shù)據(jù)庫(kù)產(chǎn)品DB2

的戰(zhàn)略性產(chǎn)品,同時(shí)也得到了Microsoft公司、Oracle公司等數(shù)據(jù)庫(kù)市場(chǎng)各大軟件

公司的支持,這就保證了SQL今后的發(fā)展。

?程序化數(shù)據(jù)庫(kù)訪問(wèn):SQL語(yǔ)句既能用于交互式訪問(wèn)也能用于程序化訪問(wèn),這樣應(yīng)

用程序就具有很大的靈活性,可以將這兩種方式結(jié)合起來(lái)設(shè)計(jì)更好的程序。

?應(yīng)用程序傳送的支持:在數(shù)據(jù)庫(kù)發(fā)展的最初時(shí)期,SQL支持基于主機(jī)的應(yīng)用程序;

隨著計(jì)算機(jī)技術(shù)的發(fā)展,客戶機(jī)/服務(wù)器體系結(jié)構(gòu)隨著PC革命的到來(lái)應(yīng)運(yùn)而生,

SQL作為優(yōu)化用戶相互作用的前端計(jì)算機(jī)系統(tǒng)和專為數(shù)據(jù)庫(kù)管理設(shè)計(jì)的后端系統(tǒng)

的橋梁,使每個(gè)系統(tǒng)處于最佳工作狀態(tài);隨著Internet和WWW的迅速發(fā)展,SQL

作為Internet數(shù)據(jù)訪問(wèn)標(biāo)準(zhǔn),在應(yīng)用中充當(dāng)了新的角色,建立了以SQL作為應(yīng)用程

序和數(shù)據(jù)庫(kù)連接的標(biāo)準(zhǔn):最新出現(xiàn)的Java也己經(jīng)引入了SQL,SQL在最新的編程

語(yǔ)言中也有了有效的應(yīng)用。

?數(shù)據(jù)的多視化:可以通過(guò)使用SQL產(chǎn)生不同的報(bào)表和視圖將數(shù)據(jù)庫(kù)中的數(shù)據(jù)按用

戶所需的角度顯示在用戶面前,供用戶使用,具有很大的靈活性。同時(shí),SQL的

視圖功能也能提高數(shù)據(jù)庫(kù)的安全性并且能滿足特定用戶的需要。

?可擴(kuò)展性和對(duì)象:面向?qū)ο缶幊碳夹g(shù)的興起,數(shù)據(jù)庫(kù)市場(chǎng)也面臨了對(duì)象技術(shù)的

入,各個(gè)SQL數(shù)據(jù)庫(kù)生產(chǎn)商也正在擴(kuò)展和提高SQL對(duì)對(duì)象的支持。

SQL的以上特性,使得SQL在個(gè)人計(jì)算機(jī)、小型計(jì)算機(jī)和大型計(jì)算機(jī)上作為管理數(shù)

據(jù)的標(biāo)準(zhǔn)工具出現(xiàn),占據(jù)了大部分的市場(chǎng)。

1.1.3SQL3簡(jiǎn)介

SQL標(biāo)準(zhǔn)是為了在各個(gè)開發(fā)商之間達(dá)成高度的一致性來(lái)達(dá)到提高市場(chǎng)上所有數(shù)據(jù)庫(kù)

產(chǎn)品的通用性而制定的一個(gè)國(guó)際標(biāo)準(zhǔn),每次該標(biāo)準(zhǔn)的更新都為SQL添加了新的特征和新的

命令與功能。最新的ANSI/ISO的SQL-3即SQL99標(biāo)準(zhǔn)的特色就是提供了一系列可以處理

面向?qū)ο髷?shù)據(jù)類型的擴(kuò)展功能。

可以通過(guò)簡(jiǎn)單地比較SQL-2和SQL-3的語(yǔ)句種類來(lái)感受SQL-3的新特色。在SQL-2

標(biāo)準(zhǔn)中,SQL語(yǔ)句可以大體分為:數(shù)據(jù)定義語(yǔ)句(DataDefinitionLanguage,DDL)、數(shù)據(jù)操

作語(yǔ)句(DataManipulationLanguage,DML)以及數(shù)據(jù)控制語(yǔ)句(DataControlLanguage,

DCL),其中,DDL包括了處理數(shù)據(jù)庫(kù)元素的命令,如CREATE和DROP;DML提供了

特定的數(shù)據(jù)操作命令,如SELECT、INSERT、UPDATEDELETE;而DCL則包括了處

理權(quán)限(Permission)的命令,如GRANT利REVOKE。

而SQL-3標(biāo)準(zhǔn)提出了一種新的語(yǔ)句分類方式,將它所現(xiàn)有的SQL語(yǔ)句分為7種核心

的類型,而這些SQL-3標(biāo)準(zhǔn)的語(yǔ)句類試圖使每一個(gè)類型和那些語(yǔ)句能更加準(zhǔn)確并且更有邏

輯性地結(jié)合在一起,在某種程度上也更易于理解。這樣一套新的語(yǔ)句類型允許將來(lái)新產(chǎn)生

的且不適于任何己有類型的語(yǔ)句能夠合理地進(jìn)行單獨(dú)分類,因此這種做法非常有益于SQL

將來(lái)的發(fā)展。SQL-3包含的語(yǔ)句類如下。

?連接語(yǔ)句:使用該類語(yǔ)句可以開始和結(jié)束一個(gè)客戶連接,如CONNECT語(yǔ)句和

DISCONNECT語(yǔ)句。

?控制語(yǔ)句:該類語(yǔ)句用來(lái)控制一組SQL語(yǔ)句的執(zhí)行,如CALL語(yǔ)句和RETURN

語(yǔ)句。

?數(shù)據(jù)語(yǔ)句:使用該類語(yǔ)句可以直接對(duì)數(shù)據(jù)產(chǎn)生持續(xù)的作用,如SELECT語(yǔ)句、

INSERT語(yǔ)句、UPDATE語(yǔ)句和DELETE語(yǔ)句。

?診斷語(yǔ)句:該類語(yǔ)句可以提供診斷信息并指出異?;蝈e(cuò)誤,如GETDIAGNOSTIC

語(yǔ)句。

?模式語(yǔ)句:該類語(yǔ)句可以操作數(shù)據(jù)庫(kù)模式及其內(nèi)部的元素,如ALTER語(yǔ)句、

CREATE語(yǔ)句和DROP語(yǔ)句。

?會(huì)話語(yǔ)句:使用該類語(yǔ)句可以在一次會(huì)話中控制默認(rèn)操作和其他的參數(shù),如SET

語(yǔ)句。

?事務(wù)語(yǔ)句:該語(yǔ)句用來(lái)設(shè)置一個(gè)事務(wù)處理的開始點(diǎn)和結(jié)束點(diǎn),如COMMIT語(yǔ)句

和ROLLBACK語(yǔ)句。

從SQL-3標(biāo)準(zhǔn)的這些語(yǔ)句類可以明顯看出,與以前的SQL標(biāo)準(zhǔn)相比,SQL-3標(biāo)準(zhǔn)更

適合對(duì)面向?qū)ο蟮臄?shù)據(jù)類型進(jìn)行處理。

除了上述的語(yǔ)句分類方式的變化,使新的方式更適合處理面向?qū)ο蟮臄?shù)據(jù),SQL-3標(biāo)

準(zhǔn)還增加了一些新的數(shù)據(jù)庫(kù)元素以增強(qiáng)SQL對(duì)面向?qū)ο髷?shù)據(jù)類型的處理。這些新增數(shù)據(jù)庫(kù)

元素有角色、觸發(fā)器和用戶定義類型。角色是指定的一種或一組權(quán)限,是一個(gè)單獨(dú)的成分,

是一個(gè)對(duì)象。角色具有的分組權(quán)限功能為數(shù)據(jù)庫(kù)系統(tǒng)的安全性管理提供了許多便利的條件;

觸發(fā)器是指當(dāng)在指定的表上發(fā)生一個(gè)特定的操作事件時(shí),將被調(diào)用的一個(gè)程序段;在以前

的SQL標(biāo)準(zhǔn)中,所有的數(shù)據(jù)類型都是預(yù)定義的,但是,在SQL-3標(biāo)準(zhǔn)中新增的CREATE

TYPE、ALTERTYPE和DROPTYPE語(yǔ)句應(yīng)用了對(duì)象/關(guān)系概念,可以使用它們來(lái)進(jìn)行用

戶定義類型(UDT)的操作。這3種新的數(shù)據(jù)元素將在本書的12.1.3小節(jié)中予以介紹。

之前簡(jiǎn)單講述了SQL-3標(biāo)準(zhǔn)提供的一系列可以處理面向?qū)ο髷?shù)據(jù)類型的擴(kuò)展功能的

特色,下面來(lái)了解一下SQL-3相對(duì)SQL-2的最重要改變一進(jìn)一步闡述了SQL-2的一致

性級(jí)別(levelofconformance)。SQL-2標(biāo)準(zhǔn)定義了3類級(jí)別:Entry(入門)、Intermediate(中等)

和Full(完全),此標(biāo)準(zhǔn)的每一個(gè)較高的級(jí)別都包括了其較低一致性級(jí)別的所有特征,而開

發(fā)商必須達(dá)到Entry級(jí)別才可以聲明其產(chǎn)品符合ANSI/SQL標(biāo)準(zhǔn)。而SQL-3修訂了關(guān)于一

致性的基本級(jí)別,不再使用SQL-2的3個(gè)級(jí)別,而使用核心SQL-3標(biāo)準(zhǔn)(CoreSQL-3)、增

強(qiáng)SQL-3標(biāo)準(zhǔn)(EnhancedSQL-3)。其中,CoreSQL-3標(biāo)準(zhǔn)包括SQL-2中的Entry級(jí)的特征

集和其他級(jí)別中的一些特征以及其他一些全新的特征;而EnhancedSQL-3則對(duì)應(yīng)于SQL-2

的Intermediate和Full級(jí)的部分特征以及其他一些全新的特征。ANSI/SQL則要求開發(fā)商必

須實(shí)現(xiàn)SQL-3的一致性級(jí)別的CoreSQL-3級(jí),只要是支持CoreSQL-3一致性級(jí)別的數(shù)據(jù)

庫(kù)產(chǎn)品再加上SQL-39個(gè)附加特征包中的任意一個(gè)或多個(gè)就可以說(shuō)是滿足增強(qiáng)SQL-3標(biāo)

準(zhǔn)。因?yàn)橐恢滦约?jí)別只與開發(fā)商密切相關(guān),不屬于本書實(shí)用教程的討論范圍,所以書中不

進(jìn)行詳細(xì)討論。

除了上面討論的SQL-3標(biāo)準(zhǔn)的特色,新的語(yǔ)句分類形式,新增的數(shù)據(jù)庫(kù)元素和進(jìn)一步

闡述的SQL一致性級(jí)別以外,SQL-3還在多個(gè)細(xì)節(jié)上對(duì)SQL-2進(jìn)行了改進(jìn)。本書后面的

章節(jié)中所有的內(nèi)容都是基于SQL-3標(biāo)準(zhǔn)的,為了說(shuō)明SQL-3與舊標(biāo)準(zhǔn)的不同,在這先舉幾

個(gè)不同的例子,如下。

(1)在SQL-3中,空值NULL的使用方式不同于舊標(biāo)準(zhǔn)。在SQL-3中,約束檢驗(yàn)時(shí),

NULL的值是UNKNOWN而不是舊標(biāo)準(zhǔn)的TRUE或FALSE。

(2)在SQL-2中,基于多表連接的視圖和含有集合算符的查詢的視圖都不能作為

INSERT.UPDATE和DELETE語(yǔ)句的操作對(duì)象,但是在SQL-3中可以對(duì)這幾類視圖進(jìn)行

有條件的更新操作,例如可以在兩個(gè)表的UNIONJOIN結(jié)果中進(jìn)行這些數(shù)據(jù)的更新操作。

舉一個(gè)例子,假設(shè)有兩個(gè)表,第一個(gè)表有5個(gè)字段,第二個(gè)表有6個(gè)字段,在它們的UNION

JOIN結(jié)果中就有11歹下面進(jìn)行如下操作:

?INSERT一個(gè)新記錄行

如果新行的前5列為空,后6列非空,則該操作去掉前面5個(gè)NULL,將剩余的數(shù)據(jù)

存入第二個(gè)表中。

如果新行的前5列非空,后6列為空,則該操作去掉后面6個(gè)NULL,將剩余的數(shù)據(jù)

存入第一個(gè)表中。

新行的前5列非空,后6列也有非空值,則該操作不能進(jìn)行。

?UPDATE操作

如果需要更新的行來(lái)自第一個(gè)表(后6列為空值),則該操作修改第一個(gè)表中的對(duì)應(yīng)行

的數(shù)據(jù)。

如果需要更新的行來(lái)自第二個(gè)表(前5列為空值),則該操作修改第二個(gè)表中的對(duì)應(yīng)行

的數(shù)據(jù)。

新行的前5列非空,后6列也有非空值,則該操作不能進(jìn)行。

?DELETE操作

如果需要?jiǎng)h除的行來(lái)自第一個(gè)表(后6列為空值),則該操作刪除第一個(gè)表中的對(duì)應(yīng)行。

如果需要?jiǎng)h除的行來(lái)自第二個(gè)表(前5列為空值),則該操作刪除第二個(gè)表中的對(duì)應(yīng)行。

新行的前5列非空,后6列也有非空值,則該操作不能進(jìn)行。

(3)下面舉兩條語(yǔ)句,在SQL-2中不合法,但是在SQL-3中是合法的。

SELECT語(yǔ)句中使用的ORDERBY子句后的表列存在,但是不在SELECT清單中:

SELECTname

FROMEmployee

ORDERBYid

在SELECT清單和ORDERBY子句中同時(shí)使用未命名的表達(dá)式:

SELECTsalary*12

FROMEmployee

ORDERBYsalary*12

1.2關(guān)系數(shù)據(jù)模型

關(guān)系數(shù)據(jù)模型的設(shè)計(jì)是關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)中重要也是基礎(chǔ)的一步。關(guān)系數(shù)據(jù)模型的設(shè)計(jì)

主要包含兩個(gè)方面:數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)以及鍵與外部鍵的定義。本節(jié)將介紹這兩個(gè)方面設(shè)計(jì)

的定義與應(yīng)用。

1.2.1數(shù)據(jù)結(jié)構(gòu)

每一個(gè)系統(tǒng)都有其自己的數(shù)據(jù)結(jié)構(gòu)。關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)組織并構(gòu)造數(shù)據(jù),以使數(shù)據(jù)

能被用戶或應(yīng)用程序檢索與更新。由DBMS提供的數(shù)據(jù)結(jié)構(gòu)和訪問(wèn)方法被稱為DBMS的

數(shù)據(jù)模型。數(shù)據(jù)模型決定了DBMS的性能及其適應(yīng)的范圍。

在關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)中,關(guān)系是關(guān)系數(shù)據(jù)模型的核心。關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)中最主要的數(shù)據(jù)

結(jié)構(gòu)就是關(guān)系。在實(shí)際表示中,關(guān)系可以用一個(gè)表來(lái)直觀地表示,通常表是以一種矩形數(shù)

據(jù)行/列的形式表示。表的每一列表示關(guān)系的一個(gè)屬性,每列的名字即為一個(gè)屬性名,每一

行表示一個(gè)記錄代表一個(gè)物理實(shí)體。關(guān)系數(shù)據(jù)庫(kù)中,所有的數(shù)據(jù)都是通過(guò)表來(lái)進(jìn)行存儲(chǔ)的,

可以說(shuō)如果沒(méi)有表數(shù)據(jù)就無(wú)法進(jìn)行存儲(chǔ)和表示。

表1-1給出了一個(gè)關(guān)系模式”工作人員(名字,職員ID,生日,性別,工資)”的實(shí)例。

表的每一行表示一個(gè)物理實(shí)體一工作人員。表中有6行,代表6個(gè)工作人員。例如,第

一行記錄的是工作人員“林志千”的信息。工作人員表的每一列代表一個(gè)工作人員的一個(gè)

數(shù)據(jù)項(xiàng),記錄工作人員的一部分信息。例如,職員ID列用來(lái)存儲(chǔ)每個(gè)工作人員的職員ID,

生日列用來(lái)存儲(chǔ)每個(gè)工作人員的生日。第一行的職員ID列記錄了工作人員“林志千”的

職員ID1001,生日列記錄了工作人員“林志千”的生日1962年11月25號(hào)。第二行記錄

的是工作人員“李明”的信息。第二行的職員ID列記錄了工作人員“李明”的職員ID1002,

生日列記錄了工作人員“李明”的生日1976年5月23號(hào)。

表1-1關(guān)系模式實(shí)例

姓名職員ID生日性另IJ工資

林志千10011962-11-25男6000.00

李明10021976-05-23男5000.00

李大平10031978-12-20男3000.00

林國(guó)榮10041977-06-14男4000.00

劉燕20021971-12-26女3000.00

魏箸30031977-05-17女4000.00

關(guān)系數(shù)據(jù)模型中數(shù)據(jù)結(jié)構(gòu)的核心規(guī)則是:所有數(shù)據(jù)都必須在表中所有關(guān)系模型中呈現(xiàn)

給用戶。它提供了數(shù)據(jù)表達(dá)和存儲(chǔ)之間的一級(jí)抽象概念,使數(shù)據(jù)具有獨(dú)立性,無(wú)論是用

哪種關(guān)系數(shù)據(jù)庫(kù)產(chǎn)品,不論其采用的是什么物理存儲(chǔ)方式,查詢和處理數(shù)據(jù)的方式都是

相同的。

具體來(lái)說(shuō),數(shù)據(jù)的獨(dú)立性表現(xiàn)在兩個(gè)重要的方面:物理獨(dú)立性和邏輯獨(dú)立性。

各開發(fā)商之間,甚至同一開發(fā)商的不同版本之間的物理存儲(chǔ)體系結(jié)構(gòu)都是不相同的。

物理獨(dú)立性是指用戶所看到的數(shù)據(jù)與數(shù)據(jù)的物理存儲(chǔ)是完全獨(dú)立的,即可以改變或重新安

排物理存儲(chǔ)而不會(huì)影響到數(shù)據(jù)的使用和邏輯數(shù)據(jù)庫(kù)的設(shè)計(jì)(邏輯數(shù)據(jù)庫(kù)的設(shè)計(jì)將在1.6節(jié)中

詳細(xì)介紹)。

邏輯獨(dú)立性指的是,可以改變表、行和列之間的相互關(guān)系,即對(duì)數(shù)據(jù)結(jié)構(gòu)進(jìn)行修改而

不會(huì)削弱應(yīng)用程序特別是查詢的功能。

1.2.2鍵與外部鍵

每個(gè)表表示的是現(xiàn)實(shí)世界中的數(shù)據(jù)集合,表中有多個(gè)列名,需要一個(gè)或一組屬性來(lái)表

示表中元組的惟一性,接下來(lái)將介紹兩個(gè)基本概念。

?候選鍵:包含獨(dú)立的標(biāo)識(shí)數(shù)據(jù)庫(kù)中每一行值的任意一個(gè)列或一組列。

?主鍵:獨(dú)立的標(biāo)識(shí)存儲(chǔ)在表中的每個(gè)記錄或潛在記錄的一組列(一組中可能只包含

一個(gè)值)。

一個(gè)表中可能具有多個(gè)候選鍵,這時(shí)可以選擇一個(gè)作為該表的主鍵,即主鍵是從候選

鍵中選出,剩下的候選鍵稱為備用鍵。候選鍵中的屬性稱為鍵屬性,其他屬性則稱為非鍵

屬性。主鍵中的屬性稱為主屬性,其他屬性則稱為非主屬性。

判斷一組值是否具有候選鍵的資格有兩條嚴(yán)格的規(guī)則:

?表中任意兩個(gè)記錄在他們的由候選鍵組成的列的組合中都不具有相同的值,即惟一

性規(guī)則(uniquenessproperty)?

?作為候選鍵的列的組合中,沒(méi)有一個(gè)列的子集表現(xiàn)出惟一性,即不可簡(jiǎn)化性規(guī)則

(irreducabilityproperty)?

例如,在表1-1中可以看列組{姓名,職員ID,生日}和列{職員ID},二者均可獨(dú)立地

標(biāo)識(shí)表中的每一行,都表現(xiàn)出惟一性;但是列{職員ID}顯然是列組{姓名,職員ID,生日}

的子集,即列組中的子集{職員ID}表現(xiàn)出惟一性,所以列組{姓名,職員ID,生日}不滿

足不可簡(jiǎn)化性,因此列組{姓名,職員ID,生日}不是候選鍵。在表“工作人員(姓名,職

員ID,生日,住址,性別)”中,由于生日和姓名都有可能重復(fù),所以{職員ID}是惟一的

一個(gè)主鍵,“職員ID”是這個(gè)主鍵的主屬性,表中其他的屬性稱為非主屬性。

注意:

鍵必須滿足惟一性和不可簡(jiǎn)化性規(guī)則!

下面介紹一下外部鍵的概念,假設(shè)X是表A中的一個(gè)屬性集合,若X同時(shí)是另一個(gè)

表B的主屬性,則稱X是表A關(guān)于表B的外部鍵。

例如,與表“工作人員(姓名,職員ID,生日,住址,性別,所屬部門號(hào))”相應(yīng)的有

一個(gè)表“部門(部門名稱,部門號(hào),部門所在地)”,在表“部門(部門名稱,部門號(hào),部門所

在地)”中一般來(lái)說(shuō)一家公司內(nèi)各部門的部門號(hào)都是惟一的,因此可以把“部門號(hào)”作為一

個(gè)主鍵,同時(shí)“部門號(hào)”是表“工作人員(姓名,職員ID,生日,住址,性別,所屬部門

號(hào))”中的一個(gè)屬性,所以“部門號(hào)”是表“工作人員(姓名,職員ID,生日,住址,性另I」,

所屬部門號(hào))”關(guān)于表“部門(部門名稱,部門號(hào),部門所在地)”的外部鍵。

1.3關(guān)系操作

對(duì)所有的關(guān)系數(shù)據(jù)庫(kù)來(lái)說(shuō),有大量的操作方式可以使用,這些實(shí)用的操作方式能讓用

戶看到所需要的數(shù)據(jù)。

由前面介紹的物理獨(dú)立性和數(shù)據(jù)獨(dú)立性可以讓用戶不必?fù)?dān)心數(shù)據(jù)的具體存儲(chǔ)位置,也

不必關(guān)心如何才能找到所需的數(shù)據(jù)。這些,數(shù)據(jù)庫(kù)管理系統(tǒng)可以幫用戶完成。SQL允許不

指定任何關(guān)于數(shù)據(jù)存儲(chǔ)位置和尋找方式的細(xì)節(jié)就可以表示需要的內(nèi)容。

為了便于本節(jié)的介紹,下面就先給出關(guān)于SELECT語(yǔ)句的簡(jiǎn)單語(yǔ)法:

SELECTselectjist

FROMtablejist

WHEREsearch_conditions

在SELECT子句中指定要返回的表的屬性,在FROM子句中指定從哪個(gè)表中檢索數(shù)

據(jù),WHERE子句則指定檢索條件。

下面介紹關(guān)系數(shù)據(jù)庫(kù)中定義的3個(gè)具體的操作方式。

注意:

現(xiàn)在不必在意SQL語(yǔ)法的使用,關(guān)鍵是要理解所述操作的概念。

1.3.1選擇

選擇操作是從表中返回特定行的集合。選擇操作也可以稱為限制,因?yàn)樗拗屏朔祷?/p>

行集合的標(biāo)準(zhǔn)。限制條件只適合于被返回的行,不適合包括在查詢結(jié)果中的列。要指定限

制條件,可以將條件寫在WHERE子句中。

例如,如果只需要返回有關(guān)于部門號(hào)小于5的部門的信息,可以使用下面的語(yǔ)句:

SELECT*

FROMDepartment

WHEREdnumber<5

下面是選擇結(jié)果:

Results

dnumberdnamemgridmgrstrdate

1開發(fā)部1(X)12001-11-3

2市場(chǎng)部20012002-3-1

3人事部30012001-4-5

4技術(shù)部40012001-1-15

[4rows]

1.3.2投影

投影操作限制了查詢返回的列,允許用戶列出所要查看的列。投影操作只允許返回表

中各列的具體的子集,是通過(guò)將具體的列清單傳遞給SELECT語(yǔ)句來(lái)實(shí)現(xiàn)的,即在SELECT

列表中列出需要查看的列的名稱。

例如,要查看部門的部門號(hào)、部門負(fù)責(zé)人ID號(hào)、部門負(fù)責(zé)人開始工作時(shí)間這3個(gè)列

的信息,可以使用投影操作:

SELECTdname,mgrid,mgrstrdatc

FROMDepartment

下面是投影結(jié)果:

Results

dnumbermgridmgrstrdate

110012001-11-3

220012002-3-1

330012001-4-5

440012001-1-15

550012002-6-5

66(X)12002-3-10

[6rows]

用戶可以同時(shí)使用選擇和投影來(lái)查詢所要查看的表的列和行。選擇用來(lái)限制返回的記

錄數(shù)目,而投影用來(lái)列出要查看的具體的字段。

例如,只想知道部門號(hào)小于5的部門的負(fù)責(zé)人的職員ID號(hào)和開始工作時(shí)間,可以同

時(shí)使用選擇和投影操作:

SELECTmgrid,mgrstrdate

FROMDepartment

WHEREdnumber<5

Results

mgridmgrstrdate

10012001-11-3

20012(X)2-3-l

30012001-4-5

40012001-1-15

[4rows]

1.3.3連接

連接操作是結(jié)合多個(gè)表的關(guān)系操作,為了查詢特定數(shù)據(jù)而將兩個(gè)或更多個(gè)表連接起來(lái)

形成新的報(bào)表或視圖,以便用戶能夠比較和對(duì)比數(shù)據(jù)庫(kù)不同表中的數(shù)據(jù),為用戶提供了更

多的功能和靈活性??梢酝ㄟ^(guò)連接來(lái)發(fā)現(xiàn)數(shù)據(jù)之間的關(guān)系,找出數(shù)據(jù)之間的聯(lián)系,而不僅

僅局限于數(shù)據(jù)庫(kù)中已有的一些關(guān)系。

連接操作是通過(guò)在WHERE子句中設(shè)定特定的條件,或者使用JOIN關(guān)鍵字通過(guò)表之

間相關(guān)的列來(lái)連接不同表中的數(shù)據(jù),用戶可以在其中設(shè)定想指定的條件。詳細(xì)的連接操作

的實(shí)現(xiàn)將在第7章中進(jìn)行介紹。

例如,想知道各部門的部門負(fù)責(zé)人的具體情況,每個(gè)工作人員的情況都存儲(chǔ)在

Employee表中,Employee表中也包含了工作人員的職員ID號(hào),但是誰(shuí)是部門負(fù)責(zé)人并沒(méi)

有記錄在Employee表中,而是記錄在Department表中,如圖1-1所示。

圖1-1在Employee表和Department表中的歹U

在Employee表中的dno就是工作人員所在部門號(hào),而Department表中也記錄了部門

的部門號(hào)dnumber,所以可以用連接這兩個(gè)表來(lái)實(shí)現(xiàn)用戶想實(shí)現(xiàn)的操作,如圖1?2所示。

圖1-2在Employee表和D叩artment表中的共享列

由于共享列的存在,可以使用下面的語(yǔ)句來(lái)實(shí)現(xiàn)上面的連接操作:

SELECTname,sex,id,salary,dno

FROMEmployee,Department

WHERE=er

FROM子句表示要連接的兩個(gè)表,WHERE子句指明這些表中的行在兩個(gè)表中部門號(hào)

相等時(shí)進(jìn)行連接。

下面是連接結(jié)果:

Results

namesexidsalarydno

林志千男10016000.001

陳廣海男20015000.002

張宇男30015000.003

張峰男40017000.004

李志深男50015000.005

魏成男60015000.006

[6rows]

讀者可能有疑問(wèn),為什么不首先將這些列放置在同一個(gè)表中而要使用連接操作呢?這

是因?yàn)橐恢滦裕醋钚∪哂嘈裕?、方便性及性能的要求,表中的列?shù)必須有限制。在下面的

章節(jié)中將介紹表中列的確定準(zhǔn)則。

前面說(shuō)過(guò)可以將選擇和投影操作結(jié)合起來(lái)使用。同樣,也可以將選擇、投影和連接操

作結(jié)合起來(lái)使用。

例如,只想知道部門號(hào)小于5的部門負(fù)責(zé)人的名字和工資,就必須將3個(gè)操作結(jié)合起

來(lái),可以使用下面的語(yǔ)句:

SELECTname,salary

FROMEmployee,Department

WHERE=er

AND<5

下面是連接結(jié)果:

Results

namesalary

林志千6000.00

陳廣海5000.00

張宇5000.00

張峰7000.00

[4rows]

1.4數(shù)據(jù)庫(kù)設(shè)計(jì)概述

在詳細(xì)介紹如何進(jìn)行數(shù)據(jù)庫(kù)的設(shè)計(jì)之前,我們先介紹一下有關(guān)數(shù)據(jù)庫(kù)模型準(zhǔn)則及數(shù)據(jù)

庫(kù)設(shè)計(jì)過(guò)程,使讀者對(duì)數(shù)據(jù)庫(kù)設(shè)計(jì)有一個(gè)大致的了解。

1.4.1數(shù)據(jù)庫(kù)模型準(zhǔn)則

E.F.Codd博士于1970年在一篇名為“一種存儲(chǔ)大型共享數(shù)據(jù)的關(guān)系模型”的歷史性

論文中提出了數(shù)據(jù)庫(kù)模型定義的12條準(zhǔn)則。

?信息準(zhǔn)則:關(guān)系型數(shù)據(jù)庫(kù)(包括表和列名)中所有的信息都必須清楚地用表中的數(shù)

值來(lái)表示。

?確保訪問(wèn)準(zhǔn)則:必須保證關(guān)系數(shù)據(jù)庫(kù)中的每一個(gè)數(shù)值都可用表名、主鍵和列名的

組合來(lái)訪問(wèn)。

?空值準(zhǔn)則:DBMS對(duì)空值(表示未知或不可使用數(shù)據(jù),不同于其他任何一種數(shù)據(jù)類

型,如字符串、數(shù)字等數(shù)據(jù)類型)應(yīng)提供系統(tǒng)支持。空值與默認(rèn)值不同,它獨(dú)立于

任何數(shù)據(jù)類型。

?數(shù)據(jù)字典準(zhǔn)則:應(yīng)支持主動(dòng)的、在線的關(guān)系型數(shù)據(jù)字典。在邏輯上,數(shù)據(jù)庫(kù)的描

述及其內(nèi)容都被表示為表的形式,并能用數(shù)據(jù)庫(kù)語(yǔ)言進(jìn)行查詢。

?廣泛的數(shù)據(jù)子語(yǔ)言準(zhǔn)則:具有統(tǒng)一的數(shù)據(jù)子語(yǔ)言,同時(shí)至少有一種支持語(yǔ)言,該

語(yǔ)言應(yīng)具有嚴(yán)格、統(tǒng)一的語(yǔ)法格式,而且必須支持?jǐn)?shù)據(jù)定義、視圖定義、數(shù)據(jù)操作、

完整性規(guī)則、授權(quán)和事務(wù)處理。

?視圖更新準(zhǔn)則:所有理論上可更新的視圖,在實(shí)際操作中也可以被系統(tǒng)更新。

?集合準(zhǔn)則:DBMS應(yīng)該不僅僅支持集合級(jí)上的檢索,而且支持集合級(jí)上的插入操

作、更新操作與刪除操作。

?物理數(shù)據(jù)準(zhǔn)則:物理數(shù)據(jù)必須具有獨(dú)立性,即當(dāng)數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)或數(shù)據(jù)的物理存

取方法改變時(shí),應(yīng)用程序和其他特殊程序在邏輯上應(yīng)保持不受影響。

?邏輯數(shù)據(jù)準(zhǔn)則:邏輯數(shù)據(jù)應(yīng)具有獨(dú)立性,即當(dāng)表的結(jié)構(gòu)改變時(shí),應(yīng)用程序和其他

特殊程序應(yīng)盡可能地保持在邏輯上不受影響。

?數(shù)據(jù)完整性準(zhǔn)則:數(shù)據(jù)庫(kù)語(yǔ)言必須能夠定義完整性規(guī)則,這些規(guī)則必須存儲(chǔ)在聯(lián)

機(jī)數(shù)據(jù)字典中,不能被忽略。

?分布準(zhǔn)則:應(yīng)支持分布的獨(dú)立性,當(dāng)首次引入分布式數(shù)據(jù)或數(shù)據(jù)重新分布時(shí),應(yīng)

用程序和其他特殊程序在邏輯上應(yīng)不受影響。

?無(wú)損害準(zhǔn)則:絕不能發(fā)生用一種低級(jí)的語(yǔ)言繞過(guò)數(shù)據(jù)庫(kù)語(yǔ)言定義的完整性規(guī)則的

事件。

在實(shí)現(xiàn)關(guān)系數(shù)據(jù)庫(kù)模型時(shí)必須滿足上述12條標(biāo)準(zhǔn)。

準(zhǔn)則一基本上是有關(guān)數(shù)據(jù)庫(kù)信息的定義。

準(zhǔn)則二強(qiáng)調(diào)表中主鍵的重要性,要求能通過(guò)表名正確訪問(wèn)表,通過(guò)列名訪問(wèn)列,而主

鍵值能區(qū)分表中的行。

準(zhǔn)則三強(qiáng)調(diào)空值的處理。

準(zhǔn)則四要求數(shù)據(jù)庫(kù)能自我描述,即數(shù)據(jù)庫(kù)應(yīng)該包含一定的系統(tǒng)表(數(shù)據(jù)字典),系統(tǒng)表

可以描述數(shù)據(jù)庫(kù)自身的結(jié)構(gòu)。

準(zhǔn)則五要求數(shù)據(jù)庫(kù)支持關(guān)系數(shù)據(jù)語(yǔ)言,如SQL.通過(guò)SQL語(yǔ)言實(shí)現(xiàn)DBMS要求的數(shù)

據(jù)庫(kù)的創(chuàng)建、數(shù)據(jù)的輸入與更新等。

準(zhǔn)則六支持視圖的使用,在實(shí)際使用過(guò)程中,視圖提供了很大的靈活性,可以用來(lái)方

便地完成特殊功能。

準(zhǔn)則七強(qiáng)調(diào)對(duì)集合的支持,能進(jìn)行集合運(yùn)算:交、并、差等。

準(zhǔn)則八與準(zhǔn)則九強(qiáng)調(diào)了應(yīng)用程序與物理數(shù)據(jù)、邏輯數(shù)據(jù)之間的獨(dú)立性,以保證低層數(shù)

據(jù)庫(kù)結(jié)構(gòu)發(fā)生改變時(shí),不會(huì)影響應(yīng)用程序?qū)?shù)據(jù)的操作。

準(zhǔn)則十強(qiáng)調(diào)數(shù)據(jù)庫(kù)的完整性,要求保證添加和修改數(shù)據(jù)時(shí)確保數(shù)據(jù)及數(shù)據(jù)之間的正確性。

準(zhǔn)則十一要求能對(duì)分布數(shù)據(jù)進(jìn)行處理。

準(zhǔn)則十二限制了其他訪問(wèn)數(shù)據(jù)庫(kù)的方法,以保證數(shù)據(jù)庫(kù)結(jié)構(gòu)不受破壞。

1.4.2數(shù)據(jù)庫(kù)設(shè)計(jì)過(guò)程

數(shù)據(jù)庫(kù)的設(shè)計(jì)中有許許多多需要考慮的因素,如數(shù)據(jù)庫(kù)的背景、應(yīng)用環(huán)境等方面都需

要有深入的了解,只有一個(gè)對(duì)所有這些因素都很了解的數(shù)據(jù)庫(kù)設(shè)計(jì)專家,他設(shè)計(jì)的數(shù)據(jù)庫(kù)

才能易于使用和維護(hù),并且具有高效和一致的特征。雖然這樣只對(duì)數(shù)據(jù)庫(kù)設(shè)計(jì)過(guò)程有一個(gè)

概要的了解,但是仍然有助于讀者了解和掌握SQL,使讀者可以很好地分析數(shù)據(jù)間的相互

關(guān)系,在使用SQL進(jìn)行報(bào)表的生成、子查詢及視圖等操作時(shí),可以更好地進(jìn)行操作。

在開始介紹設(shè)計(jì)方法之前,先介紹好的數(shù)據(jù)庫(kù)及差的數(shù)據(jù)庫(kù)的一些品質(zhì),這將有助于

讀者更好地掌握數(shù)據(jù)庫(kù)的設(shè)計(jì)。

一般來(lái)說(shuō),好的數(shù)據(jù)庫(kù)應(yīng)該滿足以下條件。

?便于檢索所需要的數(shù)據(jù):在大型的數(shù)據(jù)庫(kù)中,由于表的增加,多表中的數(shù)據(jù)很難

讀取和理解,數(shù)據(jù)之間的關(guān)系無(wú)法在計(jì)算機(jī)屏幕或輸出頁(yè)中完整地顯示,因此好的

數(shù)據(jù)庫(kù)應(yīng)該便于用戶檢索所需要的數(shù)據(jù)。

?具有較高的完整性、數(shù)據(jù)更新的一致性:好的數(shù)據(jù)庫(kù)應(yīng)該能防止不一致信息的引

入,避免因各種問(wèn)題而出現(xiàn)的數(shù)據(jù)的不完整和數(shù)據(jù)之間的不一致。

?使系統(tǒng)具有盡可能良好的性能。

當(dāng)然,這3種品質(zhì)之間也會(huì)有一些妥協(xié)。

例如,將數(shù)據(jù)分割存儲(chǔ)在多個(gè)表中對(duì)數(shù)據(jù)完整性的支持較好,但對(duì)數(shù)據(jù)進(jìn)行檢索或更

新時(shí)需要進(jìn)行更多的操作,不僅麻煩,而且對(duì)性能有害;若將數(shù)據(jù)都存儲(chǔ)在一個(gè)表中,雖

然進(jìn)行數(shù)據(jù)檢索或更新變得比較方便,性能也較好,但是又會(huì)降低數(shù)據(jù)庫(kù)的完整性。

因此在設(shè)計(jì)數(shù)據(jù)庫(kù)時(shí)應(yīng)該平衡它們中的每一項(xiàng),使之適合應(yīng)用程序。當(dāng)然好數(shù)據(jù)庫(kù)最

根本就是能提供用戶高滿意度而且能可靠地滿足要求。

相對(duì)而言,設(shè)計(jì)得不好的數(shù)據(jù)庫(kù)或多或少與好的數(shù)據(jù)庫(kù)的品質(zhì)相反,在數(shù)據(jù)的檢索、

數(shù)據(jù)的完整性、數(shù)據(jù)更新的一致性及良好的性能上都具有較大的缺陷。還有一些具體的特

征可以幫助用戶判斷什么是設(shè)計(jì)得不好的數(shù)據(jù)庫(kù):

?需要多次輸入相同的數(shù)據(jù),或需要輸入多余的數(shù)據(jù)。

?返回不正確的查詢結(jié)果。

?數(shù)據(jù)之間的關(guān)系難以確定。

?表或列的名稱不明確。

在數(shù)據(jù)庫(kù)的設(shè)計(jì)中,應(yīng)盡量保證設(shè)計(jì)的數(shù)據(jù)庫(kù)具有好的特征,同時(shí)應(yīng)盡量避免具有上

述一些不好的特征。

下面將詳細(xì)地介紹數(shù)據(jù)庫(kù)的設(shè)計(jì)過(guò)程。

(1)信息的收集:研究和考慮所要建立的數(shù)據(jù)庫(kù)的信息環(huán)境,對(duì)數(shù)據(jù)庫(kù)應(yīng)用領(lǐng)域中各

種信息要求和操作要求進(jìn)行詳細(xì)地分析,了解應(yīng)用領(lǐng)域中數(shù)據(jù)項(xiàng)、數(shù)據(jù)項(xiàng)之間的關(guān)系和所

有的數(shù)據(jù)操作的詳細(xì)要求,了解哪些因素對(duì)響應(yīng)時(shí)間、可用性和可靠性有較大的影響等各

方面的因素。

這些就需要設(shè)計(jì)人員與相關(guān)人員進(jìn)行各種交流,了解數(shù)據(jù)庫(kù)需要完成的功能,數(shù)據(jù)項(xiàng)

的定義等。例如,以本書使用的簡(jiǎn)單的數(shù)據(jù)庫(kù)示例為例,設(shè)計(jì)人員需要與有關(guān)人員進(jìn)行交

流以確定部門與工程、工作人員和部門、工作人員與工程之間的關(guān)系,同時(shí)確定每個(gè)數(shù)據(jù)

項(xiàng),如工作人員,應(yīng)該包含哪些數(shù)據(jù)等,只有完成這些必要的信息收集后,數(shù)據(jù)庫(kù)的設(shè)計(jì)

才能順利地進(jìn)行下去。

(2)確定數(shù)據(jù):這是數(shù)據(jù)庫(kù)設(shè)計(jì)最基本而且最重要的工作,在收集到所需的全部相關(guān)

信息后,將所有找到的數(shù)據(jù)的類型和這些類型的屬性進(jìn)行明確的定義,同時(shí)需要仔細(xì)地考

慮屬性與數(shù)據(jù)類型的關(guān)系,應(yīng)該放置于哪個(gè)數(shù)據(jù)類型中。

(3)建立實(shí)體-關(guān)系模型:按照定義的數(shù)據(jù)類型和屬性創(chuàng)建實(shí)體和實(shí)體屬性列表。實(shí)體

形成表,如“工作人員”就是一個(gè)實(shí)體,屬性則為表中的列,如對(duì)應(yīng)于實(shí)體“工作人員”

屬性包含“姓名”、“職員ID”等。

在定義完實(shí)體和屬性后,就要確保每個(gè)實(shí)體都由一個(gè)或一組屬性惟一地標(biāo)識(shí)表中的任

何記錄,即確定每個(gè)表的主鍵。例如在“工作人員”表中,屬性“職員ID”就可以惟一地

標(biāo)識(shí)“工作人員”中的任何記錄,因此將屬性“職員ID”確定為該表的主鍵。

接下來(lái)就應(yīng)該確定實(shí)體之間的關(guān)系,確定是一對(duì)一、一對(duì)多還是多對(duì)多的關(guān)系。例如

一個(gè)部門有多個(gè)工作人員,但每個(gè)工作人員只屬于一個(gè)部門,因此部門與工作人員之間是

一對(duì)多關(guān)系。一般來(lái)說(shuō)是根據(jù)現(xiàn)實(shí)中的情況來(lái)確定實(shí)體之間的關(guān)系,從而形成實(shí)體-關(guān)系模

型。有關(guān)內(nèi)容將在本章的1.5節(jié)中進(jìn)行詳細(xì)介紹。

(4)進(jìn)行規(guī)范化:按照規(guī)范化準(zhǔn)則對(duì)數(shù)據(jù)進(jìn)行整體分析,以找到邏輯上的錯(cuò)誤,更正

任何違背了規(guī)范化形式的做法,使數(shù)據(jù)符合規(guī)范化的要求。

(5)編寫組建數(shù)據(jù)庫(kù)的SQL代碼,同時(shí)使用查詢等操作進(jìn)行一些檢測(cè),有關(guān)測(cè)試的具

體內(nèi)容將在第11章中介紹。

(6)根據(jù)測(cè)試結(jié)果對(duì)已完成的數(shù)據(jù)庫(kù)進(jìn)行檢查,在覺得有問(wèn)題或需要完善的地方進(jìn)行

必要修改和完善。

上面介紹的是數(shù)據(jù)庫(kù)設(shè)計(jì)的一般過(guò)程,如果讀者有更好的方法,可以按照自己的方法。

記?。悍椒ú⒉皇亲钪饕?,重要的是結(jié)果。

1.5概念數(shù)據(jù)庫(kù)設(shè)計(jì)

概念數(shù)據(jù)庫(kù)的設(shè)計(jì)是進(jìn)行具體數(shù)據(jù)庫(kù)設(shè)計(jì)的第一步,概念數(shù)據(jù)庫(kù)設(shè)計(jì)的好壞直接影響

到邏輯數(shù)據(jù)庫(kù)的設(shè)計(jì),影響到整個(gè)數(shù)據(jù)庫(kù)的好壞。

1.5.1概述

概念數(shù)據(jù)庫(kù)的設(shè)計(jì)應(yīng)該極易于轉(zhuǎn)換為邏輯數(shù)據(jù)庫(kù)模式,又容易被用戶所理解。概念數(shù)

據(jù)庫(kù)設(shè)計(jì)中最主要的就是采用實(shí)體■?關(guān)系數(shù)據(jù)模型來(lái)確定數(shù)據(jù)庫(kù)的結(jié)構(gòu)。

數(shù)據(jù)是表達(dá)信息的一種重要的量化符號(hào),是信息存在的一種重要形式。數(shù)據(jù)模型則是

數(shù)據(jù)特征的一種抽象。它描述的是數(shù)據(jù)的共性,而不是描述個(gè)別的數(shù)據(jù)。一般來(lái)說(shuō),數(shù)據(jù)

模型包含兩方面內(nèi)容。

(1)數(shù)據(jù)的靜態(tài)特性:主要包括數(shù)據(jù)的基本結(jié)構(gòu)、數(shù)據(jù)間的關(guān)系和數(shù)據(jù)之間的相互約

束等特性。

(2)數(shù)據(jù)的動(dòng)態(tài)特性:主要包括對(duì)數(shù)據(jù)進(jìn)行操作的方法。

在數(shù)據(jù)庫(kù)系統(tǒng)設(shè)計(jì)中,建立反映客觀信息的數(shù)據(jù)模型,是設(shè)計(jì)中最為重要的,也最基

本的步驟之一。數(shù)據(jù)模型是連接客觀信息世界和數(shù)據(jù)庫(kù)系統(tǒng)數(shù)據(jù)邏輯組織的橋梁,也是數(shù)

據(jù)庫(kù)設(shè)計(jì)人員與用戶之間進(jìn)行交流的共同基礎(chǔ)。概念數(shù)據(jù)庫(kù)中采用的實(shí)體-關(guān)系模型,與傳

統(tǒng)的數(shù)據(jù)模型有所不同。實(shí)體-關(guān)系模型是面向現(xiàn)實(shí)世界,而不是面向?qū)崿F(xiàn)方法的,它主要

是用于描述現(xiàn)實(shí)信息世界中數(shù)據(jù)的靜態(tài)特性。而不涉及數(shù)據(jù)的處理過(guò)程。但由于它簡(jiǎn)單易

學(xué),且使用方便,因而在數(shù)據(jù)庫(kù)系統(tǒng)應(yīng)用的設(shè)計(jì)中,得到了廣泛應(yīng)用。

實(shí)體-關(guān)系模型可以用來(lái)說(shuō)明數(shù)據(jù)庫(kù)中實(shí)體的等級(jí)和屬性。以下是實(shí)體-關(guān)系模型中的

重要標(biāo)識(shí):

?在數(shù)據(jù)庫(kù)中存在的實(shí)體

?實(shí)體的屬性

?實(shí)體之間的關(guān)系

下面就介紹一下實(shí)體-關(guān)系數(shù)據(jù)模型中的3個(gè)基本要素,即實(shí)體、關(guān)系和屬性的有關(guān)基

本知識(shí)。

1.5.2實(shí)體

實(shí)體是實(shí)體-關(guān)系模型的基本對(duì)象,是現(xiàn)實(shí)世界中各種事物的抽象。凡是可以相互區(qū)別

開并可以被識(shí)別的事、物、概念等對(duì)象均可認(rèn)為是實(shí)體。在本書示例的簡(jiǎn)單的Company

數(shù)據(jù)庫(kù)中,基本的實(shí)體列表如下:

?工作人員

?部門

?工程項(xiàng)目

?工程項(xiàng)目接收方

在繪制實(shí)體-關(guān)系圖(E-R圖)時(shí),實(shí)體出現(xiàn)在矩形中。如圖1-3所示。

部門

工作人員-----------

___________工程項(xiàng)目

項(xiàng)目接收方

圖1-3表示實(shí)體的E-R圖

一般來(lái)說(shuō),每個(gè)實(shí)體都相當(dāng)于數(shù)據(jù)庫(kù)中的一個(gè)表。

上面介紹的實(shí)體都是強(qiáng)實(shí)體,每個(gè)實(shí)體都有自己的鍵。但是在實(shí)際領(lǐng)域中,經(jīng)常存在

一些實(shí)體,它們沒(méi)有自己的鍵,這樣的實(shí)體稱為弱實(shí)體。弱實(shí)體中不同的記錄有可能完全

相同,難以區(qū)別,這些值依賴于另一個(gè)實(shí)體(強(qiáng)實(shí)體)的意義,必須與強(qiáng)實(shí)體聯(lián)合使用。有

關(guān)弱實(shí)體的具體問(wèn)題,本書不作具體介紹,有興趣的讀者可以參考相關(guān)數(shù)據(jù)庫(kù)設(shè)計(jì)書籍。

在創(chuàng)建了實(shí)體之后,就可以標(biāo)識(shí)各個(gè)實(shí)體的屬性了。

1.5.3屬性

每個(gè)實(shí)體都有一組特征或性質(zhì),稱為實(shí)體的屬性。實(shí)體的屬性值是數(shù)據(jù)庫(kù)中存儲(chǔ)的主

要數(shù)據(jù),一個(gè)屬性實(shí)際上相當(dāng)于表中的一個(gè)列。

下面來(lái)看看“工作人員”(Employee)實(shí)體。這個(gè)實(shí)體具有哪些屬性呢?對(duì)每個(gè)工作人

員來(lái)說(shuō),都具有名字(name)、生日(birthday)、住址(address)、目前所在城市(city)、性別(sex)。

同時(shí)在公司中每個(gè)工作人員還有職員ID號(hào)(id)、工資(salary)和所屬部門號(hào)(dno)等屬性。所

以關(guān)于“工作人員”Employee的屬性如下:

?名字(name)

?生日(birthday)

?住址(address)

?目前所在城市(city)

?性別(sex)

?職員ID號(hào)(id)

?工資(salary)

?所屬部門號(hào)(dno)

實(shí)體“部門"Department包含的屬性如下:

?部門名稱(dname)

?部門號(hào)(dnumber)

?部門領(lǐng)導(dǎo)ID號(hào)(mgrid)

?部門領(lǐng)導(dǎo)開始領(lǐng)導(dǎo)工作日期(mgrstrdate)

實(shí)體“項(xiàng)目"Project包含的屬性如下:

?工程名稱(pname)

?工程項(xiàng)目號(hào)(pnumber)

?工程項(xiàng)目負(fù)責(zé)人ID號(hào)(pmgrid)

?工程預(yù)算(budget)

?工程預(yù)計(jì)總收入(gross)

?工程開始時(shí)間(pstrdate)

?工程預(yù)計(jì)結(jié)束時(shí)間(penddate)

實(shí)體“項(xiàng)目接收方"Paccepter包含的屬性如下:

?接收方名稱(accepter)

?工程項(xiàng)目號(hào)(pnumber)

?接收方所在城市(city)

?預(yù)計(jì)接收時(shí)間(accedate)

在繪制E-R圖中,屬性由橢圓包圍,在屬性和它所屬的實(shí)體間使用直線進(jìn)行連接,以

實(shí)體Department為例進(jìn)行示例,如圖1?4所示。

圖1-4包含屬性的Department的E-R圖

對(duì)于每個(gè)實(shí)體,都有其確定的主屬性(實(shí)體中的主屬性實(shí)際上相當(dāng)于表中的主鍵)。以

Employee實(shí)體為例,在其屬性中可以以name和birthday的組合作為主屬性,即表Employee

的主鍵。因?yàn)樵诂F(xiàn)實(shí)生活中,一家公司內(nèi)部有兩個(gè)員工同名而且同時(shí)生日的情況極其少見。

這個(gè)組合是惟一可以確定實(shí)體Employee中的每個(gè)記錄的。但是僅用職員ID就可以惟一地

確定實(shí)體Employee的每個(gè)記錄,因?yàn)樵谝患夜局忻總€(gè)職員的ID都是不相同的,也可以

以職員ID作為主屬性,且肯定不可能出現(xiàn)重復(fù)。在有更好的主屬性可選擇的情況下,應(yīng)

該盡量選擇更好的主屬性,最好是創(chuàng)建一個(gè)單獨(dú)的屬性作為主屬性。

在實(shí)體Deparlment中可以選擇dnumber作為主屬性,而在實(shí)體Project中,每個(gè)項(xiàng)目

的名稱肯定是不會(huì)重復(fù)的,因此選擇pnumber作為主屬性,在實(shí)體Paccepter中也選擇

pnumber作為主屬性。

在繪制E-R圖中,主屬性在屬性下加下劃線來(lái)說(shuō)明。以實(shí)體Department為例進(jìn)行示例,

如圖1-5所示。

有關(guān)SQL中主鍵定義的具體實(shí)現(xiàn),將在第3章中介紹。

注意:

在數(shù)據(jù)庫(kù)設(shè)計(jì)中,選擇和設(shè)置列作為主鍵是一個(gè)關(guān)鍵步驟。

1.5.4一對(duì)一關(guān)系

在數(shù)據(jù)庫(kù)中,一個(gè)表與另一個(gè)表之間存在一對(duì)一關(guān)系是可能的,通常情況下,當(dāng)一對(duì)

一關(guān)系在兩個(gè)表中存在時(shí),為了簡(jiǎn)便起見一般將兩個(gè)表合成一個(gè)表。

例如,數(shù)據(jù)庫(kù)中詳細(xì)記錄了每個(gè)員工的過(guò)去表現(xiàn),以往工作經(jīng)歷等信息,可以將其也

放在Employee表中,但是這些信息不常使用,可以將其存放在一個(gè)單獨(dú)的表中,以便在

進(jìn)行普通的查詢時(shí)不必訪問(wèn)這些信息,以提高查詢速度。這樣這兩個(gè)表就具有了一對(duì)一的

關(guān)系。

注意:

一般來(lái)說(shuō),當(dāng)對(duì)數(shù)據(jù)庫(kù)的設(shè)計(jì)不是非常熟練時(shí),應(yīng)當(dāng)盡量避免使用一對(duì)一關(guān)系。

1.5.5一對(duì)多關(guān)系

數(shù)據(jù)庫(kù)的數(shù)據(jù)之間往往具有較多的聯(lián)系,一對(duì)多關(guān)系也是比較多的一種。在上面的設(shè)

計(jì)中已經(jīng)為Company數(shù)據(jù)庫(kù)設(shè)計(jì)了4個(gè)實(shí)體,每個(gè)實(shí)體的屬性都已確定,主屬性也進(jìn)行了

標(biāo)識(shí)。

但是,一個(gè)數(shù)據(jù)庫(kù)中僅僅有這4個(gè)實(shí)體是不夠的,為了實(shí)際應(yīng)用必需發(fā)現(xiàn)實(shí)體之間的

聯(lián)系,表示出數(shù)據(jù)間的重要關(guān)系。

下面將給出一對(duì)多關(guān)系的定義,再看一看Company數(shù)據(jù)庫(kù)中存在的一對(duì)多關(guān)系。

在一個(gè)表中一個(gè)記錄可以與另一個(gè)表的若干記錄相對(duì)應(yīng)時(shí)就說(shuō)兩個(gè)表之間存在一對(duì)

多關(guān)系。數(shù)據(jù)間的一對(duì)多關(guān)系通常簡(jiǎn)記為1:N。

在Company數(shù)據(jù)庫(kù)中,部門與工作人員,項(xiàng)目與工作人員之間都具有一對(duì)多關(guān)系。每

個(gè)部門都包含多個(gè)工作人員,每項(xiàng)工程也由多個(gè)工作人員參加。以工程實(shí)體與工作人員實(shí)

體為例來(lái)介紹一對(duì)多關(guān)系的實(shí)體-關(guān)系圖的畫法,如圖1-6所示。

圖1-6一對(duì)多關(guān)系的E-R圖

1.5.6多對(duì)多關(guān)系

一對(duì)一和一對(duì)多關(guān)系并不足以涵蓋數(shù)據(jù)庫(kù)中的所有關(guān)系,例如部門與項(xiàng)目間并不一定

僅僅是一對(duì)一或一對(duì)多關(guān)系,一個(gè)部門可以同時(shí)進(jìn)行一個(gè)或多個(gè)項(xiàng)目,而一個(gè)項(xiàng)目可能也

需要多個(gè)部門的配合才能很好地完成。也就是說(shuō),部門與項(xiàng)目間存在著多對(duì)多的關(guān)系。數(shù)

據(jù)之間的多對(duì)多關(guān)系通常簡(jiǎn)記為N:No圖1-7顯示了多對(duì)多關(guān)系的實(shí)體-關(guān)系圖。

圖1-7多對(duì)多關(guān)系的E-R圖

1.5.7E-R圖的繪制

實(shí)體-關(guān)系圖是表現(xiàn)實(shí)體-關(guān)系模型的圖形工具,簡(jiǎn)稱E-R圖。首先介紹與E-R模型各

種成分相對(duì)應(yīng)的基本圖形符號(hào),然后以Company數(shù)據(jù)庫(kù)為例,給出一個(gè)完整的數(shù)據(jù)庫(kù)的

E-R圖。圖1-8給出了在E-R圖中使用的各種元素的圖形符號(hào)。圖1-9給出了Company數(shù)

據(jù)庫(kù)的E-R圖。

實(shí)體關(guān)系

圖1-8E-R圖中使用的各種元素的圖形符號(hào)

圖1-9Company數(shù)據(jù)庫(kù)的完整E-R圖

在Company數(shù)據(jù)庫(kù)中:

實(shí)體之間的關(guān)系以菱形表示,關(guān)系中各方面的表通過(guò)直線與菱形中的關(guān)系名稱相連

接,例如項(xiàng)目與部門之間的關(guān)系標(biāo)為p_d;實(shí)體與關(guān)系相連的直線旁都根據(jù)關(guān)系的屬性標(biāo)

注有“1”或“N”,例如工作人員與部門之間為多對(duì)一關(guān)系,因此在工作人員與關(guān)系e_d

的連線旁標(biāo)記“N”,而在部門與關(guān)系e_d的連線旁標(biāo)記“1”。

在建立了實(shí)體-關(guān)系模型后數(shù)據(jù)庫(kù)的設(shè)計(jì)就剩下最后的一個(gè)步驟了。E-R圖為讀者的數(shù)

據(jù)庫(kù)提供了一個(gè)不錯(cuò)的藍(lán)圖,設(shè)計(jì)過(guò)程的最后一步使用規(guī)范化對(duì)數(shù)據(jù)進(jìn)行處理獲得對(duì)數(shù)據(jù)

庫(kù)完整性的控制權(quán)。

1.5.8回顧

在進(jìn)入下一節(jié)之前,先回顧一下概念數(shù)據(jù)庫(kù)的設(shè)計(jì),其中主要是實(shí)體-關(guān)系模型的建立。

簡(jiǎn)要總結(jié)一下實(shí)體-關(guān)系模型建立的步驟:

(1)對(duì)需求進(jìn)行分析,從而確定系統(tǒng)中所包含的實(shí)體。

(2)分析得出每個(gè)實(shí)體所具有的屬性。

(3)保證每個(gè)實(shí)體有一個(gè)主屬性,該主屬性可以是實(shí)體的一個(gè)屬性或多個(gè)屬性的組合。

主屬性必須能惟一地描述每個(gè)記錄.

(4)確定實(shí)體之間的關(guān)系。

經(jīng)過(guò)這些步驟后,讀者就可以繪制出E-R圖。之后可以再看看數(shù)據(jù)庫(kù)的需要,判斷是

否獲取了所需的信息,是否有遺漏信息等,讀者可以再對(duì)E-R圖進(jìn)行修改,添加或刪除實(shí)

體與屬性。

1.6邏輯數(shù)據(jù)庫(kù)設(shè)計(jì)

在邏輯數(shù)據(jù)庫(kù)的設(shè)計(jì)中主要任務(wù)是將概念數(shù)據(jù)庫(kù)轉(zhuǎn)化為邏輯數(shù)據(jù)庫(kù)及關(guān)系模式的規(guī)

范化。本節(jié)中也將主要介紹這兩項(xiàng)內(nèi)容,有關(guān)邏輯數(shù)據(jù)庫(kù)設(shè)計(jì)的其他內(nèi)容,有興趣的讀者

可以自己參考一些資料。

1.6.1將實(shí)體和關(guān)系轉(zhuǎn)化為關(guān)系模式

實(shí)體-關(guān)系模型建立后,就可以將實(shí)體、實(shí)體間的關(guān)系等模型結(jié)構(gòu)轉(zhuǎn)變?yōu)殛P(guān)系模式,即

生成數(shù)據(jù)庫(kù)中的表,并確定表的列。下述討論由實(shí)體-關(guān)系模型生成表的方法。

1.實(shí)體轉(zhuǎn)化為表

對(duì)實(shí)體-關(guān)系模型中每個(gè)實(shí)體,建立一個(gè)表,表的列就是實(shí)體所具有的屬性,主屬性就

作為表的主鍵,在表中也用下劃線標(biāo)記表的鍵。如上面建立的實(shí)體-關(guān)系模型中,所有實(shí)體

轉(zhuǎn)化為表,如圖1-10所示。

表Employee表Project表Department表Paccepter

namepnamedname^number

birthday

◎numberdnumberaccepter

address

pmgridmgridaddress

city

budgetmgrstrdatc

sexgross

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論