關(guān)系模型的數(shù)據(jù)結(jié)構(gòu)_第1頁
關(guān)系模型的數(shù)據(jù)結(jié)構(gòu)_第2頁
關(guān)系模型的數(shù)據(jù)結(jié)構(gòu)_第3頁
關(guān)系模型的數(shù)據(jù)結(jié)構(gòu)_第4頁
關(guān)系模型的數(shù)據(jù)結(jié)構(gòu)_第5頁
免費預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

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

文檔簡介

1、關(guān)系模型的數(shù)據(jù)結(jié)構(gòu) 關(guān)系模型源于數(shù)學(xué),它用二維表來組織數(shù)據(jù),而這個二維表在關(guān)系數(shù)據(jù)庫中稱為 關(guān)系。關(guān)系數(shù)據(jù)庫是表的集合 用關(guān)系表示實體以及實體間的聯(lián)系的模型,稱為關(guān)系模型,下面我們來看看關(guān)系 模型中的基本術(shù)語 1.關(guān)系關(guān)系就是二維表,它滿足以下幾個條件1)關(guān)系表中的每一列都是不可再分的基本屬性。(有子屬性,分開了,不是關(guān) 系表)2)表中的各屬性不能重名3)表中的行、列次序并不重要,即交換列的前后順序(比如將性別放在年齡前 面)不影響其表達的一個語義。2. 元組表中的每一行數(shù)據(jù)稱為一個元組,它相當(dāng)于一個記錄值3. 屬性表中的每一列是一個屬性值的集合,列可以命名,稱為屬性名,屬性與前面講到 的實體

2、屬性(特征)或記錄的字段意義相當(dāng)。關(guān)系表中的每一行數(shù)據(jù)不允許完全相同,因為存儲值完全相同的兩行或多行數(shù)據(jù) 并沒有實際意義4. 主鍵主鍵也稱主碼或主關(guān)鍵字,是表中用于唯一確定一個元組的一個屬性或最小屬性 組。主鍵可以由一個屬性組成,也可以由多個屬性共同組成。如表所示,學(xué)號就是此學(xué)生基本信息表的主鍵,因為它可以唯一地確定一個學(xué)生。 而表所示的關(guān)系的主鍵就由學(xué)號和課程號共同組成,因為一個學(xué)生可以選修多門 課程,而且一門課程也可以有多個學(xué)生選修, 因此,只有將學(xué)號和課程號結(jié)合起 來才能共同的確定一行記錄。通常稱由多個屬性共同組成的主鍵為復(fù)合主鍵。 表的主鍵與其實際應(yīng)用語義有關(guān),與表設(shè)計者的意圖有關(guān),如

3、表,用(學(xué)號,課 程號)作為主鍵在一個學(xué)生對一門課程只能有一次考試的前提下是成立的,如果如果是如果能如果表設(shè)定一個學(xué)生對一門課程可以有多次考試,則用(學(xué)號,課程號)作主鍵就不夠 了,因為一個學(xué)生對一門課程有多少次考試,則這個值就回重復(fù)多少遍, 這種情況,就必須為這個表添加一個“考試次數(shù)”列,同時作為主鍵 有時一個表中可能存在多個可以作主鍵的屬性,比如,對于學(xué)生信息表,夠保證姓名肯定不重復(fù)的話,那么姓名也可以作為學(xué)生基本信息的主鍵, 中存在多個可以作為主鍵的屬性,則稱這些屬性為候選鍵屬性,相應(yīng)的鍵稱為候 選鍵,從中選一個作為主鍵都是可以的。5. 域?qū)傩缘娜≈捣秶Q為域。例如,大學(xué)生的年齡假設(shè)在1

4、440歲范圍內(nèi),則學(xué)生的 “年齡”屬性的域就是(1440)關(guān)系模型的數(shù)據(jù)操作 增刪改查 關(guān)系模型的數(shù)據(jù)完整性約束數(shù)據(jù)完整性是指數(shù)據(jù)庫中存儲的數(shù)據(jù)是有意義的,是正確的。主要包括三大類1)實體完整性 是指的是關(guān)系數(shù)據(jù)庫中所有的表都必須有主鍵,而且表中不允許存在以下兩 種情況(1)無主鍵值的記錄(2)主鍵值相同的記錄因為若記錄沒有主鍵值,則此記錄在表中一定是無意義的。關(guān)系模型 中的每一行記錄都對應(yīng)客觀存在的一個實例或一個事實,比如,一個 學(xué)號唯一地確定了一個學(xué)生,如果表中存在沒有學(xué)號的學(xué)生記錄,則 此學(xué)生一定不屬于正常管理的學(xué)生。另外,如果表中存在主鍵值相等 的兩個或多個記錄,則這兩個或多個記錄會對

5、應(yīng)同一個實例,這會出 現(xiàn)兩種情況。第一,表中的其他值也完全相同,則這些記錄就是重復(fù) 記錄,存儲重復(fù)的記錄是沒有意義的,第二,如果其他值不完全相同, 則會出現(xiàn)語義矛盾,哪條記錄才是真實的實體中每個具體的記錄值(一行數(shù)據(jù)),比如學(xué)生實體中的每個具體的學(xué)生, 稱為實體的一個實例。2)參照完整性參照完整性有時也稱為引用完整性?,F(xiàn)實世界中的實體之間往往存在著某種聯(lián)系, 在關(guān)系模型中,實體以及實體之間的聯(lián)系都是用關(guān)系來表示的,這樣就自然存在著關(guān)系(表)與關(guān)系(表)之間的引用關(guān)系。參照完整性就是描述實體之間的聯(lián) 系的。參照完整性一般是指多個實體或表之間的關(guān)聯(lián)關(guān)系。比如表2-3中,學(xué)生選課信息表所描述的學(xué)生必

6、須受限于表 2-1學(xué)生基本信息表中已有的學(xué)生,不能在學(xué)生 選課信息表中描述一個根本就不存在的學(xué)生, 也就是學(xué)生選課信息表中學(xué)號的取 值必須在學(xué)生基本信息表中學(xué)號的取值范圍內(nèi)。 這種一個表中某列的取值受限于 另一個表的某列的取值范圍約東的特點就稱為參照完整性。在關(guān)系數(shù)據(jù)庫中用外鍵(foreignkey,有時也稱為外部關(guān)鍵字或外碼)來實現(xiàn)參照完整性。例如,只要將學(xué)生選課表中的“學(xué)號”定義為引用學(xué)生基本信息表的“學(xué)號”的外鍵, 就可以保證選課表中的“學(xué)號”的取值在學(xué)生基本信息表的已有“學(xué)號”范圍 內(nèi) 外鍵一般出現(xiàn)在聯(lián)系所對應(yīng)的關(guān)系中,用于表示兩個或多個實體之間的關(guān)聯(lián)關(guān)系。 外鍵實際上是表中的一個(或

7、多個)屬性,它引用某個其他表(特殊情況下,也可以是外鍵所在(2.4的表)的主鍵,當(dāng)然,也可以是候選鍵,但多數(shù)情況下是 主鍵。下面舉例說明如何指定外鍵 例2-1】學(xué)生和專業(yè)可以用下面的關(guān)系表示,其中主鍵用下劃線標(biāo)識。 學(xué)生(學(xué)號,姓名,性別,專業(yè)號,出生日期)專業(yè)(專業(yè)號,專業(yè)名) 這兩個關(guān)系之間存在著屬性引用關(guān)系,即學(xué)生關(guān)系中的“專業(yè)號”引用了專業(yè)關(guān) 系中的“專業(yè)號”,顯然,學(xué)生關(guān)系中的“專業(yè)號”的值必須是確實存在的專業(yè) 的專業(yè)號。也就是說,學(xué)生關(guān)系中的“專業(yè)號”引用了專業(yè)關(guān)系中的“專業(yè)號”, 是引用了專業(yè)關(guān)系中的“專業(yè)號”的外鍵【例2-2】學(xué)生、課程以及學(xué)生與課程之間的選課關(guān)系可以用以下 3

8、個關(guān)系表示, 其中主鍵用下劃線標(biāo)識。學(xué)生(學(xué)號,姓名,性別,專業(yè)號,出生日期)課程(課程號,課程名,學(xué)分)選課(學(xué)號,課程號,成績)這3個關(guān)系中,選課關(guān)系中的“學(xué)號”必須是學(xué)生關(guān)系中已有的學(xué)生,因此選課關(guān)系中號”引用了學(xué)生關(guān)系中的“學(xué)號”。 同樣,選課關(guān)系中的“課程號”也必 須是課程關(guān)系中已有的課程,即選課關(guān)系中的“課程號”引用了課程關(guān)系中的“課程號”。因此,選課關(guān)系中的“學(xué)號”是引用了學(xué)生關(guān)系中的“學(xué)號”的外 鍵,而“課程號”是引用了課程關(guān)系中的“課程號”的外鍵。主鍵必須是非空且不重復(fù)的,但外鍵無此要求。外鍵可以有重復(fù)值,這點從表 2-3中可以看出。外鍵也可以取空值,例如,職工與其所在的部門

9、可以用以下兩 個關(guān)系表示。職工(職工號,職工名,部門號,工資級別) 部門(部門號,部門名) 其中,職工關(guān)系的“部門號”是引用部門關(guān)系的“部門號”的外鍵, 如果某新來 職工還沒有被分配到具體的部門,則其“部門號”就為空值;如果職工已經(jīng)被分 配到了某個部門,則其部門號就有了確定的值(非空值)。3)用戶定義完整性用戶定義的完整性也稱為域完整性或語義完整性。任何關(guān)系數(shù)據(jù)庫管理系統(tǒng)都應(yīng) 該支持實體完整性和參照完整性, 除此之外,不同的數(shù)據(jù)庫應(yīng)用系統(tǒng)根據(jù)其應(yīng)用 環(huán)境的不同,往往還需要一些特殊的約東條件,用戶定義的完整性就是針對某一 具體應(yīng)用領(lǐng)域定義的數(shù)據(jù)約束條件,它反映某一具體應(yīng)用所涉及的數(shù)據(jù)必須滿足 應(yīng)

10、用語義的要求。用戶定義的完整性實際上就是指明關(guān)系中屬性的取值范圍,也就是屬性的域,這樣可以限制關(guān)系中屬性的取值類型及取值范圍,防止屬性的值與應(yīng)用語義矛盾。例如,學(xué)生的考試成績的取值范圍為 0-100,人的性別的取值是男,女。關(guān)系規(guī)范化 為什么要關(guān)系規(guī)范化觀察這個表的數(shù)據(jù),會發(fā)現(xiàn)有以下幾個問題 數(shù)據(jù)冗余問題:在這個關(guān)系中,有關(guān)學(xué)生所在系和其所對應(yīng)的宿舍樓的信息有 冗余,因為一個系有多少個學(xué)生,這個系所對應(yīng)的宿舍樓的信息就要重復(fù)存儲多 少遍。而且學(xué)生基本信息(包括學(xué)生學(xué)號、姓名、性別、所在系)也有重復(fù),一 個學(xué)生修了多少門課,他的基本信息就重復(fù)多少遍。 數(shù)據(jù)更新問題:如果某一學(xué)生從數(shù)字媒體系轉(zhuǎn)到了

11、信息管理系,那么不但要修 改此學(xué)生的 Sdept列的值,還要修改其Sloe列的值,從而使修改復(fù)雜化。 數(shù)據(jù)插入問題:如果新成立了某個系,并且也確定好了此系學(xué)生的宿舍樓,即 已經(jīng)有了 Sdept和Sloe信息,但也不能將這個信息插入到表 1中,因為這個 系還沒有招生,其Sno和Cno列的值均為空,而Sno和Cno是這個表的主屬性, 因此不能為空。數(shù)據(jù)刪除問題:如果一個學(xué)生只選了一門課,而后來又不選了,則應(yīng)該刪除此 學(xué)生選此門課程的記錄。但由于這個學(xué)生只選了一門課,則刪掉此學(xué)生的選課記 錄的同時也刪掉了此學(xué)生的其他基本信息。這些都是操作異常,為什么會出現(xiàn)操作異常呢,就是關(guān)系模式?jīng)]有設(shè)計好。為了解決

12、這類似的問題,我們就要按照關(guān)系規(guī)范化去進行設(shè)計。1.關(guān)系中的碼例1:有關(guān)系模式:學(xué)生(學(xué)號,姓名,性別,身份證號,年齡,所在系) 候選碼為:學(xué)號,身份證號 主鍵可以為“學(xué)號”或者是“身份證號”。主屬性為:學(xué)號,身份證號 作主屬性為:姓名,性別,年齡,所在系。例2:有關(guān)系模式:選課(學(xué)號,課程號,考試次數(shù),成績) 設(shè)一個學(xué)生對一門課程可以有多次考試,每一次考試有一個考試成績 候選碼為:(學(xué)號,課程號,考試次數(shù)),也為主鍵 主屬性為:學(xué)號,課程號,考試次數(shù) 非主屬性為:成績。例3:有關(guān)系模式:授課(教師號,課程號,學(xué)年) 其語義為:一個教師在一個學(xué)年可以講授多門不同的課程, 可以在不同學(xué)年對同 一

13、門課程講授多次,但不能在同一個學(xué)年對同一門課程講授多次。 一門課程在一 個學(xué)年可以由多個不同的教師講授,同一個學(xué)年可以開設(shè)多門課程,同一門課程 可以在不同學(xué)年開設(shè)多次。其候選碼為:(教師號,課程號,學(xué)年),因為只有(教師號,課程號,學(xué)年) 三者才能唯一的確定一個元組。這里的候選碼也是主鍵 主屬性為:教師號,課程號,學(xué)年。沒有非主屬性。稱這種候選碼為全部屬性的表為全碼表。2.范式1NF第一范式(1NF )是指數(shù)據(jù)表中的每個字段必須是不可拆分的最小單元。2NF 第二范式(2NF )是指滿足1NF后,要求表中的所有列,都必須依賴于主鍵, 而不能有任何一列與主鍵沒有關(guān)系,也就是說一個表只描述一件事情。

14、這個是什么意思呢,意思就是說,表中除了主鍵的其他列,不能和主鍵沒有關(guān)系, 但其實這句話又有點相互矛盾,既然沒關(guān)系,又怎么會放在同一列中呢,其實可 以這樣想,單獨把這一列和主鍵拿出來,如果他們之間沒有關(guān)系,那肯定是不滿 足第二范式的。這是一張成績表,包括學(xué)號、課程號、成績和學(xué)分,主鍵為學(xué)號,但是單獨將學(xué) 分和學(xué)號拿出來,兩個沒有關(guān)系,所以不滿足第二范式。第三范式(3NF)是指必須先滿足第二范式(2NF ),另外要求表中的每一列只 與主鍵直接相關(guān)而不是間接相關(guān)。這個又是什么意思呢,似乎和第二范式的描述差不多啊, 其實不然,還是有細微差別的,第三范式保證了表中的字段消除了傳遞依賴,比如C依賴于B,B

15、依賴 于A,那么C依賴于A,像這樣的情況不能讓 A、B、C出現(xiàn)在同一個表中。可以看出,學(xué)院地點與學(xué)號不是直接相關(guān)連, 學(xué)院地點和學(xué)院號直接相關(guān)連, 所 以不滿足數(shù)據(jù)庫第三范式。如何轉(zhuǎn)換呢?2NF函數(shù)依賴關(guān)系的分解過程有以下幾個步驟可以用模式分解的辦法將非2NF的關(guān)系模式分解為多個2NF的關(guān)系模式。步驟 用組成主鍵的屬性集合的每一個子集作為主鍵構(gòu)成一個關(guān)系模式。 將依賴于這些主鍵的屬性放置到相應(yīng)的關(guān)系模式中 最后去掉只由主鍵的子集構(gòu)成的關(guān)系模式例如,對S-L-C表,首先分解為如下的三個關(guān)系模式(下劃線部分表示主鍵):S-l(S no,.)C(C no,.)S-c(S no,Cn o,.) 然后,將依賴于這些主鍵的屬性放置到相應(yīng)的關(guān)系模式中,形成如下三個關(guān)系模 式S-l(Sno,Sname, Ssex, Sdept, Sloc)C (Cnc)S-c(s no,con, grade)最后,去掉只由主鍵的子集構(gòu)成的關(guān)系模式,也就是去掉C(Cnc)關(guān)系模式。SLC關(guān)系模式最終被分解的形式為:s-l(S no,Sha ne, Ssex,

溫馨提示

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

評論

0/150

提交評論