《數(shù)據(jù)庫(kù)應(yīng)用-數(shù)據(jù)庫(kù)原理與SQL Server》課件第3章_第1頁(yè)
《數(shù)據(jù)庫(kù)應(yīng)用-數(shù)據(jù)庫(kù)原理與SQL Server》課件第3章_第2頁(yè)
《數(shù)據(jù)庫(kù)應(yīng)用-數(shù)據(jù)庫(kù)原理與SQL Server》課件第3章_第3頁(yè)
《數(shù)據(jù)庫(kù)應(yīng)用-數(shù)據(jù)庫(kù)原理與SQL Server》課件第3章_第4頁(yè)
《數(shù)據(jù)庫(kù)應(yīng)用-數(shù)據(jù)庫(kù)原理與SQL Server》課件第3章_第5頁(yè)
已閱讀5頁(yè),還剩94頁(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)介

第3章表管理

3.1關(guān)系模型3.2建立表結(jié)構(gòu)3.3編輯數(shù)據(jù)3.4數(shù)據(jù)庫(kù)原理(一)——數(shù)據(jù)庫(kù)規(guī)范化設(shè)計(jì)小結(jié)習(xí)題

3.1關(guān)系模型

3.1.1數(shù)據(jù)描述

1.概念設(shè)計(jì)

數(shù)據(jù)庫(kù)的概念設(shè)計(jì)是根據(jù)用戶的需求設(shè)計(jì)數(shù)據(jù)庫(kù)的概念結(jié)構(gòu)。這一階段涉及下列四個(gè)術(shù)語(yǔ)。

(1)實(shí)體(Entity):客觀存在的、可以相互區(qū)別的事物。實(shí)體可以是具體的對(duì)象,也可以是抽象的對(duì)象。

(2)實(shí)體集(EntitySet):實(shí)體集性質(zhì)相同的同類實(shí)體的集合。

(3)屬性(Attribute):實(shí)體的每一個(gè)特性。

(4)實(shí)體標(biāo)識(shí)符(Identifier):唯一標(biāo)識(shí)實(shí)體的屬性或?qū)傩约?/p>

2.邏輯設(shè)計(jì)

(1)字段(Field):實(shí)體屬性的命名單位。字段的命名往往和屬性名相同。例如,學(xué)生有學(xué)號(hào)、姓名、性別等字段。

(2)記錄(Record):字段的有序集合。一般用一個(gè)記錄描述一個(gè)實(shí)體,所以記錄又可以定義為能完整地描述一個(gè)實(shí)體的字段集。例如,一個(gè)學(xué)生記錄由有序的字段集學(xué)號(hào)、姓名、性別組成。

(3)文件(File):同一類記錄的集合。文件是用來(lái)描述實(shí)體集的。例如,所有的學(xué)生記錄組成了一個(gè)學(xué)生文件。

(4)關(guān)鍵碼(Key):能唯一標(biāo)識(shí)文件中每個(gè)記錄的字段或字段集。例如,學(xué)生的學(xué)號(hào)字段可以作為學(xué)生的關(guān)鍵碼。

概念設(shè)計(jì)和邏輯設(shè)計(jì)中兩套術(shù)語(yǔ)的對(duì)應(yīng)關(guān)系如表3-1所示。

3.物理設(shè)計(jì)

物理設(shè)計(jì)是根據(jù)邏輯設(shè)計(jì)得到的數(shù)據(jù)的邏輯結(jié)構(gòu)來(lái)設(shè)計(jì)存儲(chǔ)數(shù)據(jù)的物理結(jié)構(gòu),即數(shù)據(jù)庫(kù)的存儲(chǔ)結(jié)構(gòu)。由于數(shù)據(jù)庫(kù)系統(tǒng)的一個(gè)目標(biāo)是使用戶能簡(jiǎn)單、方便、容易地存取數(shù)據(jù),因此用戶只需要知道數(shù)據(jù)庫(kù)對(duì)應(yīng)的文件,不必關(guān)心數(shù)據(jù)庫(kù)的存儲(chǔ)結(jié)構(gòu)和具體實(shí)現(xiàn)方式。例如,所有的學(xué)生記錄組成的學(xué)生文件在SQLServer2005中可以設(shè)計(jì)為文件“d:\example\

student.mdf”。3.1.2數(shù)據(jù)模型

1.定義

模型是對(duì)現(xiàn)實(shí)世界的抽象。在數(shù)據(jù)庫(kù)技術(shù)中,用模型的概念描述數(shù)據(jù)庫(kù)的結(jié)構(gòu)與語(yǔ)義?!皵?shù)據(jù)模型(DataModel)”是表示實(shí)體類型及實(shí)體間聯(lián)系的模型。

數(shù)據(jù)模型的種類很多,目前被廣泛使用的類型可分為兩種:一種是在概念設(shè)計(jì)階段使用的數(shù)據(jù)模型,稱為概念數(shù)據(jù)模型;另一種是在邏輯設(shè)計(jì)階段使用的數(shù)據(jù)模型,稱為邏輯數(shù)據(jù)模型。

2.實(shí)體聯(lián)系模型

1)數(shù)據(jù)聯(lián)系

在現(xiàn)實(shí)世界中,事物是相互聯(lián)系的,即實(shí)體間可能是有聯(lián)系的。這種聯(lián)系必然要在數(shù)據(jù)庫(kù)中有所反映。

聯(lián)系(Relationship)是實(shí)體之間的相互關(guān)系。與一個(gè)聯(lián)系相關(guān)的實(shí)體集的個(gè)數(shù),稱為聯(lián)系的元數(shù),即聯(lián)系有一元聯(lián)系、二元聯(lián)系、三元聯(lián)系等之分。

(1)二元聯(lián)系。二元聯(lián)系有以下三種類型。

①一對(duì)一聯(lián)系:

②一對(duì)多聯(lián)系:

③多對(duì)多聯(lián)系:實(shí)例3-1

學(xué)校里的班主任和班級(jí)之間(約定一個(gè)教師只能擔(dān)任一個(gè)班級(jí)的班主任),由于一個(gè)班主任最多帶一個(gè)班級(jí),而一個(gè)班級(jí)最多有一個(gè)班主任,因此班主任和班級(jí)之間是一對(duì)一聯(lián)系。學(xué)校里的班主任和學(xué)生之間,由于一個(gè)班主任可以帶多個(gè)學(xué)生,而一個(gè)學(xué)生最多有一個(gè)班主任,因此班主任和學(xué)生之間是一對(duì)多聯(lián)系。學(xué)校里的教師和學(xué)生之間,由于一個(gè)教師可以帶多個(gè)學(xué)生,而一個(gè)學(xué)生可以有多個(gè)教師,因此教師和學(xué)生之間是多對(duì)多聯(lián)系。

(2)其他聯(lián)系。其他聯(lián)系與二元聯(lián)系一樣,也有一對(duì)一聯(lián)系、一對(duì)多聯(lián)系和多對(duì)多聯(lián)系三種類型。

2)?ER圖

ER圖是直接表示概念模型的有力工具,在ER圖中有以下四個(gè)基本成分:

(1)矩形框:表示實(shí)體,并將實(shí)體名記入框中。

(2)菱形框:表示聯(lián)系,并將聯(lián)系名記入框中。

(3)橢圓形框:表示實(shí)體或聯(lián)系的屬性,并將屬性名記入框中。對(duì)于實(shí)體標(biāo)識(shí)符,則在下面畫(huà)一條橫線。

(4)連線:實(shí)體與屬性之間,聯(lián)系與屬性之間用直線連接;實(shí)體與聯(lián)系之間也以直線相連,并在直線端部標(biāo)注聯(lián)系的類型(1∶1、1∶N或M∶N)。實(shí)例3-2

為“學(xué)生選課系統(tǒng)”設(shè)計(jì)一個(gè)ER模型。

(1)確定實(shí)體。本題有兩個(gè)實(shí)體類型:學(xué)生s和課程c。

(2)確定聯(lián)系。實(shí)體s與實(shí)體c之間有聯(lián)系,且為M∶N聯(lián)系,命名為sc。

(3)確定實(shí)體和聯(lián)系的屬性。實(shí)體s的屬性有學(xué)號(hào)sno、班級(jí)class、姓名sname、性別sex、出生日期birthday、地址address、電話telephone、電子信箱email,其中實(shí)體標(biāo)識(shí)符為學(xué)號(hào)sno。實(shí)體c的屬性有課程編號(hào)cno、課程名稱cname、學(xué)分credit,其中實(shí)體標(biāo)識(shí)符為課程編號(hào)cno。聯(lián)系sc的屬性是某學(xué)生選修某課程的成績(jī)score。

(4)按規(guī)則畫(huà)出“學(xué)生選課系統(tǒng)”的ER圖,如圖3-1所示。圖3-1“學(xué)生選課系統(tǒng)”的ER圖

3.結(jié)構(gòu)數(shù)據(jù)模型

1)層次模型

用樹(shù)型(層次)結(jié)構(gòu)表示實(shí)體及實(shí)體間聯(lián)系的數(shù)據(jù)模型稱為層次模型(HierarchicalModel)。樹(shù)的結(jié)點(diǎn)是記錄類型,每個(gè)非根結(jié)點(diǎn)有且僅有一個(gè)父結(jié)點(diǎn)。上一層記錄類型和下一層記錄類型之間的聯(lián)系是1∶N聯(lián)系。

2)網(wǎng)狀模型

用有向圖結(jié)構(gòu)表示實(shí)體及實(shí)體間聯(lián)系的數(shù)據(jù)模型稱為網(wǎng)狀模型(NetworkModel)。有向圖中的結(jié)點(diǎn)是記錄類型,箭頭表示從箭尾的記錄類型到箭頭的記錄類型間聯(lián)系是1∶N聯(lián)系。

3)關(guān)系模型

關(guān)系模型(RelationalModel)的主要特征是用二維表格表達(dá)實(shí)體集。關(guān)系模型是由若干個(gè)關(guān)系模式組成的集合。關(guān)系模式相當(dāng)于文件,它的實(shí)例稱為關(guān)系,每個(gè)關(guān)系實(shí)際上是一張二維表格,關(guān)系也稱為表。

實(shí)例3-3

將實(shí)例3-2的ER模型轉(zhuǎn)換為關(guān)系模型。

轉(zhuǎn)換的方法是把ER圖中的實(shí)體和M∶N的聯(lián)系分別轉(zhuǎn)換成關(guān)系模式,?同時(shí)在實(shí)體標(biāo)識(shí)符下加一橫線表示關(guān)系模式的關(guān)鍵碼。聯(lián)系關(guān)系模式的屬性為與之聯(lián)系的實(shí)體類型的關(guān)鍵碼和聯(lián)系的屬性,關(guān)鍵碼為與之聯(lián)系的實(shí)體類型的關(guān)鍵碼的組合。

表3-2為“學(xué)生選課系統(tǒng)”的關(guān)系模型。3.1.3關(guān)系模型

1.關(guān)系模型、關(guān)系模式、關(guān)系

關(guān)系模式是對(duì)關(guān)系的描述,可以表示為R(U,D,dom,F(xiàn)),簡(jiǎn)記為R(U)。其中,R為關(guān)系名,U為屬性集,D為U中屬性所來(lái)自的域,dom為屬性向域的映象集,F(xiàn)為屬性間數(shù)據(jù)的依賴關(guān)系集。

關(guān)系模型是關(guān)系模式及其間的聯(lián)系的數(shù)據(jù)模型,包括數(shù)據(jù)結(jié)構(gòu)(關(guān)系模式)、數(shù)據(jù)操作(關(guān)系運(yùn)算)和數(shù)據(jù)完整性規(guī)則。

關(guān)系是關(guān)系模式在某一時(shí)刻的狀態(tài)或內(nèi)容,具體的關(guān)系稱為實(shí)例。也就是說(shuō),關(guān)系模式是型,關(guān)系是值。關(guān)系模式是穩(wěn)定的,而關(guān)系是不斷變化的。在實(shí)際應(yīng)用中,通常把關(guān)系模式和關(guān)系統(tǒng)稱為關(guān)系。

2.關(guān)鍵碼與關(guān)系模式

在關(guān)系數(shù)據(jù)庫(kù)中,關(guān)鍵碼(簡(jiǎn)稱鍵、碼)是關(guān)系模型的一個(gè)重要概念。通常關(guān)鍵碼由一個(gè)或幾個(gè)屬性組成,包括以下四種鍵(碼)。

(1)超鍵(超碼)。

(2)候選鍵(候選碼)。

(3)主鍵(主碼)。

(4)外鍵(外碼)。

3.數(shù)據(jù)完整性規(guī)則

關(guān)系模型的完整性規(guī)則是對(duì)數(shù)據(jù)的約束。關(guān)系模型提供了三類完整性規(guī)則:實(shí)體完整性規(guī)則、參照完整性規(guī)則和用戶自定義完整性規(guī)則。其中實(shí)體完整性規(guī)則和參照完整性規(guī)則是關(guān)系模型必須滿足的完整性約束條件,稱為關(guān)系完整性規(guī)則。

(1)實(shí)體完整性規(guī)則。

(2)參照完整性規(guī)則。

(3)用戶自定義完整性規(guī)則。

3.2建?立?表?結(jié)?構(gòu)

3.2.1表的概念

表(即關(guān)系)是關(guān)系數(shù)據(jù)庫(kù)中用于存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)對(duì)象,數(shù)據(jù)只能存儲(chǔ)在表中。SQLServer2005中有兩類表:一類是系統(tǒng)表,是在創(chuàng)建數(shù)據(jù)庫(kù)時(shí)由Model庫(kù)復(fù)制得到的;另一類是用戶表。要用數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù),首先必須要?jiǎng)?chuàng)建用戶表。

實(shí)例3-4為“學(xué)生選課系統(tǒng)”設(shè)計(jì)名稱為student的數(shù)據(jù)庫(kù),用于存儲(chǔ)數(shù)據(jù)。

(1)設(shè)計(jì)表。

(2)設(shè)計(jì)數(shù)據(jù)庫(kù)。3.2.2數(shù)據(jù)類型

1.數(shù)值類型

數(shù)值類型包括整型和實(shí)型兩類。

整型包括:

(1)?bigint。

(2)?int(或integer)。

(3)?smallint。

(4)?tinyint。

實(shí)型包括:

(1)?decimal[(p[,s])]:其字節(jié)數(shù)與精度的關(guān)系如表3-3所示。

(2)?numeric[(p[,s])]。

(3)?float[(n)]。

(4)?real:浮點(diǎn)類型。

2.字符串類型

(1)?char[(n)]:定長(zhǎng)字符串類型。其中,n為長(zhǎng)度,范圍為1~8000,即可容納8000個(gè)ANSI字符。若字符數(shù)小于n,則系統(tǒng)自動(dòng)在末尾添加空格;若字符數(shù)大于n,則系統(tǒng)自動(dòng)截?cái)喑霾糠帧DJ(rèn)char(10)。

(2)?varchar[(n)]:變長(zhǎng)字符串類型。與char不同的是,varchar存儲(chǔ)長(zhǎng)度為實(shí)際長(zhǎng)度,即自動(dòng)刪除字符串尾部空格后存儲(chǔ)。默認(rèn)varchar(50)。

(3)?text:文本類型,實(shí)際上也是變長(zhǎng)字符串類型,存儲(chǔ)長(zhǎng)度超過(guò)char(8000)的字符串,理論范圍占1~231-1個(gè)字節(jié),約2GB。

3.邏輯類型

bit:占1字節(jié)的存儲(chǔ)空間,其值為0或1。當(dāng)輸入0和1以外的值時(shí),系統(tǒng)自動(dòng)轉(zhuǎn)換為1。通常存儲(chǔ)邏輯量,表示真與假。

4.二進(jìn)制類型

(1)?binary[(n)]:定長(zhǎng)二進(jìn)制類型。占n?+?4字節(jié)的存儲(chǔ)空間,其中,n為數(shù)據(jù)長(zhǎng)度,范圍為1~8000。默認(rèn)binary(50)。

(2)?varbinary[(n)]:變長(zhǎng)二進(jìn)制類型。與binary不同的是,varbinary存儲(chǔ)長(zhǎng)度為實(shí)際長(zhǎng)度。默認(rèn)varbinary(50)。

(3)?image:大量二進(jìn)制類型,實(shí)際上也是變長(zhǎng)二進(jìn)制類型。通常用于存儲(chǔ)圖形等對(duì)象連接和嵌入(ObjectLinkingandEmbedding,OLE)對(duì)象,理論范圍占1~231-1個(gè)字節(jié)。

5.日期時(shí)間類型

SQLServer2005的日期時(shí)間類型數(shù)據(jù)同時(shí)包含日期和時(shí)間信息,沒(méi)有單獨(dú)的日期類型或時(shí)間類型。

(1)?datetime:占8字節(jié)的存儲(chǔ)空間,范圍為1753年1月1日~9999年12月31日,精確到1/300s。

(2)??smalldatetime:占4字節(jié)的存儲(chǔ)空間,范圍為1900年1月1日~2079年12月31日,精確到1分鐘。

6.貨幣類型

(1)?money:占8字節(jié)的存儲(chǔ)空間,具有4位小數(shù),存儲(chǔ)數(shù)據(jù)范圍為?-263~263-1之間的數(shù)值,精確到1/10000貨幣單位。

(2)?smallmoney:占4字節(jié)的存儲(chǔ)空間,具有4位小數(shù),存儲(chǔ)數(shù)據(jù)范圍為-231~231-1之間的數(shù)值。3.2.3創(chuàng)建表

數(shù)據(jù)庫(kù)創(chuàng)建完成后,要在數(shù)據(jù)庫(kù)中存儲(chǔ)數(shù)據(jù)時(shí),必須創(chuàng)建表。在SQLServer2005中,可以使用SQL語(yǔ)句、SQL-MS等方式創(chuàng)建表。

1.使用SQL語(yǔ)句

創(chuàng)建表語(yǔ)句的基本語(yǔ)法格式如下:

CREATETABLE[<數(shù)據(jù)庫(kù)名>.]<表名>

(<列名><數(shù)據(jù)類型>[<列級(jí)完整性約束>][,…n]

[<表級(jí)完整性約束>])實(shí)例3-5

在student數(shù)據(jù)庫(kù)中,為實(shí)例3-4的三個(gè)關(guān)系模式s、c、sc創(chuàng)建表s、c、sc。

在查詢編輯器中輸入如圖3-2所示的SQL語(yǔ)句并執(zhí)行。圖3-2創(chuàng)建表s、c、sc實(shí)例3-6

在有關(guān)零件、供應(yīng)商、工程項(xiàng)目的數(shù)據(jù)庫(kù)中,有四個(gè)關(guān)系,其結(jié)構(gòu)如下:

供應(yīng)商關(guān)系:S(SNO,SNAME,STATUS,ADDR)

零件關(guān)系:P(PNO,PNAME,COLOR,WEIGHT)

工程項(xiàng)目關(guān)系:J(JNO,JNAME,CITY,BALANCE)

供應(yīng)情況關(guān)系:SPJ(SNO,PNO,JNO,PRICE,OIY)

分別創(chuàng)建表S、P、J、SPJ。其中,表SPJ的SNO、PNO、JNO分別為外鍵,分別參照表S、P、J的SNO、PNO、JNO。

在查詢編輯器中輸入如圖3-3所示的SQL語(yǔ)句并執(zhí)行。圖3-3創(chuàng)建表S、P、J、SPJ

2.使用SQL-MS

下面通過(guò)實(shí)例說(shuō)明使用SQL-MS創(chuàng)建表的方法。

實(shí)例3-7使用SQL-MS創(chuàng)建實(shí)例3-4中的表sc。

(1)啟動(dòng)SQL-MS,展開(kāi)對(duì)象資源管理器左側(cè)窗口的數(shù)據(jù)庫(kù)“student”,指向“表”節(jié)點(diǎn),單擊右鍵,打開(kāi)快捷菜單,選擇“新建表”命令,在主菜單中添加“表設(shè)計(jì)器”菜單,并打開(kāi)“表設(shè)計(jì)器”窗口,如圖3-4所示。圖3-4“表設(shè)計(jì)器”窗口

(2)首先依次在“列名”框中輸入字段名,在“數(shù)據(jù)類型”框中選擇字段的數(shù)據(jù)類型,在“列屬性”列表框的“長(zhǎng)度”框中輸入字段長(zhǎng)度。此處為sno、char、4,cno、char、4,score、smallint。然后指定主鍵。此處單擊sno前按鈕選中sno字段,按住Ctrl鍵單擊cno前按鈕選中cno字段,再單擊工具欄中的“設(shè)置主鍵”按鈕?,即設(shè)置主鍵為sno、cno,如圖3-5所示。

(3)單擊工具欄中的“保存”圖標(biāo),打開(kāi)“選擇名稱”對(duì)話框,為新建表定義表名,此處為sc,如圖3-6所示。

(4)單擊“確定”按鈕,完成表的創(chuàng)建。圖3-5“創(chuàng)建表”窗口圖3-6“選擇名稱”對(duì)話框3.2.4修改表

1.使用SQL語(yǔ)句

修改表語(yǔ)句的基本語(yǔ)法格式如下:

ALTERTABLE[<數(shù)據(jù)庫(kù)名>.]<表名>

{[ALTER<列名><數(shù)據(jù)類型>[<列級(jí)完整性約束>][,…n]]

|ADD<列名><數(shù)據(jù)類型>[<列級(jí)完整性約束>][,…n]

|DROP<列名>[,…n]

}

實(shí)例3-8

在表s中增加新的列postcode。

在查詢編輯器中輸入如圖3-7所示的SQL語(yǔ)句并執(zhí)行。圖3-7在表s中增加列postcode實(shí)例3-9

刪除表s中的列postcode。

在查詢編輯器中輸入如圖3-8所示的SQL語(yǔ)句并執(zhí)行。圖3-8刪除表s中的列postcode實(shí)例3-10

設(shè)置表sc中的列sno為外鍵。

在查詢編輯器中輸入如圖3-9所示的SQL語(yǔ)句并執(zhí)行。圖3-9設(shè)置表sc中的列sno為外鍵實(shí)例3-11

為表sc的列score增加約束。

在查詢編輯器中輸入如圖3-10所示的SQL語(yǔ)句并執(zhí)行。圖3-10為表sc的列score增加約束

2.使用SQL-MS

實(shí)例3-12

對(duì)表s,定義sname非空完整性約束,sex缺省完整性約束(缺省值“男”),email唯一完整性約束。

(1)啟動(dòng)SQL-MS,單擊對(duì)象資源管理器左側(cè)窗口數(shù)據(jù)庫(kù)student中的“表”節(jié)點(diǎn),指向右側(cè)窗口中的表“s”,單擊右鍵,打開(kāi)快捷菜單,選擇“修改”命令,打開(kāi)“表設(shè)計(jì)器”窗口,參見(jiàn)圖3-4。

(2)單擊sname行的“允許空”列,去掉對(duì)鉤,設(shè)置sname非空完整性約束;單擊sex行,在下方“列屬性”窗口的“默認(rèn)值或綁定”框中輸入“'男'”,設(shè)置sex缺省完整性約束,如圖3-11所示。圖3-11“表設(shè)計(jì)器”窗口

(3)單擊工具欄中的“索引/鍵”圖標(biāo)?,打開(kāi)“索引/鍵”對(duì)話框,如圖3-12所示。圖3-12“索引/鍵”對(duì)話框

(4)單擊“添加”及“常規(guī)”列后的“屬性”按鈕,打開(kāi)“索引列”對(duì)話框,如圖3-13所示。圖3-13“索引列”對(duì)話框

(5)在“列名”框中選擇email,設(shè)置email唯一完整性約束。單擊“確定”按鈕,再單擊“關(guān)閉”按鈕,完成完整性設(shè)置。

實(shí)例3-13

對(duì)表sc,定義sno為外鍵,參照表s的sno;定義cno為外鍵,參照表c的cno。

方法一:

(1)啟動(dòng)SQL-MS,單擊對(duì)象資源管理器左側(cè)窗口數(shù)據(jù)庫(kù)student中的“表”節(jié)點(diǎn),指向右側(cè)窗口中的表“sc”,單擊右鍵,打開(kāi)快捷菜單,選擇“修改”命令,打開(kāi)“表設(shè)計(jì)器”窗口。

(2)單擊工具欄中的“關(guān)系”圖標(biāo),打開(kāi)“外鍵關(guān)系”對(duì)話框,如圖3-14所示。圖3-14“外鍵關(guān)系”對(duì)話框

(3)單擊“添加”按鈕,如圖3-15所示。圖3-15單擊“添加”按鈕后的“外鍵關(guān)系”對(duì)話框

(4)單擊右側(cè)“表和列規(guī)范”后的“屬性”按鈕,打開(kāi)“表和列”對(duì)話框,如圖3-16所示。圖3-16“表和列”對(duì)話框

(5)在“關(guān)系名”框中輸入關(guān)系名FK_sc_s,在“主鍵表”框中選擇表s,列名選擇sno,在“外鍵表”框中選擇表sc,列名選擇sno,設(shè)置sno時(shí)可參照s表sno列的外鍵完整性約束。單擊“確定”按鈕,返回“外鍵關(guān)系”對(duì)話框,如圖3-17所示。

(6)按同樣的方法,在“主鍵表”框中選擇表c,列名選擇cno,在“外鍵表”框中選擇表sc,列名選擇cno,設(shè)置cno時(shí)可參照c表cno列的外鍵完整性約束。

(7)單擊“關(guān)閉“按鈕,完成外鍵設(shè)置。圖3-17“外鍵關(guān)系”對(duì)話框方法二:

(1)啟動(dòng)SQL-MS,指向左側(cè)對(duì)象資源管理器窗口數(shù)據(jù)庫(kù)student中的“關(guān)系圖”節(jié)點(diǎn),單擊右鍵,打開(kāi)快捷菜單,選擇“新建數(shù)據(jù)庫(kù)關(guān)系圖”命令,打開(kāi)“關(guān)系圖”窗口和“添加表”對(duì)話框,如圖3-18所示。

(2)在“表”列表中分別選擇表s、c、sc,并單擊“添加”按鈕,將s、c、sc表添加到“關(guān)系圖”窗口中。單擊“關(guān)閉”按鈕,返回“關(guān)系圖”窗口,如圖3-19所示。圖3-18“添加表”對(duì)話框圖3-19“關(guān)系圖”窗口

(3)指向表sc的sno列,拖動(dòng)至表s,依次打開(kāi)“外鍵關(guān)系”、“表和列”對(duì)話框,單擊“確定”按鈕,參見(jiàn)圖3-15和圖3-16。指向表sc的cno列,拖動(dòng)至表c,依次打開(kāi)“外鍵關(guān)系”、“表和列”對(duì)話框,單擊“確定”按鈕。單擊“保存”圖標(biāo),打開(kāi)“選擇名稱”對(duì)話框,為新建的數(shù)據(jù)庫(kù)關(guān)系圖定義關(guān)系圖名,此處定義為sc_s_sc,如圖3-20所示。

(4)單擊“確定”按鈕,完成外鍵即表間關(guān)系設(shè)置。圖3-20“選擇名稱”對(duì)話框3.2.5刪除表

1.使用SQL語(yǔ)句

刪除表語(yǔ)句的基本語(yǔ)法格式如下:

DROPTABLE<表名>

實(shí)例3-14

刪除student數(shù)據(jù)庫(kù)中的sc表。

在查詢編輯器中輸入如圖3-21所示的SQL語(yǔ)句并執(zhí)行。圖3-21刪除數(shù)據(jù)庫(kù)student中的sc表

2.使用SQL-MS

(1)啟動(dòng)SQL-MS,單擊左側(cè)對(duì)象資源管理器窗口中要?jiǎng)h除的表所在數(shù)據(jù)庫(kù)中的“表”節(jié)點(diǎn),指向右側(cè)窗口中要?jiǎng)h除的表,單擊右鍵,打開(kāi)快捷菜單,選擇“刪除”命令,打開(kāi)“刪除對(duì)象”對(duì)話框,如圖3-22所示。

(2)單擊“確定”按鈕,指定表將被刪除。圖3-22“刪除對(duì)象”對(duì)話框

3.3編輯數(shù)據(jù)

3.3.1使用SQL-MS

(1)啟動(dòng)SQL-MS,單擊對(duì)象資源管理器左側(cè)窗口要編輯記錄的表所在數(shù)據(jù)庫(kù)中的“表”節(jié)點(diǎn),指向右側(cè)窗口中要編輯記錄的表,單擊右鍵,打開(kāi)快捷菜單,選擇“打開(kāi)表”命令,打開(kāi)“表中數(shù)據(jù)”窗口,如圖3-23所示。

(2)如果需要插入數(shù)據(jù),可以直接錄入;如果需要?jiǎng)h除記錄,可以單擊記錄第一個(gè)列前的按鈕選中該記錄,按Del鍵即可;如果需要修改數(shù)據(jù),可以單擊或?qū)⒐鈽?biāo)移至需要修改的位置,直接修改即可。

(3)編輯完畢,單擊“關(guān)閉”按鈕,保存編輯結(jié)果。圖3-23“表中數(shù)據(jù)”窗口3.3.2使用SQL語(yǔ)句

1.INSERT(插入記錄)語(yǔ)句

INSERT語(yǔ)句的基本語(yǔ)法格式有兩種。

格式一:

INSERT[INTO]<表名>[(<列名表>)]VALUES(<值列表>)

該語(yǔ)句完成將一條新記錄插入一個(gè)已經(jīng)存在的表中。

實(shí)例3-15

在表s中插入一學(xué)生,學(xué)號(hào)為“1001”,班級(jí)為“信息501”,姓名為“黃鵬”,性別為“男”,出生日期為“1981年10月12日”,住址為“江蘇省常州市”,電話為,電子信箱為“hp@163.net”。

在查詢編輯器中輸入如圖3-24所示的SQL語(yǔ)句并執(zhí)行。圖3-24插入所有列實(shí)例3-16

在表s中插入一學(xué)生,學(xué)號(hào)為“2001”,班級(jí)為“計(jì)應(yīng)501”,姓名為“張宇蛟”,性別為“男”,出生日期為“1984年11月16日”,電子信箱為“zyj@”。

在查詢編輯器中輸入如圖3-25所示的SQL語(yǔ)句并執(zhí)行。

格式二:

INSERT[INTO]<目標(biāo)表名>[(<列名表>)]

SELECT<列名表>FROM<源表名>WHERE<條件>

實(shí)例3-17

將表s的男生記錄插入表s_bak中。假設(shè)表s_bak已存在,且結(jié)構(gòu)與表s相同。

在查詢編輯器中輸入如圖3-26所示的SQL語(yǔ)句并執(zhí)行。圖3-25插入部分列圖3-26插入表中數(shù)據(jù)

2.?DELETE(刪除記錄)語(yǔ)句

DELETE語(yǔ)句的基本語(yǔ)法格式如下:

DELETE[FROM]<表名>[WHERE<條件>]

該語(yǔ)句完成刪除表中滿足條件的記錄。如果省略條件,則刪除所有記錄。

實(shí)例3-18

刪除表s_bak中的所有男生。

在查詢編輯器中輸入如圖3-27所示的SQL語(yǔ)句并執(zhí)行。圖3-27刪除記錄

3.?UPDATE(修改記錄)語(yǔ)句

UPDATE語(yǔ)句的基本語(yǔ)法格式有兩種。

格式一:

UPDATE<表名>SET<列名>=<表達(dá)式>[,…][WHERE<條件>]

該語(yǔ)句完成表中滿足條件的記錄,將表達(dá)式的值賦予指定列。如果省略條件,則默認(rèn)所有記錄,并可以一次給多個(gè)列賦值。

實(shí)例3-19

將表s中學(xué)號(hào)為“2001”的學(xué)生的住址改為“北京市”,電話為。

在查詢編輯器中輸入如圖3-28所示的SQL語(yǔ)句并執(zhí)行。圖3-28單表修改格式二:

UPDATE<目標(biāo)表名>SET<列名>=<表達(dá)式>[,…]

FROM<源表名>[WHERE<條件>]

格式二與格式一不同的是:條件和表達(dá)式中可以包含源表的列,實(shí)現(xiàn)用源表的數(shù)據(jù)修改目標(biāo)表的數(shù)據(jù),并可以用源表的數(shù)據(jù)作為修改目標(biāo)表的條件。

實(shí)例3-20

將所有選修了數(shù)據(jù)庫(kù)應(yīng)用課程的學(xué)生的成績(jī)加5分。

在查詢編輯器中輸入如圖3-29所示的SQL語(yǔ)句并執(zhí)行。圖3-29表間數(shù)據(jù)修改

3.4數(shù)據(jù)庫(kù)原理(一)——數(shù)據(jù)庫(kù)規(guī)范化設(shè)計(jì)

3.4.1關(guān)系模式的規(guī)范化問(wèn)題

1.關(guān)系模式的操作異常

在數(shù)據(jù)管理中,數(shù)據(jù)冗余是影響系統(tǒng)性能的大問(wèn)題。數(shù)據(jù)冗余是指同一個(gè)數(shù)據(jù)在系統(tǒng)中多次重復(fù)出現(xiàn)。在文件系統(tǒng)中,由于文件之間沒(méi)有聯(lián)系,將會(huì)引起一個(gè)數(shù)據(jù)在多個(gè)文件中出現(xiàn)。數(shù)據(jù)庫(kù)系統(tǒng)雖然克服了文件系統(tǒng)的這種缺陷,但對(duì)于數(shù)據(jù)冗余問(wèn)題仍然應(yīng)加以關(guān)注。

實(shí)例3-21

設(shè)有“學(xué)生選課”關(guān)系模式R(sno,sname,sex,cno,cname,score),其屬性分別表示學(xué)生的學(xué)號(hào)、姓名、性別、選修課程的課程編號(hào)、課程名、成績(jī)。具體實(shí)例見(jiàn)表3-4。

2.關(guān)系模式的規(guī)范化

對(duì)于一個(gè)現(xiàn)實(shí)問(wèn)題,如果將所有屬性組成的關(guān)系模式記為R(U),?關(guān)系r是關(guān)系模式R(U)的實(shí)例,則稱關(guān)系模式R(U)為泛關(guān)系模式(UniversalRelationSchema),關(guān)系r為泛關(guān)系(UniversalRelation)。

一般來(lái)講,R(U)和r往往不是恰當(dāng)?shù)男问?,必須用一個(gè)關(guān)系模式的集合ρ?={R1,…,Rk}代替R(U),其中每個(gè)Ri的屬性是U的子集,且R1∪…∪Rk?=?U(此處Ri表示關(guān)系R(U)的屬性集),則ρ稱為數(shù)據(jù)庫(kù)模式(DatabaseSchema),其中每一個(gè)關(guān)系模式Ri實(shí)例的集合σ?=?<r1,…,rk>稱為數(shù)據(jù)庫(kù)實(shí)例(簡(jiǎn)稱為數(shù)據(jù)庫(kù))。

3.符號(hào)規(guī)定

為表示方便,對(duì)使用的符號(hào)作以下規(guī)定:

(1)用英文字母首部的大寫(xiě)字母“A,B,C,…”表示單個(gè)屬性。

(2)用英文字母尾部的大寫(xiě)字母“…,U,V,W,X,Y,Z”表示屬性集。

(3)用大寫(xiě)英文字母R、S表示關(guān)系模式,用小寫(xiě)英文字母r、s表示關(guān)系。

(4)對(duì)關(guān)系模式R(A,B,C),可以表示為R(ABC)或{A,B,C},甚至ABC。3.4.2函數(shù)依賴

1.函數(shù)依賴的定義

在數(shù)據(jù)庫(kù)中,屬性之間是有聯(lián)系的,例如每個(gè)學(xué)生只有一個(gè)姓名,每個(gè)學(xué)生選修一門(mén)課程只能有一個(gè)成績(jī)等。這類聯(lián)系稱為函數(shù)依賴。

定義3.1

設(shè)關(guān)系模式R(U),X、YU,只要r是R的當(dāng)前關(guān)系,對(duì)于r的任意兩個(gè)元組t1、t2,若t1[X]?=?t2[X],則t1[Y]?=?t2[Y],故稱X函數(shù)決定Y函數(shù)或Y函數(shù)依賴于X函數(shù),記作X→Y。這種依賴稱為函數(shù)依賴(FunctionalDependency,F(xiàn)D)。實(shí)例3-22

對(duì)實(shí)例3-21的“學(xué)生選課”關(guān)系模式R,如果規(guī)定每個(gè)學(xué)生只能有一個(gè)姓名,每個(gè)課程號(hào)只能對(duì)應(yīng)一門(mén)課程,則有以下FD:

sno→sname

cno→cname

由于每個(gè)學(xué)生每選修一門(mén)課程時(shí)只能有一個(gè)成績(jī),則有以下FD:

(sno,cno)→score

當(dāng)然,還有以下FD:

sno→sex

sno→(sname,sex)實(shí)例3-23

設(shè)關(guān)系模式R(ABCD),假設(shè)A與B為一對(duì)多聯(lián)系,而C與D為一對(duì)一聯(lián)系,試寫(xiě)出相應(yīng)的FD。

由于A與B為一對(duì)多聯(lián)系,即每個(gè)A值有多個(gè)B值對(duì)應(yīng),即B值決定A值,可寫(xiě)出FD:B→A。

同理,由于C與D為一對(duì)一聯(lián)系,可寫(xiě)出FD:D→C和C→D。

2.函數(shù)依賴和關(guān)鍵碼的關(guān)系

定義3.2

設(shè)關(guān)系模式R(U),XU。如果X→U成立,則稱X是R的超鍵。如果X→U成立且對(duì)X的任一子集X1,有X1→U不成立,則稱X是R的候選鍵。

實(shí)例3-24

由實(shí)例3-22關(guān)系模式R的分析,有以下FD:

(sno,cno)→(sno,sname,sex,cno,cname,score)

即(sno,cno)為關(guān)系模式R(U)的候選鍵。

雖然有以下FD:

(sno,sname,cno)→(sno,sname,sex,cno,cname,score)

但(sno,sname,cno)只是關(guān)系模式R(U)的超鍵而非候選鍵,因?yàn)?sno,sname,cno)含多余屬性sname。定義3.3

對(duì)于FDX→Y,如果YX,則稱X→Y是“平凡的FD”,反之稱“非平凡的FD”。

正如名稱所示,平凡的FD是不可能不成立的,沒(méi)有實(shí)際意義,只有非平凡的FD才“真正”和數(shù)據(jù)完整性約束條件相關(guān),所以要研究的是非平凡的FD。3.4.3屬性集的閉包

1.函數(shù)依賴集與函數(shù)依賴集的閉包

關(guān)系模式R(U)上成立的FD的集合稱為函數(shù)依賴集(簡(jiǎn)記為F),而由關(guān)系模式R(U)上所有成立的FD組成的集合稱為函數(shù)依賴集的閉包,記為F+。

實(shí)例3-25

對(duì)于關(guān)系模式R(ABC),F(xiàn)?=?{A→B,B→C},求F+。

根據(jù)FD的定義,可推出

F+?=?{f→f,A→f,A→A,A→B,A→C,A→AB,A→BC,A→ABC,…}

共有43個(gè)FD。其中,f表示空屬性集。

2.屬性集的閉包定義

定義3.4

設(shè)F為關(guān)系模式R(U)的FD集,則F+中所有X→A(XU)的A的集合稱為X的閉包,記為X+。

根據(jù)定義,顯然X+表示了所有X可以決定的屬性。由此可以得到以下定理:

定理3.1X→Y屬于F+的充要條件是YX+。

即要判斷X→Y是否屬于F+,只要求出X+就可以了。

同時(shí)可以得到以下結(jié)論:

若X+包含R的所有屬性,則X是R的超鍵;當(dāng)X不可約(去掉任何一個(gè)屬性即不成立)時(shí),則X為R的候選鍵。實(shí)例3-26

對(duì)實(shí)例3-25的關(guān)系模式R,求其候選鍵并判斷A→C和B→A是否屬于F+。

由屬性集閉包的定義可知:

A+=ABC,B+=BC,C+=C

由于A+包含R的所有屬性,則R的超鍵為A。

由于C

A+而A

B+,則A→C

F+而B(niǎo)→AF+。

3.屬性集閉包算法

算法3.1

設(shè)F為關(guān)系模式R(U)的FD集,求解屬性A(A∈U)的閉包算法如下:

(1)將A置入A+。

(2)對(duì)F的每一FD,若左部所有屬性屬于A+,則將右部所有屬性置入A+。

(3)重復(fù)第(2)步至A+封閉。

算法3.2

設(shè)F為關(guān)系模式R(U)的FD集,求解屬性集X(X

U)的閉包算法為:

(1)先求X中每個(gè)單個(gè)屬性的閉包。

(2)若F中無(wú)左部為X的FD,則X+為X中各屬性閉包的并;否則按算法3.1(將A擴(kuò)展為屬性集)計(jì)算。實(shí)例3-27

對(duì)于關(guān)系模式R(ABCD),F(xiàn)={A→B,B→C,D→B},求其候選鍵。

(1)求A+。

①?A+=A。

②由A→B,而A∈A+,則A+=AB。

③由B→C,而B(niǎo)∈A+,則A+=ABC。

④?A+封閉,即A+=ABC。

(2)求B+、C+、D+。

按步驟(1)可得:B+=BC,C+=C,D+=BCD。

(3)求其候選鍵。

顯然,R的候選鍵為AD。實(shí)例3-28

對(duì)于關(guān)系模式R(ABC),F(xiàn)?=?{A→BC,BC→A},求其候選鍵。

(1)求屬性閉包。

由實(shí)例3-27可得:A+=ABC,B+=B,C+=C。

(2)求屬性集閉包。

由BC→A,則(BC)+=ABC,其余屬性集閉包為屬性閉包的并。

(3)求候選鍵。

顯然,R的候選鍵為A和BC。3.4.4關(guān)系模式的范式

1.第一范式(1NF)

定義3.5

如果關(guān)系模式R中每一屬性的值域?yàn)樵拥模瑒t稱R屬于第一范式(FirstNormalForm,簡(jiǎn)記為1NF)模式。

滿足1NF的關(guān)系稱為規(guī)范化的關(guān)系,否則稱為非規(guī)范化的關(guān)系。關(guān)系數(shù)據(jù)庫(kù)研究的關(guān)系都是規(guī)范化的關(guān)系。1NF是關(guān)系模式應(yīng)具備的最起碼的條件。如果不加特殊說(shuō)明,關(guān)系模式均屬于1NF。

2.第二范式(2NF)

如果一個(gè)關(guān)系模式是1NF,但關(guān)系模式中存在局部依賴,則關(guān)系模式中將會(huì)有冗余現(xiàn)象,因此需進(jìn)一步規(guī)范化。

定義3.6

若R1NF,且每個(gè)非主屬性完全依賴于候選鍵,則稱R屬于2NF模式。其中,屬于候選鍵的屬性稱為主屬性,不屬于候選鍵的屬性稱為非主屬性;完全函數(shù)依賴為左部不可約的函數(shù)依賴,局部函數(shù)依賴為左部可約的函數(shù)依賴。

實(shí)例3-29

對(duì)于關(guān)系模式R(sno,cno,score,tno,taddress)的屬性分別表示學(xué)生編號(hào)、選修課程的課程號(hào)、成績(jī)、任課教師編號(hào)、教師地址,約定“一門(mén)課程只能由一個(gè)教師帶”,試判斷R是否屬于2NF模式。算法3.3

設(shè)關(guān)系模式R(WXYZ),存在FDX→Y(即Y局部依賴于候選鍵),則應(yīng)把R分解為模式:R1(WXZ)和R2(XY)。

實(shí)例3-30

對(duì)于實(shí)例3-29的關(guān)系模式R,R

2NF,按算法3.3,可以將R分解為R1(sno,cno,score)和R2(cno,tno,taddress),消除了局部依賴(sno,cno)→(tno,taddress),且R1、R2

2NF。

3.第三范式(3NF)

定義3.7

若R1NF,對(duì)于F中每個(gè)非平凡的FDX→Y,都有X是R的超鍵,或Y中每個(gè)屬性均為主屬性,則稱R屬于3NF模式。

實(shí)例3-31

對(duì)于實(shí)例3-30的關(guān)系模式R1、R2,試判斷R2是否屬于3NF模式。

對(duì)R2有FD:tno→taddress,而taddress為非主屬性且tno為非超鍵,即R2

3NF。

實(shí)際上,3NF要求所有非主屬性不能依賴于非候選鍵,當(dāng)非主屬性依賴于某個(gè)非候選鍵時(shí),該非候選鍵值一旦相同,非主屬性值也必然相同,則產(chǎn)生數(shù)據(jù)冗余。如對(duì)實(shí)例3-31的關(guān)系模式R2,當(dāng)同一教師帶多門(mén)課程時(shí),taddress冗余。下面給出關(guān)系模式中消除非主屬性對(duì)非候選鍵的依賴的算法。

算法3.4

設(shè)關(guān)系模式R(WXYZ),若存在FDX→Y(即Y依賴于非候選鍵),則應(yīng)把R分解為模式:R1(WXZ)和R2(XY)。

實(shí)例3-32

對(duì)于實(shí)例3-30的關(guān)系模式R2,R23NF,按算法3.4,可以將R分解為

R21(cno,tno)和R22(tno,taddress),且R21、R22

3NF。

最終,將非2NF模式的R(sno,cno,score,tno,taddress)分解為3NF模式的R1(sno,cno,score)、R2(cno,tno)、R3(tno,taddress)。小結(jié)

本章講述了SQLServer2005表的相關(guān)知識(shí),主要包括以下內(nèi)容:

(1)?ER模型;

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

溫馨提示

  • 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)論