關聯(lián)式資料庫課件_第1頁
關聯(lián)式資料庫課件_第2頁
關聯(lián)式資料庫課件_第3頁
關聯(lián)式資料庫課件_第4頁
關聯(lián)式資料庫課件_第5頁
已閱讀5頁,還剩253頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第二章

關聯(lián)式資料庫第二章

關聯(lián)式資料庫本章學習目標

1.瞭解何謂關聯(lián)式資料庫(RelationalDatabase)及其定義。2.瞭解關聯(lián)式資料庫的各種專有名詞及

三種關聯(lián)模型。3.瞭解關聯(lián)式資料完整性中的三種整合

性法則。本章學習目標1.瞭解何謂關聯(lián)式資料庫(Relational本章內(nèi)容2-1關聯(lián)式資料庫(RelationDatabase)2-2鍵值屬性2-3關聯(lián)式資料庫的種類2-4關聯(lián)式資料完整性本章內(nèi)容2-1關聯(lián)式資料庫(RelationData2.1關聯(lián)式資料庫(Relation

Database)

1.是由一群相互關係的正規(guī)化關聯(lián)(表格)所組成。2.關聯(lián)(表格)之間是透過相同的欄位值(即外鍵FK;ForeignKey)來連繫。3.關聯(lián)(表格)中的所有屬性內(nèi)含值都是基元值(AtomicValue)

。2.1關聯(lián)式資料庫(Relation

關聯(lián)式資料庫課件2-1關聯(lián)式資料庫(RelationDatabase)假設學校行政系統(tǒng)中有一個尚未分割的「學籍資料表」,如下表所示:

由上表中,我們可以清楚看出多筆資料重複現(xiàn)象,如果有某一筆資料打錯,將會導致資料不一致現(xiàn)象。例如:在上表中的第5筆記錄的系主任,應該是「李碩安」卻打成「李安」。2-1關聯(lián)式資料庫(RelationDatabase)因此,我們就必須要將原始的「學籍資料表」分割成數(shù)個不重複的資料表,再利用「關聯(lián)式資料庫」的方法來進行資料表的關聯(lián)。因此,我們就必須要將原始的「學籍資料表」分割因此,我們就必須要將原始的「學籍資料表」分割成數(shù)個不重複的資料表,再利用「關聯(lián)式資料庫」的方法來進行資料表的關聯(lián)。何謂「關聯(lián)式資料庫」呢?它是由兩個或兩個以上的資料表組合而成。其目的:1.節(jié)省重複輸入的時間與儲存空間。2.確保異動資料(新增、修改、刪除)時的一致性及完整性。因此,我們必須將各種資料依照性質(zhì)的不同(如:學籍資料、選課資料,課程資料,學習歷程資料等…‥),分別存放在幾個不同的表格中,表格與表格之間的關係,則以共同的欄位值(如:「學號」欄位…)相互連結(jié),以這種方式來存放資料的資料庫,在電腦術語中,稱為「關聯(lián)式資料庫(RelationalDatabase)」。因此,我們就必須要將原始的「學籍資料表」分割【定義】1.是由一群相互關係的正規(guī)化關聯(lián)(表格)所組成。2.關聯(lián)(表格)之間是透過相同的欄位值(即外鍵參考主鍵)來連繫。3.關聯(lián)(表格)中的所有屬性內(nèi)含值都是基元值(AtomicValue)。因此,我們可以將上表中的「學籍資料表」分割為「學生資料表」與「科系代碼表」,如何產(chǎn)生關聯(lián)式資料庫呢?它是透過兩個資料表的相同欄位值(即系碼)來進行連結(jié)。如下所示:註:「主鍵」與「外鍵」專有名詞會有後面章節(jié)中詳細介紹?!径x】【優(yōu)點】1.節(jié)省記憶體空間相同的資料記錄不須要再重複輸入。2.提高行政效率因為資料不須再重複輸入,故可以節(jié)省行政人員的輸入時間。3.達成資料的一致性因為資料不須再重複輸入,故可以減少多次輸入產(chǎn)生人為的錯誤?!緝?yōu)點】關聯(lián)式資料庫模型的相關術語通常是用來說明資料庫系統(tǒng)的相關理論,而SQLServer或Access等資料庫管理系統(tǒng)所使用的資料庫相關名詞是利用另成一套術語,不過這些名詞或術語都代表相同意義,如表2-1所示:表2-1關聯(lián)名詞比較表【關聯(lián)名詞】關聯(lián)式資料模型SQLServer或Access關聯(lián)(Relation)表格(Table)值組(Tuple)橫列(Row)或記錄(Record)屬性(Attribute)直欄(Column)或欄位(Filed)基數(shù)(Cardinality)記錄個數(shù)(numberofRecord)主鍵(PrimaryKey)唯一識別(uniqueidentifier)定義域(Domain)合法值群(poollegalvalues)關聯(lián)式資料庫模型的相關術語通常是用來說明資料庫系統(tǒng)的相關理論圖示說明:【重要專有名詞】1.資料表(Table):又稱為表格,它是真正儲存資料的地方。它可視為特

定主題的資料集合。並且它是由「資料行」與「資料列」的二維表格

組合而成。

例如:上表中的「學生資料表」。2.資料行(Column):是指資料表中的某些「欄位」,它是以「垂直」方

式來呈現(xiàn)。

例如:上表中的「學號」、「姓名」等。3.資料列(Row):是指資料表中某些「記錄」,它是以「水平」方式來呈現(xiàn)。

例如:上表中的第一筆記錄。#1S0001,一心,D001。圖示說明:圖示說明:【重要專有名詞】4.主鍵(

PrimaryKey;PK):是指用來識別記錄的唯一性,它不可以重複及

空值(Null)。

例如:上表中的學生資料表中的「學號」及科系代碼表中的「系碼」5.外鍵(

ForeignKey;FK):是指用來建立資料表之間的關係,其外鍵內(nèi)含值

必須要與另一個資料表的主鍵相同。例如:上表中的學生資料表中的「系碼」。6.關聯(lián)性(Relationship):在資料表之間,透過外鍵來參考另一個資料

表的主鍵,如果具有相同欄位值就可以進行關聯(lián)。例如:上表中的學生資料表中的「系碼」與科系代碼表中的「系碼」都具有

相同欄位值,因此,就可以進行關聯(lián)。圖示說明:在關聯(lián)式資料庫中,每一個關聯(lián)(表格)會有許多不同的鍵值屬性(KeyAttribute),因此,我們可以分成兩個部份來探討:一、屬性(Attribute):是指一般屬性或欄位。如下圖所示。二、鍵值屬性(KeyAttribute):是指由一個或一個以上的屬性所組成,

並且在一個關聯(lián)中,必須要具有「唯一性」的屬性來當作「鍵(Key)」。例如:在關聯(lián)式資料庫中,常見的鍵(Key)可分為:超鍵、候選鍵、主

鍵及交替鍵,其各鍵的關係,如下圖所示。2-2鍵值屬性在關聯(lián)式資料庫中,每一個關聯(lián)(表格)會有許多不【定義】用來描述實體的性質(zhì)(Property)?!纠纭?/p>

學號、姓名、「性別」都是用來描述學生實體的性質(zhì),並且每一個屬

性一定要有一個定義域(Domain)(亦即資料類型、範圍大小等)。其中,

「性別」屬性的內(nèi)含值,必須是「男生」或「女生」,而不能超出定

義域(Domain)的合法值群?!痉诸悺?.簡單屬性(SimpleAttribute)2.複合屬性(CompositeAttribute)3.衍生屬性(DerivedAttribute)2-2.1屬性(Attribute)【定義】用來描述實體的性質(zhì)(Property)。2-2.1【定義】已經(jīng)無法再繼續(xù)切割成其他有意義的單位,亦即該屬性為

基元值(AtomicValue)?!纠纭俊笇W號」屬性便是「簡單屬性」。1.簡單屬性(SimpleAttribute)【定義】已經(jīng)無法再繼續(xù)切割成其他有意義的單位,亦即該屬性為1【定義】由兩個或兩個以上的其他屬性的值所組成?!纠纭俊傅刂贰箤傩允怯蓞^(qū)域號碼、縣市、鄉(xiāng)鎮(zhèn)、路、巷、弄、號等各個屬性所組成。

【適用時機】戶政事務查詢,房屋仲介網(wǎng)站…

那些屬性是屬於「複合屬性」呢?必須要視需求而定。一般使用者在設定客戶資料表或?qū)W生資料表時,「地址」屬性是視為「簡單屬性」?!緝?yōu)點】大量查詢時,較快速。where地址Like‘*苓雅區(qū)*’速度較慢

where區(qū)域=‘苓雅區(qū)’速度較快2.複合屬性(CompositeAttribute)【定義】由兩個或兩個以上的其他屬性的值所組成。2.複合屬性(【定義】指可以經(jīng)由某種方式的計算或推論而獲得的?!纠?】「年齡」屬性便屬於「衍生屬性」。以實際的年齡為例,可以由「目前的系統(tǒng)時間」減去「生日」屬性的

值,便可換算出「年齡」屬性的值。

年齡=目前的系統(tǒng)時間─生日3.衍生屬性(DerivedAttribute)DimAgeAsIntegerAge=Year(Now())-Val(TextBox1.Text)Label3.Text="您今年"&Age&"歲”程式名稱:ch2\ch2-2\ch2-2.slnSELECTDATEDIFF(YY,'1971/10/9',getdate());【定義】3.衍生屬性(DerivedAttribute)D【例如2】「性別」屬性也可以當作「衍生屬性」。假設使用者輸入介面中有「身分證字號」欄位時,則我們可以判斷使用者的性別是「男生」或「女生」?!咀鞣ā枯斎隝D,判斷第二位數(shù)字,如果是’1’代表「男生」如果是’2’代表「女生」DimIDAsStringDimSex_wordAsStringID=TextBox1.TextSex_word=Mid(ID,2,1)IfSex_word="1"ThenLabel3.Text="您是男生"ElseLabel3.Text="您是女生"EndIf【例如2】「性別」屬性也可以當作「衍生屬性」?;旧?,我們會在每一個資料表中,選出一個具有唯一性的欄位來當作「主鍵」,但是,在一個資料表中,如果找不到具有唯一性的欄位時,我們也可以選出兩個或兩個以上的欄位組合起來,以作為唯一識別資料的欄位?!径x】是指在一個資料表中,選出兩個或兩個以上的欄位組合起來,以作為唯一識別資料的欄位,因此,我們可以稱這種組合出來的欄位,就是「超鍵」。在一個關聯(lián)(表格)中至少有一個「超鍵」,就是所有屬性的集合。2-2.2超鍵(SuperKey)基本上,我們會在每一個資料表中,選出一個具有【例如】以「學生資料表」為例,若是全班的學生姓名中,若有人同名同姓時(重複),則我們可以搭配學生的學號,讓「學生的學號」與「學生的姓名」兩欄位結(jié)合起來(亦即「學號+姓名」)來產(chǎn)生新的鍵。所以,{姓名,學號}是一個超鍵。因為不可能有兩個學生的姓名與學號皆相同。{身份證字號}也是一個超鍵。設定{姓名,學號}為超鍵同名同姓【例如】設定{姓名,學號}為超鍵同名同姓【同理】

{姓名,學號,身份證字號,年齡,系別},{姓名,學號,身份證字號,年齡}也都是超鍵。因為它可以造成唯一性的限制?!痉治觥?.{年齡}或{姓名}都不是「超鍵」。2.最大的「超鍵」是所有屬性的集合;

最小的「超鍵」則是關聯(lián)的主鍵?!就怼吭陉P聯(lián)式資料庫模型中,將每一個資料表視為一個「實體」,而每一個實體利用「屬性」描述之,而這些屬性就稱為「鍵值」。其中用來識別資料表中記錄的唯一值的鍵值,稱為「主鍵」。【定義】1.從候選鍵中選擇一個用來唯一識別值組(記錄)的鍵,稱為主鍵。2.在關聯(lián)綱要裡,我們會在主鍵的屬性名稱加一個底線。3.在一個關聯(lián)中,只有一個主鍵,若候選鍵未被選為主鍵時,則稱為

「交替鍵(AlternateKey)」。4.主鍵之鍵值不可為虛值(NullValue)

。5.在建立資料表時一般都是以「P.K.」來代表主鍵。2-2.3主鍵(PrimaryKey)在關聯(lián)式資料庫模型中,將每一個資料表視為一個【舉例】學生資料表(學號,姓名,生日,身分證字號,科系)(1)候選鍵:(學號)或(身分證字號)(2)主鍵:學號(3)交替鍵:身分證字號【舉例】學生資料表(學號,姓名,生日,身分證字號,科系)

【如何挑選主鍵?】基本上,我們要從多個鍵值中挑選「主鍵」時,會依循以下三個原則:1.固定不會再變更的值在挑選「主鍵」時,必須要找永遠不會被變更的欄位,否則會增加爾

後的管理和維護資料的困難度與複雜性。例如:「學號」與「身份證字號」在決定之後,幾乎不會再改變。2.單一的屬性在一個資料表中,最好只選取「單一屬性」的候選鍵作為主鍵,因為

可以節(jié)省記憶體空間及提高執(zhí)行效率。

例如:{姓名+學號}與{學號},雖然二者都具有唯一性,但是後者{學號}是單一屬性。3.不可以為空值或重覆依照「關聯(lián)式資料完整性規(guī)則」,主鍵的鍵值不可以重覆,也不可以

為空值(NULL)。例如:{姓名}欄位就不適合當作主鍵欄位。因為可能會重複?!救绾翁暨x主鍵?】以圖2-1關聯(lián)式資料庫為例:步驟一:先建立一個「學生資料表」,並且包括「學號」、「姓名」及「系碼」

三個欄位名稱,如下圖所示:【SQLServer上機實作】以圖2-1關聯(lián)式資料庫為例:【SQLServer上機實作步驟二:將滑鼠移到欲設定「主鍵」欄位名稱的最左邊,再按功能表中

的「設定主索引鍵」圖示即可。設定後的結(jié)果如下圖示:說明:「學號」欄位名稱的最左邊就會自動出現(xiàn)一支黃色的鑰匙,即代表

「學號」設定為「主鍵」。步驟二:將滑鼠移到欲設定「主鍵」欄位名稱的最左邊,再按功能表步驟三:請在學生資料表中先輸入五筆記錄如下圖示:再新增第六筆記錄,其學號為S0001的李安,系碼為D001的學生。以證明主鍵是具有唯一性,不可以重複的。因此,SQLServer就會馬上出現(xiàn)錯誤的畫面,即代表第六筆無法新增。如下圖所示:第六筆無法新增步驟三:請在學生資料表中先輸入五筆記錄如下圖示:第六筆無法新【定義】是指資料表中的主鍵,是由兩個或兩個欄位以上所組成,這種

主鍵稱為複合鍵(CompositeKey)。【使用時機】

當表格中某一欄位的值無法區(qū)分資料記錄時,可以使用這種方法。【例如】在表2-2a中「縣市」的欄位值有重複,無法區(qū)分出每一筆記錄,所以「縣市」欄位不能當作主鍵欄位。因此,必須要把「縣市」與「區(qū)域」兩個欄位組合在一起,當作主鍵欄位。如表2-2b所示。2-2.4複合鍵(CompositeKey)重複重複【定義】是指資料表中的主鍵,是由兩個或兩個欄位以上所組成,這以上面的例子為例:步驟一:先建立一個「城市區(qū)域資料表」,並且包括「縣市」及「區(qū)域」兩個

欄位名稱,並輸入四筆記錄。如下圖所示:【SQLServer上機實作】以上面的例子為例:【SQLServer上機實作】步驟二:將滑鼠移到欲設定「主鍵」欄位名稱的最左邊,按住滑鼠左鍵往下選取「縣市」及「區(qū)域」兩個欄位名稱,再按功能表中的「設定主索引鍵」圖示即可。設定後的結(jié)果如下圖示:說明:「縣市」及「區(qū)域」兩個欄位名稱的最左邊就會各出現(xiàn)一支黃色的鑰匙,

即代表「縣市」及「區(qū)域」設定為「複合鍵」。步驟二:將滑鼠移到欲設定「主鍵」欄位名稱的最左邊,按住滑鼠左【定義】候選鍵就是主鍵的候選人,並且也是關聯(lián)表的屬性子集所組成?!緱l件】一個屬性(欄位)是要成為候選鍵,則必須同時要符合下列兩項條件:1.具有唯一性

是指在一個關聯(lián)表中,用來唯一識別資料記錄的欄位。

例如:超鍵(SuperKey)。但可以是由多個欄位組合{縣市+區(qū)域}而成。2.具有最小性

是指除了符合「唯一性」的條件之外,還必須要在該「屬性子集」中

移除任一個屬性之後,不再符合唯一性。亦即鍵值欄位個數(shù)為最小。例如:

{縣市+區(qū)域}組合成來符合「唯一性」的條件。並且在移除任

一個屬性{區(qū)域}之後,{縣市}不再符合唯一性。因此,{縣市+區(qū)域}就是候選鍵。2-2.5候選鍵(CandidateKey)【定義】候選鍵就是主鍵的候選人,並且也是關聯(lián)表的屬性子集所組【特性】1.候選鍵可以唯一識別值組(記錄),大部份關聯(lián)都只有一個候選鍵。2.若候選鍵只包含一個屬性時,稱為簡單(simple)候選鍵。

例如:{學號}

若包含兩個或兩個以上屬性時,稱為複合(composite)候選鍵。

例如:{縣市+區(qū)域}【特性】【舉例1】假設現(xiàn)在有一個「學生資料表」,其相關的欄位如下所示:學生資料表(學號,姓名,生日,身分證字號,科系)

請找出此資料表中的兩個「候選鍵」?!窘獯稹康谝粋€候選鍵(1)找出「具有唯一性」的欄位

{學號+姓名}共同組成時,滿足唯一性。(2)檢查是否「具有最小性」但是{學號+姓名}

不滿足最小性,因為在移去「姓名」屬性之後,

「學號」仍然具有唯一性。

因此,我們必須要縮減為最小欄位為{學號},所以找到第一個候選鍵?!九e例1】假設現(xiàn)在有一個「學生資料表」,其相關的欄位如下所示學生資料表(學號,姓名,生日,身分證字號,科系)【解答】第二個候選鍵(1)找出「具有唯一性」的欄位

{身分證字號+科系}共同組成時,滿足唯一性。(2)檢查是否「具有最小性」但是{身分證字號+科系}

不滿足最小性,因為在移去「科系」屬性

之後,「身分證字號」仍然具有唯一性。

因此,我們必須要縮減為最小欄位為{身分證字號},

所以找到第二個候選鍵。所以,{學號}或{身分證字號}皆為「候選鍵」學生資料表(學號,姓名,生日,身分證字號,科系)【舉例2】假設現(xiàn)在有一個「通訊錄資料表」,其相關的欄位如下所示:

通訊錄資料表(姓名,生日,電話,地址)

請找出此資料表中的一個「候選鍵」。【解答】(1)找出「具有唯一性」的欄位{姓名+生日}共同組成時,滿足唯一性。(2)檢查是否「具有最小性」並且{姓名+生日}也滿足最小性,因為在移去「生日」屬性之後,

「姓名」就不具有唯一性。

因此,{姓名+生日}兩個欄位組合,缺一不可,所以這種候選鍵又稱

為「複合式候選鍵」。所以,{姓名+生日}為「複合式候選鍵」【舉例2】假設現(xiàn)在有一個「通訊錄資料表」,其相關的欄位如下所問題?問題?

在關聯(lián)式資料庫中,任兩個資料表要進行關聯(lián)(對應)時,必須要透過「外來鍵」參考「主鍵」才能建立,其中「主鍵」值的所在資料表稱為「父關聯(lián)」,而「外來鍵」值的所在資料表稱為「子關聯(lián)」?!径x】

外來鍵是指「父關聯(lián)嵌入的鍵」,並且外來鍵在父關聯(lián)中扮演「主鍵」的角色。因此,外來鍵一定會存放另一個資料表的主鍵,主要目的是用來確定資料的參考完整性。所以,當父關聯(lián)的「主鍵」值不存在時,則「子關聯(lián)」的「外來鍵」值也不可能存在。2-2.6外來鍵(ForeignKey)

父關聯(lián)子關聯(lián)在關聯(lián)式資料庫中,任兩個資料表要進行關聯(lián)(對【外來鍵的特性】1.「子關聯(lián)」的外鍵必須對應「父關聯(lián)」的主鍵。2.外鍵是用來建立「子關聯(lián)」與「父關聯(lián)」的連結(jié)關係。例如:張三同學可以找到對應的系主任。說明:在SQL語言中,通常是「主鍵值=外來鍵值」當作條件式例如:在SELECT之WHERE子句中撰寫如下:說明:以上SQL指令是用來聯(lián)結(jié)「學生資料表」和「科系代碼表」兩個資料表。學生資料表.系碼=科系代碼表.系碼父關聯(lián)子關聯(lián)嵌入?yún)⒖肌就鈦礞I的特性】學生資料表.系碼=科系代碼表.系碼父關聯(lián)子關【外來鍵的特性】<續(xù)>3.外來鍵和「父關聯(lián)」的主鍵欄位必須要具有相同定義域,亦即相同的

資料型態(tài)和欄位長度,但名稱則可以不相同?!九e例1】相同的資料型態(tài)和欄位長度假設現(xiàn)在有一個關聯(lián)圖如下:

其中,「科系代碼表」的「系碼」欄位的資料類型為「nvarchar(4)」,現(xiàn)在欲改為「nchar(10)」的資料類型,則會出現(xiàn)以下的錯誤產(chǎn)生:【外來鍵的特性】<續(xù)>【舉例2】外來鍵和「父關聯(lián)」的主鍵欄位名稱則可以不相同假設現(xiàn)在有一個關聯(lián)圖如下:

其中,「科系代碼表」的「系碼」欄位名稱,現(xiàn)在欲改為「科系代碼」欄位名稱,則是可以的。如下圖所示:註:因此,我們可以清楚得知,「子關聯(lián)」的外來鍵參考「父關聯(lián)」

的主鍵時,是透過「相同的欄位值」。而「非相同的欄位名稱」【舉例2】外來鍵和「父關聯(lián)」的主鍵欄位名稱則可以不相同【外來鍵的特性】<續(xù)>4.外來鍵的欄位值可以是重覆值或空值(NULL)。(1)「重覆值」的例子說明:在上表中,代表張三與李四都是就讀「資工系」父關聯(lián)子關聯(lián)重覆值參考【外來鍵的特性】<續(xù)>父關聯(lián)子關聯(lián)重覆值參考【外來鍵的特性】<續(xù)>4.外來鍵的欄位值可以是重覆值或空值(NULL)。(2)空值(NULL)的例子說明:在上表中,代表王五尚未決定要就讀那一個科系父關聯(lián)子關聯(lián)參考空值【外來鍵的特性】<續(xù)>父關聯(lián)子關聯(lián)參考空值1.父關聯(lián)表中的「主鍵」值,一定不能為空(Null),也不能有重複現(xiàn)象。2.子關聯(lián)表中的「外鍵」值,可以為空(Null),也可以有重複現(xiàn)象。【歸納主鍵與外鍵的關係】1.父關聯(lián)表中的「主鍵」值,一定不能為空(Null),也不能以上面的例子為例:步驟一:先建立一個「學生資料表」與「科系代碼表」,如下圖所示:【SQLServer上機實作】學生資料表科系代碼表以上面的例子為例:【SQLServer上機實作】學生資料步驟二:在「ch2_DB」資料庫中的「資料庫圖表」上,按下「右鍵」之後,再點選「新增資料庫圖表」,如下圖所示:按「右鍵」步驟二:在「ch2_DB」資料庫中的「資料庫圖表」上,按下「步驟三:在「加入資料表」對話方塊中,滑鼠先移到「科系代碼表」上,按住「Ctrl」鍵,再點選「學生資料表」之後,再按「加入」鈕,最後再按「關閉」鈕即可。步驟三:在「加入資料表」對話方塊中,滑鼠先移到「科系代碼表」步驟四:顯示兩個資料表準備作關聯(lián)圖,而在每一個資料表中都有一個比較粗體的欄位名稱,即所謂「主鍵」,也就是具有唯一性的欄位。步驟五:在上圖中,請將滑鼠移到「科系代碼表」內(nèi)的「系碼」欄位上(即主鍵),按住滑鼠左鍵拖曳到「學生資料表」內(nèi)的「系碼」欄位上(即外鍵),此時便會出現(xiàn)一條長條形的方塊之後,放掉滑鼠左鍵,此時,

馬上出現(xiàn)一個「資料表和資料行」之編輯關聯(lián)對話方塊。步驟四:顯示兩個資料表準備作關聯(lián)圖,而在每一個資料表中都有一在按「確定」鈕之後,即可建立「學生資料表」與「科系代碼表」的資料庫關聯(lián)圖了。如下圖所示:主鍵外鍵主鍵外鍵步驟六:儲存資料庫關聯(lián)圖名稱。在建立完成資料庫關聯(lián)圖之後,再按工具列上的「儲存」鈕之後,會出現(xiàn)「選擇名稱」的對話方塊,此時,請輸入「學生科系資料庫關聯(lián)圖」後,再按「確定」鈕即可。步驟六:儲存資料庫關聯(lián)圖名稱。假設現(xiàn)在有甲與乙兩個資料表,其「關聯(lián)式資料庫」中資料表的關聯(lián)種類可以分為下列三種:1.一對一的關聯(lián)(1:1):甲資料表中的一筆記錄,只能對應到乙資料表中的一筆記錄,並且乙資料表中的一筆記錄,只能對應到甲資料表中的一筆記錄。2.一對多的關聯(lián)(1:M):甲資料表中的一筆記錄,可以對應到乙資料表中的多筆記錄,但是乙資料表中的一筆記錄,卻只能對應到甲資料表中的一筆記錄。3.多對多的關聯(lián)(M:N):甲資料表中的一筆記錄,能夠?qū)揭屹Y料表中的多筆記錄,並且乙資料表中的一筆記錄,也能夠?qū)郊踪Y料表中的多筆記錄。2-3關聯(lián)式資料庫的種類假設現(xiàn)在有甲與乙兩個資料表,其「關聯(lián)式資料庫【定義】假設現(xiàn)在有甲與乙兩個資料表,在一對一關聯(lián)中,甲資料表中的一筆記錄,只能對應到乙資料表中的一筆記錄,並且乙資料表中的一筆記錄,只能對應到甲資料表中的一筆記錄?!九e例】

以「成績處理系統(tǒng)」為例,當兩個資料表之間做一對一的關聯(lián)時,表示「學生資料表」中的每一筆記錄,只能對應到「成績資料表」的一筆記錄,而且「成績資料表」的每一筆記錄,也只能對應到「學生資料表」的一筆記錄,這就是所謂的1對1關聯(lián)。2-3.1一對一關聯(lián)(1:1)【定義】2-3.1一對一關聯(lián)(1:1)【一對一的關聯(lián)圖】

在下圖中,「學生資料表」與「成績資料表」是一對一的關係。因此,「學生資料表」的主鍵必須對應「成績資料表」的主鍵,才能設定為1:1的關聯(lián)圖。在實務上,我們也可以將這兩個資料表合併成一個資料表,其合併結(jié)果如下圖所示。【一對一的關聯(lián)圖】【一對一的實例】欲將「學生資料表」與「成績資料表」的這兩個資料表合併成一個資料表時,必須要先完成以下兩個條件,否則就無法進行「合併」:1.先檢查「學生資料表」中「學號」欄位值是否與「成績資料表」中「學號」

欄位值完全相同。2.再建立「1:1的資料庫關聯(lián)圖」,下圖所示:【一對一的實例】步驟一:在「ch2_hwDB」資料庫中的「資料庫圖表」上,按下「右鍵」之後,再點選「新增資料庫圖表」,如下圖所示:【SQLServer建立一對一資料庫關聯(lián)圖】資料庫名稱:ch2_hwDB.mdf按「右鍵」步驟一:在「ch2_hwDB」資料庫中的「資料庫圖表」上,按步驟二:在「加入資料表」對話方塊中,滑鼠先移到「成績表」上,按住「Ctrl」鍵,再點選「學生表」之後,再按「加入」鈕,最後再按「關閉」鈕即可。步驟二:在「加入資料表」對話方塊中,滑鼠先移到「成績表」上,步驟三:顯示兩個資料表準備作關聯(lián)圖,而在每一個資料表中都有一個「主鍵」(左邊有一支黃色鑰匙),也就是具有唯一性的欄位。例如:成績表中的「學號」與學生表中的「學號」步驟三:顯示兩個資料表準備作關聯(lián)圖,而在每一個資料表中都有一步驟四:在上圖中,請將滑鼠移到「學生表」內(nèi)的「學號」欄位上,按住滑鼠左鍵拖曳到「成績表」內(nèi)的「學號」欄位上,此時便會出現(xiàn)一個「+」號的方塊,放掉滑鼠左鍵,此時,馬上出現(xiàn)一個「編輯關聯(lián)」對話方塊。<注意>如果先從「學生表」的「學號」拖曳時,則「學生表」內(nèi)的記錄可以先輸入,但是如果先從「成績表」的「學號」拖曳時,則「成績表」內(nèi)的記錄先輸入。亦即先拖曳的資料表稱為「主表」而另一個資料表稱為「副表」,因為有主從關係。

主鍵主鍵步驟四:在上圖中,請將滑鼠移到「學生表」內(nèi)的「學號」欄位上,在按「確定」鈕之後,即可建立「學生表」與「成績表」的資料庫關聯(lián)圖了。如下圖所示:一對一關係一對一關係步驟五:儲存資料庫關聯(lián)圖名稱。在建立完成資料庫關聯(lián)圖之後,再按工具列上的「儲存」鈕之後,會出現(xiàn)「選擇名稱」的對話方塊,此時,請輸入「學生成績資料庫關聯(lián)圖」後,並按「確定」鈕,最後再按「是」即可。步驟五:儲存資料庫關聯(lián)圖名稱。在一般的資料庫中,使用「一對一」關聯(lián)來設計是非常少人在使用。因為在二個資料表中,都必須要有一個主鍵,且第一個資料表的每一筆記錄,都必須一對一的關聯(lián)到第二個資料表的記錄。這種設計方法大大的降低資料庫的能力?!蜃⒁猓涸谝话愕馁Y料庫中,使用「一對一」關聯(lián)來設計是【定義】假設現(xiàn)在有甲與乙兩個資料表,在一對多關聯(lián)中,甲資料表中的一筆記錄,可以對應到乙資料表中的多筆記錄,但是乙資料表中的一筆記錄,卻只能對應到甲資料表中的一筆記錄?!九e例】

以「數(shù)位學習系統(tǒng)」為例,當兩個資料表之間做一對多的關聯(lián)時,表示「老師資料表」中的每一筆記錄,可以對應到「課程資料表」中的多筆記錄,但「課程資料表」的每一筆記錄,只能對應到「老師資料表」中的一筆記錄,這就是所謂的一對多關聯(lián),這種方式是最常被使用。2-3.2一對多關聯(lián)(1:M)【定義】2-3.2一對多關聯(lián)(1:M)【一對多的關聯(lián)圖】

在下圖中,「老師資料表」與「課程資料表」是一對多的關係。因此,「老師資料表」的主鍵必須對應「課程資料表」的外來鍵,才能設定為1:M的關聯(lián)圖。註:「*」代表該欄位為主鍵,「#」代表該欄位為外來鍵。【一對多的關聯(lián)圖】【一對多的實例】我們建立兩個資料表,分別為「老師資料表」與「課程資料表」,此時,我們可以了解「老師資料表」中的一筆記錄(T0001),可以對應到「課程資料表」中的多筆記錄(C001,C002,C003),但是「課程資料表」中的一筆記錄,卻只能對應到「老師資料表」中的一筆記錄。如下圖所示?!疽粚Χ嗟膶嵗坎襟E一:在「ch2_hwDB」資料庫中的「資料庫圖表」上,按下「右鍵」之後,再點選「新增資料庫圖表」,如下圖所示:【SQLServer建立一對多資料庫關聯(lián)圖】資料庫名稱:ch2_hwDB.mdf按「右鍵」步驟一:在「ch2_hwDB」資料庫中的「資料庫圖表」上,按步驟二:在「加入資料表」對話方塊中,滑鼠先移到「老師資料表」上,按住「Ctrl」鍵,再點選「課程資料表」之後,再按「加入」鈕,最後再按「關閉」鈕即可。

步驟二:在「加入資料表」對話方塊中,滑鼠先移到「老師資料表」步驟三:顯示兩個資料表準備作關聯(lián)圖,而在每一個資料表中都有一個「主鍵」

(左邊有一支黃色鑰匙),也就是具有唯一性的欄位。步驟三:顯示兩個資料表準備作關聯(lián)圖,而在每一個資料表中都有一步驟四:在上圖中,請將滑鼠移到「老師資料表」中的主鍵「老師編號」欄位上,按住滑鼠左鍵拖曳到「課程資料表」中的外來鍵「老師編號」欄位上,此時便會出現(xiàn)一個「+」號的方塊,放掉滑鼠左鍵,此時,馬上出現(xiàn)一個「資料表和資料行」之編輯關聯(lián)對話方塊。外來鍵主鍵步驟四:在上圖中,請將滑鼠移到「老師資料表」中的主鍵「老師編在按「確定」鈕之後,即可建立「老師資料表」與「課程資料表」的資料庫關聯(lián)圖了。如下圖所示:一對多關係在按「確定」鈕之後,即可建立「老師資料表」與「課程資料表」的步驟五:儲存資料庫關聯(lián)圖名稱。在建立完成資料庫關聯(lián)圖之後,再按工具列上的「儲存」鈕之後,會出現(xiàn)「選擇名稱」的對話方塊,此時,請輸入「老師課程資料庫關聯(lián)圖」後,再按「確定」鈕即可。步驟五:儲存資料庫關聯(lián)圖名稱。【定義】假設現(xiàn)在有甲與乙兩個資料表,在多對多關聯(lián)中,甲資料表中的一筆記錄,能夠?qū)揭屹Y料表中的多筆記錄,並且乙資料表中的一筆記錄,也能夠?qū)郊踪Y料表中的多筆記錄?!九e例】

以「選課系統(tǒng)」為例,當兩個資料表之間做多對多的關聯(lián)時,表示「學生資料表」中的每一筆記錄,可以對應到「課程資料表」中的多筆記錄,並且「課程資料表」中的每一筆記錄,也能夠?qū)健笇W生資料表」中的多筆記錄,這就是所謂的多對多關聯(lián)。2-3.3多對多關聯(lián)(M:N)【定義】2-3.3多對多關聯(lián)(M:N)【多對多的關聯(lián)圖】雖然,一對多關聯(lián)是最常先的一種關聯(lián)性,但是在實務上,「多對多關聯(lián)」的情況也不少,也就是說由兩個資料表(實體)呈現(xiàn)多對多的關聯(lián)。例如:「學生資料表」與「課程資料表」。如下圖所示。在上圖中表示:每一位學生可以選修多門課程,並且每一門課程也可以被多位

學生來選修?!緝蓚€資料表多對多關聯(lián)之問題】在實務上多對多關聯(lián)如果只有兩個資料表來建置,難度較高,並且容易出問題?!径鄬Χ嗟年P聯(lián)圖】利用「三個資料表」來建置「多對多關聯(lián)」,也就是說,在原來的兩個資料表之間再加入一個「聯(lián)合資料表(JunctionTable)」,使他們可以順利處理多對多的關聯(lián)。其中,聯(lián)合資料表(JunctionTable)中的主索引鍵(複合主鍵)是由資料表A(學生資料表)和資料表B(課程資料表)兩者的主鍵所組成。例如:在「學生資料表」與「課程資料表」之間再加入第三個資料表

「選課資料表」,如下圖所示?!窘鉀Q方法】聯(lián)合資料表利用「三個資料表」來建置「多對多關聯(lián)」,也就是說,在原來的兩說明:1.在「學生資料表」與「選課資料表」的關係是以一對多。

2.在「課程資料表」與「選課資料表」的關係是以一對多。3.藉由「選課資料表」的使用,使「學生資料表」與「課程資料表」

關係變成多對多的關聯(lián)式,亦即每一位學生可以選修一門以上的課程

並且每一門課程也可以被多位同學的選修。4.以資料表(Table)之方式組成關聯(lián),將這些關聯(lián)組合起來,即形成一個

關聯(lián)式資料庫。聯(lián)合資料表聯(lián)合資料表【多對多的實例】我們建立三個資料表,分別為「學生資料表」、「選課資料表」及「課程資料表」,此時,我們可以了解「學生資料表」中的一筆記錄(S0001),可以對應到「選課資料表」中的多筆記錄(#1,#4,#5;亦即選了C001,C002,C003三門課程),並且「課程資料表」中的一筆記錄(C002),也能夠?qū)健高x課資料表」中的多筆記錄(#3,#4;亦即每一門課程可以被S0001,SC003兩位同學來選)。如下圖所示。【多對多的實例】完整性規(guī)則(IntegrityRules)是用來確保資料的一致性與完整性,以避免資料在經(jīng)過新增、修改及刪除等運算之後,而產(chǎn)生的異?,F(xiàn)象。亦即避免使用者將錯誤或不合法的資料值存入資料庫中。如下圖所示:2-4資料庫之完整性規(guī)則完整性規(guī)則(IntegrityRules)關聯(lián)式資料模式的「完整性規(guī)則」,有下列三種:如下圖所示。1.實體完整性規(guī)則(EntityIntegrityRule)2.參考完整性規(guī)則(ReferentialIntegrityRule)3.值域完整性規(guī)則(DomainIntegrityRule)學生資料表(子關聯(lián))科系代碼表(父關聯(lián))註:在關聯(lián)式資料庫中,任兩個資料表要進行關聯(lián)(參考)時,必須透過「主鍵」對應

「外來鍵」才能建立,其中「主鍵」值的所在資料表稱為「父關聯(lián)」,而「外來

鍵」值的所在資料表稱為「子關聯(lián)」?!救N完整性規(guī)則】關聯(lián)式資料模式的「完整性規(guī)則」,有下列三種:如下圖所示?!救C合上述,為了確保資料的完整性、一致性及正確性,基本上,使用者在異動(即新增、修改及刪除)資料時,都會先檢查使用者的「異動操作」是否符合資料庫管理師(DBA)所設定的限制條件,如果違反限制條件時,則無法進行異動(亦即異動失敗),否則,就可以對資料庫中的資料表進行各種異動處理。如下圖所示:在上圖中,所謂的「限制條件」是指資料庫管理師(DBA)在定義資料庫的資料表結(jié)構時,可以設定主鍵(PrimaryKey)、外鍵(ForeignKey)、唯一鍵(UniqueKey)、條件約束檢查(Check)及不能空值(NotNull)等五種不同的限制條件。綜合上述,為了確保資料的完整性、一致性及正確性,基本上,使用我們已經(jīng)學會一對一、一對多及多對多的資料庫關聯(lián)圖了,但是,你是否有注意到,當我們拖曳「外鍵」來參考「主鍵」時,除了自動彈出一個「資料表和資料行」之編輯關聯(lián)對話方塊之外,並且在按下「確定」鈕之後,也會隨即自動再彈出「外部索引鍵關聯(lián)性」的對話方塊,如下圖所示:【完整性的綜合分析】主鍵外來鍵我們已經(jīng)學會一對一、一對多及多對多的資料庫關聯(lián)圖了,但是,你在下圖中的「外部索引鍵關聯(lián)性」的對話方塊,主要是用來檢查「參考完整性規(guī)則」,也就是在兩個資料表中,次要資料表的外鍵(FK)的資料欄位值,一定要存在於主要資料表的主鍵(PK)中的資料欄位值,否則,會出現(xiàn)錯誤訊息?!就暾缘木C合分析】<續(xù)>在下圖中的「外部索引鍵關聯(lián)性」的對話方塊,主要是用來檢查「參以下圖的「學生資料表」與「科系代碼表」為例:「科系代碼表」內(nèi)的「系碼」欄位為主鍵,而「學生資料表」內(nèi)的「系碼」為外來鍵。

因此,「參考完整性」有勾選時,則DBMS會限制使用者輸入資料是否有違反參考完整性。何謂「參考完整性」?是指用來確保相關資料表間的資料一致性,避免因一個資料表的記錄改變時,造成另一個資料表的內(nèi)容變成無效的值。如下圖所示。【參考完整性】以下圖的「學生資料表」與「科系代碼表」為例:【參考完整性】【定義】

每一個關聯(lián)表中的值組都必須是可以識別的,因此,主鍵必須要具有唯一性,並且主鍵不可重複或為空值(NULL)。否則,就無法唯一識別某一記錄(值組)。【特性】1.實體必須是可區(qū)別的(Distinguishable)。2.主鍵值未知代表是一個不確定的實體,不能存放在資料關聯(lián)中。如下圖所示:2-4.1實體完整性規(guī)則…針對主鍵【定義】2-4.1實體完整性規(guī)則…針對主鍵3.實體完整性規(guī)則只適用於基本關聯(lián)(BaseRelation),不考慮視界(View)。

(1)基本關聯(lián)(BaseRelation)

真正存放資料的具名關聯(lián),是透過SQL的CreateTable敘述來建立。

基本關聯(lián)對應於ANSI/SPARC的「概念層」。(2)視界(View)

是一種具名的衍生關聯(lián)、虛擬關聯(lián),定義在某些基本關聯(lián)上,本身不含任

何資料。視界相對應於ANSI/SPARC的「外部層」。4.在建立資料表時可以設定某欄位為主鍵,以確保實體完整性和唯一性。3.實體完整性規(guī)則只適用於基本關聯(lián)(BaseRelatio5.複合主鍵(學號與課號)中的任何屬性值皆不可以是空值(Null)。

如下圖所示:說明:主鍵是由多個欄位連結(jié)而成的組合鍵,因此,每一個欄位值都

不可為空值(Null)。<實作>在下一頁5.複合主鍵(學號與課號)中的任何屬性值皆不可以是空值(Nu步驟一:將「選課資料表」中的「學號」與「課號」設定為複合主鍵。

如下圖所示:步驟二:學號S0004同學尚未選課,故無法新增到「選課資料表」中?!維QLServer上機實作】資料庫名稱:ch2_DB.mdf步驟一:將「選課資料表」中的「學號」與「課號」設定為複合主鍵在完成建立資料庫及資料表之後,如果沒有把它們整合起來,則「學生資料表」中的外鍵(系碼)就無法與「科系代碼表」的主鍵(系碼)之間來進行關聯(lián)了,這將會導致資料庫不一致的問題。也就是違反了資料庫之「參考完整性規(guī)則」?!径x】是指用來確保兩個資料表之間的資料一致性,避免因一個資料表的記錄改變時,造成另一個資料表的內(nèi)容變成無效的值。因此,子關聯(lián)的外來鍵(FK)的資料欄位值,一定要存在於父關聯(lián)的主鍵(PK)中的資料欄位值。2-4.2參考完整性規(guī)則…針對外鍵在完成建立資料庫及資料表之後,如果沒有把它們【例如】

學生資料表(子關聯(lián))的系碼(外鍵;F.K.)一定要存在於系別代碼表(父關聯(lián))的系碼(主鍵;P.K.)中。如下圖所示:

學生資料表(子關聯(lián))系別代碼表(父關聯(lián))存在於【例如】學生資料表(子關聯(lián))系別代碼表(父關聯(lián))存在於【例如】「強制使用外部索引鍵條件約束」使用預設值為「是」的情況假設現(xiàn)有二個資料表,分別為「學生資料表」與「科系代碼表」,其中有一位「五?!雇瑢W欲從資工系(D001)轉(zhuǎn)為資管系(D002),並且,在轉(zhuǎn)系的過程中,學校的校務行政系統(tǒng)中的「學生資料表」與「系別資料表」之間有建立「強制使用外部索引鍵條件約束」,如下圖所示:因此,行政人員假設在填入「系碼」欄位,誤填為「D003」時,DBMS就無法檢查出來,此時,將會使得系碼「D003」內(nèi)容變成無效的值,以致於產(chǎn)生資料不一致現(xiàn)象。【例如】「強制使用外部索引鍵條件約束」使用預設值為「是」的關聯(lián)式資料庫課件【例如】「強制使用外部索引鍵條件約束」設定為「否」的情況假設現(xiàn)有二個資料表,分別為「學生資料表」與「科系代碼表」,其中有一位「五?!雇瑢W欲從資工系(D001)轉(zhuǎn)為資管系(D002),但是,在轉(zhuǎn)系的過程中,學校的校務行政系統(tǒng)中的「學生資料表」與「科系代碼表」之間尚未建立「強制使用外部索引鍵條件約束」,如下圖所示:因此,行政人員假設在填入「系碼」欄位,誤填為「D003」時,DBMS就可以檢查出來,此時,系碼「D003」就無法修改,因此,不會產(chǎn)生資料不一致現(xiàn)象?!纠纭俊笍娭剖褂猛獠克饕I條件約束」設定為「否」的情況【參考完整性規(guī)則的特性】1.至少要有兩個或兩個以上的資料表才能執(zhí)行「參考完整性規(guī)則」。2.由父關聯(lián)表的「主鍵」與子關聯(lián)表的「外來鍵」的關係來建立兩資料表間資

料的關聯(lián)性。3.建立「參考完整性」之後,就可以即時有效檢查使用者的輸入值,

以避免無效的值發(fā)生?!緟⒖纪暾砸?guī)則的特性】步驟一:建立「學生資料表」與「科系代碼表」步驟二:建立資料庫關聯(lián)圖【SQLServer上機實作】步驟一:建立「學生資料表」與「科系代碼表」【SQLServ步驟三:將「學生資料表」中的五福同學的系碼改為「D003」,

如下所示:步驟三:將「學生資料表」中的五福同學的系碼改為「D003」,【定義】是指在「單一資料表」中,對於所有屬性(Attributes)的內(nèi)含值,必須來自值域(Domain)的合法值群中。亦即是指在「單一資料表」中,同一資料行中的資料屬性必須要相同。亦即同一行的欄位之資料類型要相同?!纠纭俊感詣e」屬性的內(nèi)含值,必須是「男生」或「女生」,而不能超出定義域(Domain)的合法值群?!咎匦浴?.作用在「單一資料表」中2.「同一資料行」中的「資料屬性」必須要「相同」3.建立資料表可以「設定條件」來查檢值域是否為合法值群2-4.3值域完整性規(guī)則【定義】2-4.3值域完整性規(guī)則【例1】學生資料表中的系碼僅能存放文字型態(tài)的資料,並且一定只

有四個字元,不可以超過四個字元或其他的日期格式等型態(tài)。【例2】學生成績資料表中的成績資料行僅能存放數(shù)值型態(tài)的資料,

不可以有文字或日期等格式?!緦嵗俊纠?】學生資料表中的系碼僅能存放文字型態(tài)的資料,並且一定只【例3】當要新增學生的成績時,其成績的屬性內(nèi)含值,必須要來自定義域,其範圍為0~100分,如果成績超出範圍,則無法新增。如下圖所示。

【例3】步驟一:選擇欲修改的欄位名稱「成績」欄位【SQLServer上機實作1】步驟一:選擇欲修改的欄位名稱「成績」欄位【SQLServe【SQLServer上機實作1】<續(xù)>【SQLServer上機實作1】<續(xù)>【

SQLServer上機實作1】<續(xù)>步驟二:填入「條件約束之運算式」及「描述」【SQLServer上機實作1】<續(xù)>步驟二:填入「條檢查「性別」欄位【SQLServer上機實作2】檢查「性別」欄位【SQLServer上機實作2】{constantcolumn_namefunction(subquery)}[{operatorANDORNOT}{constantcolumn_namefunction(subquery)}]

{constantcolumn_namefunction【

SQLServer上機實作3】檢查「性別」【SQLServer上機實作3】檢查「性別」【定義】1.空值是一種特殊記號,用以記錄目前不詳?shù)馁Y料值。2.空值不是指「空白格」或「零值」。3.空值可分為以下三種:

(1)可應用的空值(ApplicationNullValue):一般指目前不知道的值,

但此值確實存在。

例如:張三已婚,但其配偶欄的姓名尚未填入。

(2)不可應用的空值(InapplicableNullValue):目前完全沒有存在這

個值。

例如:張三未婚,其配偶欄的值為空值。

(3)完全未知的空值(TotallyUnknown):完全不知道這個值是否存在。

例如:陌生人張三<不知已婚或未婚>,其配偶欄的值。2-4.4空值(NULLValues)【定義】2-4.4空值(NULLValues)【定義】資料行必須有正確的資料值,不可為虛值?!纠纭?/p>

在「學生資料表」中的「學號」和「姓名」兩欄位值必須確定,

不可為虛值。因此,在建立資料表時就必須宣告為NOTNULL。2-4.5非空值(NOTNULL)【定義】資料行必須有正確的資料值,不可為虛值。2-4.5非在「關聯(lián)式資料庫」中,若進行刪除(Delete)或更新(Update)運算時,發(fā)現(xiàn)違反『參考完整性規(guī)則』,則常見有以下四種策略:1.刪除(Delete)運算時的四種方式(1)沒有動作(NoAction),又稱為限制作法(Restricted)<預設作法>(2)重疊顯示:又稱為連帶作法(Cascades):表示自動刪除(3)設定Null:又稱為空值化(SetNull)(4)設定為預設值:2.更新(Update)運算的四種方法(1)沒有動作(NoAction),又稱為限制作法(Restricted)<預設作法>(2)重疊顯示:又稱為連帶作法(Cascades):表示自動更改(3)設定Null:又稱為空值化(SetNull)(4)設定為預設值:2-4.6外鍵使用法則在「關聯(lián)式資料庫」中,若進行刪除(Delete)或更新(Up一、刪除(Delete)運算:1.沒有動作(NoAction):又稱為限制作法(Restricted)【定義】在刪除「父關聯(lián)表」的一個記錄時,如果該記錄的主鍵,沒有被「子關聯(lián)表」的外鍵參考時,則允許被刪除,反之,則不允許。亦即被參考的記錄是拒絕被刪除。

【例如】當刪除「科系代碼表」的第三筆記錄(D003,軟工系,葉主任),是可以的(∵沒有被參考到),但是欲刪除第一、二筆時,不允許(∵有被參考到)。一、刪除(Delete)運算:【實作】在建立資料庫關聯(lián)圖時,必須要同時勾選以下的選項,才會具有此功能。注意:此種規(guī)則為預設作法,亦即「被參考的記錄是拒絕被刪除」!【實作】2.重疊顯示:又稱為連帶作法(Cascades)【定義】在刪除「父關聯(lián)表」的一個記錄時,也會同時刪除「子關聯(lián)

表」中擁有相同外鍵值記錄。

【例如】在前例中,欲刪除「科系代碼表」中的第一筆記錄(D001,資工系,

李春雄),也必須同時刪除「學生資料表」中的第1,2,5筆記錄。父關聯(lián)表子關聯(lián)表2.重疊顯示:又稱為連帶作法(Cascades)父關聯(lián)表子關【作法】在建立資料庫關聯(lián)圖時,必須選取「重疊顯示」。如下圖所示:注意:您如果沒有「選取」時,則是「沒有動作」!【作法】【例如】在下表中,欲刪除「科系代碼表」中的第二筆記錄(D002,資管系,李碩安),也必須同時刪除「學生資料表」中的第3筆與第4筆記錄。父關聯(lián)表子關聯(lián)表【例如】父關聯(lián)表子關聯(lián)表【利用SQLServer實作】步驟一:建立「學生資料表」與「科系代碼表」【利用SQLServer實作】步驟二:建立資料庫關聯(lián)圖表步驟二:建立資料庫關聯(lián)圖表步驟三:刪除「科系代碼表」中的第二筆記錄(D002,資管系,李碩安),並檢查「學生資料表」中的第3,4,5筆記錄一併同時被刪除。步驟三:3.空值化(SetNull)【定義】在刪除「父關聯(lián)」的一個記錄時,也會同時將「子關聯(lián)」中擁有相同外鍵予以空值化。【例如】在前例中,欲刪除「科系代碼表」中的第二筆記錄(D002,資管系,李碩安),也必須同時將「學生資料表」中系碼屬性有”D002”的第三與第四筆值空值化。父關聯(lián)子關聯(lián)3.空值化(SetNull)父關聯(lián)子關聯(lián)【作法】在建立資料庫關聯(lián)圖時,必須選取「設定Null」。如下圖所示:【作法】在建立資料庫關聯(lián)圖時,必須選取「設定Null」。如下【利用SQLServer實作】步驟一:建立「學生資料表」與「科系代碼表」【利用SQLServer實作】步驟二:建立資料庫關聯(lián)圖步驟二:建立資料庫關聯(lián)圖步驟三:刪除「科系代碼表」中的第二筆記錄(D002,資管系,李碩安),並檢查「學生資料表」中的第3,4,5筆記錄同時被設定為「空值化」步驟三:4.設定為預設值【定義】在刪除「父關聯(lián)表」的一個記錄時,也會同時將「子關聯(lián)表」中擁有相同外鍵設定為預設值。【例如】在前例中,欲刪除「科系代碼表」中的第二筆記錄(D002,資管系,李碩安),也必須同時將「學生資料表」中系碼屬性有”D002”的第三與第四筆值設定為預設值。父關聯(lián)表子關聯(lián)表4.設定為預設值父關聯(lián)表子關聯(lián)表【作法】在建立資料庫關聯(lián)圖時,必須選取「預設值或繫結(jié)」。如下圖所示:【作法】在建立資料庫關聯(lián)圖時,必須選取「預設值或繫結(jié)」。如下【利用SQLServer實作】步驟一:建立「學生資料表」與「科系代碼表」【利用SQLServer實作】步驟二:建立資料庫關聯(lián)圖,必須選取「設為預設值」。如下圖所示:步驟二:建立資料庫關聯(lián)圖,必須選取「設為預設值」。如下圖所示步驟三:刪除「科系代碼表」中的第二筆記錄(D002,資管系,李碩安),並檢查「學生資料表」中的第3,4,5筆記錄同時被設定為「Null」步驟三:二、更新(Update)運算:1.沒有動作(NoAction):又稱為限制作法(Restricted)【定義】在更新「父關聯(lián)表」的一個記錄時,如果該記錄的主鍵,沒有被「子關聯(lián)表」的外鍵參考時,則允許被更新,反之,則不允許。亦即被參考的記錄是拒絕被更新。◎說明:當更新「科系代碼表」中的D001為A001時,不允許;當更新

「系別資料表」中D003為A003時,允許。父關聯(lián)表子關聯(lián)表二、更新(Update)運算:父關聯(lián)表子關聯(lián)表【實作】注意:此種規(guī)則為預設作法,亦即「被參考的記錄是拒絕被更新」!【實作】2.重疊顯示:又稱為連帶作法(Cascades)【定義】在更新「父關聯(lián)表」的一個記錄時,也會同時更新「子關聯(lián)表」中擁有相同外鍵值記錄。

【例如】在前例中,欲更新「科系代碼表」中的「D001」為「A001」,也必須同時將「學生資料表」中的第1,2,5三筆記錄的「D001」修改為「A001」。父關聯(lián)表子關聯(lián)表2.重疊顯示:又稱為連帶作法(Cascades)父關聯(lián)表子關【作法】在建立資料庫關聯(lián)圖時,必須選取「重疊顯示」。如下圖所示:注意:您如果沒有「選取」時,則是「沒有動作」!【作法】3.空值化(SetNull)【定義】在更新「父關聯(lián)表」的一個記錄時,也會同時將「子關聯(lián)表」中擁有相同外鍵予以空值化。【例如】在前例中,欲更新「科系代碼表」中的第二筆記錄(D002)為「A002」時,也必須同時將「學生資料表」中的第三與第四筆記錄的「D002」修改為空值(Null)。父關聯(lián)子關聯(lián)3.空值化(SetNull)父關聯(lián)子關聯(lián)4.設定為預設值【定義】在更新「父關聯(lián)表」的一個記錄時,也會同時將「子關聯(lián)表」中擁有相同外鍵予以空值化?!纠纭吭谇袄校隆缚葡荡a表」中的第二筆記錄(D002)為「A002」時,也必須同時將「學生資料表」中的第三與第四筆記錄的「D002」修改為空值(Null)。父關聯(lián)子關聯(lián)4.設定為預設值父關聯(lián)子關聯(lián)第二章

關聯(lián)式資料庫第二章

關聯(lián)式資料庫本章學習目標

1.瞭解何謂關聯(lián)式資料庫(RelationalDatabase)及其定義。2.瞭解關聯(lián)式資料庫的各種專有名詞及

三種關聯(lián)模型。3.瞭解關聯(lián)式資料完整性中的三種整合

性法則。本章學習目標1.瞭解何謂關聯(lián)式資料庫(Relational本章內(nèi)容2-1關聯(lián)式資料庫(RelationDatabase)2-2鍵值屬性2-3關聯(lián)式資料庫的種類2-4關聯(lián)式資料完整性本章內(nèi)容2-1關聯(lián)式資料庫(RelationData2.1關聯(lián)式資料庫(Relation

Database)

1.是由一群相互關係的正規(guī)化關聯(lián)(表格)所組成。2.關聯(lián)(表格)之間是透過相同的欄位值(即外鍵FK;ForeignKey)來連繫。3.關聯(lián)(表格)中的所有屬性內(nèi)含值都是基元值(AtomicValue)

。2.1關聯(lián)式資料庫(Relation

關聯(lián)式資料庫課件2-1關聯(lián)式資料庫(RelationDatabase)假設學校行政系統(tǒng)中有一個尚未分割的「學籍資料表」,如下表所示:

由上表中,我們可以清楚看出多筆資料重複現(xiàn)象,如果有某一筆資料打錯,將會導致資料不一致現(xiàn)象。例如:在上表中的第5筆記錄的系主任,應該是「李碩安」卻打成「李安」。2-1關聯(lián)式資料庫(RelationDatabase)因此,我們就必須要將原始的「學籍資料表」分割成數(shù)個不重複的資料表,再利用「關聯(lián)式資料庫」的方法來進行資料表的關聯(lián)。因此,我們就必須要將原始的「學籍資料表」分割因此,我們就必須要將原始的「學籍資料表」分割成數(shù)個不重複的資料表,再利用「關聯(lián)式資料庫」的方法來進行資料表的關聯(lián)。何謂「關聯(lián)式資料庫」呢?它是由兩個或兩個以上的資料表組合而成。其目的:1.節(jié)省重複輸入的時間與儲存空間。2.確保異動資料(新增、修改、刪除)時的一致性及完整性。因此,我們必須將各種資料依照性質(zhì)的不同(如:學籍資料、選課資料,課程資料,學習歷程資料等…‥),分別存放在幾個不同的表格中,表格與表格之間的關係,則以共同的欄位值(如:「學號」欄位…)相互連結(jié),以這種方式來存放資料的資料庫,在電腦術語中,稱為「關聯(lián)式資料庫(RelationalDatabase)」。因此,我們就必須要將原始的「學籍資料表」分割【定義】1.是由一群相互關係的正規(guī)化關聯(lián)(表格)所組成。2.關聯(lián)(表格)之間是透過相同的欄位值(即外鍵參考主鍵)來連繫。3.關聯(lián)(表格)中的所有屬性內(nèi)含值都是基元值(AtomicValue)。因此,我們可以將上表中的「學籍資料表」分割為「學生資料表」與「科系代碼表」,如何產(chǎn)生關聯(lián)式資料庫呢?它是透過兩個資料表的相同欄位值(即系碼)來進行連結(jié)。如下所示:註:「主鍵」與「外鍵」專有名詞會有後面章節(jié)中詳細介紹。【定義】【優(yōu)點】1.節(jié)省記憶體空間相同的資料記錄不須要再重複輸入。2.提高行政效率因為資料不須再重複輸入,故可以節(jié)省行政人員的輸入時間。3.達成資料的一致性因為資料不須再重複輸入,故可以減少多次輸入產(chǎn)生人為的錯誤。【優(yōu)點】關聯(lián)式資料庫模型的相關術語通常是用來說明資料庫系統(tǒng)的相關理論,而SQLServer或Access等資料庫管理系統(tǒng)所使用的資料庫相關名詞是利用另成一套術語,不過這些名詞或術語都代表相同意義,如表2-1所示:表2-1關聯(lián)名詞比較表【關聯(lián)名詞】關聯(lián)式資料模型SQLServer或Access關聯(lián)(Relation)表格(Table)值組(Tuple)橫列(Row)或記錄(Record)屬性(Attribute)直欄(Column)或欄位(Filed)基數(shù)(Cardinality)記錄個數(shù)(numberofRecord)主鍵(PrimaryKey)唯一識別(uniqueidentifier)定義域(Domain)合法值群(poollegalvalues)關聯(lián)式資料庫模型的相關術語通常是用來說明資料庫系統(tǒng)的相關理論圖示說明:【重要專有名詞】1.資料表(Table):又稱為表格,它是真正儲存資料的地方。它可視為特

定主題的資料集合。並且它是由「資料行」與「資料列」的二維表格

組合而成。

例如:上表中的「學生資料表」。2.資料行(Column):是指資料表中的某些「欄位」,它是以「垂直

溫馨提示

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

評論

0/150

提交評論