官术网_书友最值得收藏!

1.1.4 關系型數據庫

數據庫技術發展至今已經有 50多年,主要按照數據模型的發展而演變,經歷了層次和網狀數據庫系統、關系型數據庫系統、面向對象數據庫系統。基于層次模型(Hierarchical Model)、網狀模型(Network Model)的層次和網狀數據庫系統構成早期的數據庫產品,基于關系模型(Relational Model)的關系數據庫系統當前被大量使用,如Access 2016就是基于關系模型的關系型數據庫管理系統。基于面向對象模型(Object Oriented Model)的數據庫系統現階段商業化程度還不夠高,大多處在實驗研究階段,有待成熟。

1.實體聯系模型

在創建一個數據庫應用系統之前,先要搞清楚用戶需要從數據庫得到什么?從而決定數據庫中要存儲哪些數據及如何存儲這些數據。要解決這個問題,需要分析理解現實世界中的客觀事物,對它某一方面的客觀屬性進行描述,如描述某個學生,總是用他的姓名、性別、年齡、籍貫、家庭住址、家庭成員等屬性來反映他的客觀存在。這樣,人的認識從客觀世界(現實世界)進入了概念世界(信息世界)。下一步就斷定數據庫存儲的學生記錄中需要有姓名、性別、年齡、籍貫、家庭住址、家庭成員等字段,這就進入了數據世界(計算機世界)。上述的分析過程只是一種近似的描述,在數據庫技術領域,使用嚴格的數學模型工具完成相應的工作。實體聯系模型(Entity Relationship,E-R)就是一種描述信息世界的模型,它只描述用戶所關心的信息結構,而不涉及信息在計算機中的表示,是一種與任何計算機系統無關的“概念數據模型”,是用戶與數據庫設計人員之間進行交流的工具。

E-R模型中常用到實體、實體集、屬性、碼、域、聯系和E-R圖,它們的概念如下。

(1)實體(Entity)。

客觀存在并可相互區別的事物被稱為實體。實體可以是具體的人、事、物,也可以是抽象的概念或聯系。例如,一個學生、一所院校、學生與院校的就學關系等都是實體。同一個事物在不同的場合可以是不同的實體。例如,小張在學校是學生,在家庭是子女。

(2)實體集(Entity Set)。

同一類型的實體的集合構成實體集。例如,全體學生就是一個實體集。

(3)屬性(Attribute)。

實體在某一方面的特性被稱為屬性,一個實體可以由若干個屬性來刻畫。例如,學生實體的學號、姓名、性別、出生日期、所在院系等屬性表示了學生實體的5個方面的特性。實體名和各個屬性名的集合構成實體型。例如,學生(學號,姓名,性別,出生日期,所在院部)就是一個實體型,(200610201,李建,男,1988/6/6,音樂學院)就是學生實體型的一個實體。

(4)碼(Key)。

能唯一表示每個實體的屬性集合被稱為碼(關鍵字)。例如,在學生實體中的學號。而姓名則不是,因為可能出現重名。

(5)域(Domain)。

屬性的取值范圍被稱為該屬性的域。例如,學號的域是 8 位正整數,性別的域為(男、女),姓名的域為8個字符串集合。

(6)聯系(Relationship)。

現實世界的事物之間總是存在某種聯系的,任何實體都不可能孤立存在,實體的聯系包括實體內部的聯系(通常指組成實體的各屬性之間的聯系)和實體之間的聯系。

兩個實體之間的聯系可分為以下3類。

① 一對一聯系(1∶1)。

如果實體集A中的每一個實體僅對應實體集B中最多一個(也可以沒有)實體,反之亦然,則稱實體集A與實體集B具有一對一聯系,記為1∶1。例如,一夫一妻制下的丈夫與妻子、公民與身份證、學生與學號等。

② 一對多聯系(1∶n)。

如果實體集A中的每一個實體與實體集B中一個以上的實體對應;反之,對實體集B中的每一個實體,實體集A中最多只有一個實體與之對應,則稱實體集A與實體集B具有一對多聯系,記為 1∶n。例如,班級與學生、學校與院系、工廠與車間、國家與省份、省份與縣市等。

③ 多對多聯系(mn)。

如果實體集A中的每一個實體與實體集B中一個以上的實體對應;反之,實體集B中的每一個實體也與實體集 A 中一個以上的實體對應,則稱實體集 A 與實體集 B 具有多對多聯系,記為nm。例如,一個學生可以同時選擇多門課程,一門課程可以供多個學生選擇,所以學生與課程之間就具有多對多聯系。

(7)E-R圖。

E-R圖提供了表示實體、屬性和聯系的圖示方法,是由P.P.S Chen 于1976年提出的,用于描述客觀世界的概念模型。

① 矩形表示實體型,矩形框內為實體名。

② 橢圓形表示屬性,橢圓形框內為屬性名,并用無向邊將其與實體連接。

③ 菱形表示聯系,菱形框內為聯系名,并用無向邊分別與有關實體型連接,同時注明聯系類型(1∶1、1∶nmn)。如果聯系有屬性,則要用無向邊與該聯系連接起來。

圖1-5所示為某高校教師教學情況的E-R圖。

圖1-5 某高校教師教學情況的E-R圖

學校有若干個系部,每個系部有若干個教師。每個教師可講授多門課程。本教學實體涉及“系部”“教師”“課程”3 個實體,系部與教師之間的“隸屬”關系為一對多的聯系,教師與課程之間的“授課”關系為多對多的聯系。假設“系部”實體的屬性有系號、系名和系主任,“教師”實體的屬性有教工號、姓名和性別,“課程”實體的屬性有課程號、課程名和學分,“授課”聯系的屬性是次數。

2.關系模型

使用 E-R 圖將客觀世界抽象為概念世界以后,還要再將概念世界轉換為機器世界,這時需要使用數據模型。數據模型主要有層次模型、網狀模型、關系模型和面向對象模型。其中,關系模型是Access 數據庫管理系統所使用的。

利用二維表結構來表示實體聯系的數據模型被稱為關系模型。關系數據模型以關系數學理論為基礎,一個關系對應一個二維表。直觀上無論是實體還是實體之間的聯系都使用關系(一個二維表)來表示。例如,教師、課程、教師與課程之間的“授課”聯系都使用關系來表示,如表1-1所示。

表1-1 “教師”關系

“授課”關系

“課程”關系

(1)關系術語。

① 關系。

一個關系就是一個二維表,每個關系有一個關系名,又被稱為表名(見表1-1)。其中,有“教師”“課程”“講授”3個關系(表)。在Access中,一個關系就是數據庫文件中的一個表,具有一個表名。例如,“教師”表、“課程”表、“授課”表。

② 元組。

表中的一行就是一個元組,又被稱為一條記錄。在Access中,元組對應數據庫文件表中的一條記錄。例如,教工號為001、姓名為張晴的記錄。

③ 屬性。

表中的一列就是一個屬性,又被稱為一個字段。每個屬性有一個屬性名。在Access中,一個屬性叫作一個字段,每個字段有一個字段名。例如,教工號、姓名、性別、系號等字段。

④ 域。

域是屬性的取值范圍。例如,“男”或“女”是性別的取值范圍,對應的是性別字段的一個域。

⑤ 關系模式。

對關系的描述被稱為關系模式,它對應一個關系的結構。寫成關系名(屬性1,屬性2,…,屬性n)。

例如,在表1-1中,“教師”表的關系模式為教師(教工號,姓名,性別,系號)。

⑥ 主關鍵字。

在表中能夠唯一標識一條記錄的字段或字段組合被稱為候選關鍵字。例如,教工號和系號都是候選關鍵字。一個表可能有多個候選關鍵字,從中選擇一個作為主關鍵字,又被稱為主鍵。例如,“教師”表中的“教工號”字段在每條記錄中是唯一的,因此教工號就是主鍵。

⑦ 外部關鍵字。

如果表A和表B中有公共字段,且該字段在表B中是主鍵,則該字段在表A中被稱為外部關鍵字或外鍵。例如,“授課”表和“課程”表中都有“課程號”字段,且“課程號”在“課程”表中是主鍵,則“課程號”在“授課”表中就是外鍵。

在關系型數據庫中,主鍵和外鍵表示了兩個表之間的聯系。例如,“課程”表和“授課”表中的記錄可以通過公共的“課程號”字段相聯系,當要查找某名教工號的教師講授的課程時,可以先在“授課”表中找出該教工號所屬的課程號,再到“課程”表中找出該課程號所對應的課程。

(2)關系模型的主要特點。

關系模型對關系有一定的要求,關系模型的主要特點如下。

① 在關系(表)中每一個屬性(字段)不可再分,是最基本的單位。就是表中不能再有表。

② 在同一個關系(表)中不能有相同的屬性名(字段名)。

③ 在關系(表)中不允許有相同的元組(記錄)。

④ 在關系(表)中各屬性(字段)的順序是任意的。

⑤ 在關系(表)中元組(記錄)的順序是任意的。

⑥ 在關系(表)中每一列元素必須是同一類型的數據。

(3)關系運算。

從一個關系或幾個關系中查詢所需要的數據,就要使用關系運算。關系運算的對象是一個關系,運算結果仍是一個關系。關系的基本運算分為傳統的集合運算(并、差、交等)和專門的關系運算(選擇、投影和連接)。

① 并(Union)。

假設關系A和B具有相同的關系模式,由兩個關系A和B的并產生一個新的關系C,C由A和B去掉重復記錄后所有的記錄組成。記作C=A∪B,如表 1-2所示。

表1-2 C=A∪B

② 差(Difference)。

假設關系A和B具有相同的關系模式,由兩個關系A和B的差產生一個新的關系C,C由屬于A但不屬于B的記錄組成。記作C=A-B,如表 1-3所示。

表1-3 C=A-B

③ 交(Intersection)。

假設關系A和B具有相同的關系模式,由兩個關系A和B的差產生一個新的關系C,C由既屬于A又屬于B的所有記錄組成。記作C=A∩B,如表 1-4所示。

表1-4 C=A∩B

④ 選擇(Selection)。

從一個關系中找出滿足條件的記錄的操作稱為選擇。選擇是從原來的表中選出某些符合條件的行,其結果是原關系的一個子集。例如,從表1-1所示的“教師”表中選擇所有男教師的記錄,結果如表1-5所示。

表1-5 選擇運算

⑤ 投影(Projection)。

從一個關系中選出若干個字段組成新的關系稱為投影。投影是從原來的表中選出某些列(或全部)組成新表,相當于對關系進行垂直分解。新關系的關系模式所包含的字段個數通常比原關系的字段個數少,或者字段的排列順序不同。例如,從表1-1所示的“教師”表中找出所有教師的教工號、姓名和性別,結果如表1-6所示。

表1-6 投影運算

⑥ 聯接(Join)。

聯接是指把兩個關系中字段滿足一定條件的記錄橫向結合,組成一個新的關系。新關系中包含滿足聯接條件的記錄。

在聯接操作中,以兩個關系的字段值對應相等為條件進行的聯接稱為等值聯接(Equal Join)。去掉重復字段的等值聯接稱為自然聯接(Natural Join),它利用兩個關系中的公共字段(或語義相同的字段),把該字段值相等的記錄聯接起來。自然聯接是常用的聯接運算。例如,將表1-1中的“授課”表和“教師”表進行自然聯接,結果如表1-7所示。

表1-7 聯接運算

(4)關系規范化。

關系型數據庫中的關系是要滿足一定要求的,滿足一定要求的關系模式稱為范式(Normal Form,NF)。滿足最低要求的關系模式稱為第一范式(1NF)。在第一范式中進一步滿足一些要求的關系模式稱為第二范式(2NF),還有第三范式(3NF)、BC 范式(BCNF)、第四范式(4NF)和第五范式(5NF)。

在關系型數據庫中,任何一個關系模式都必須滿足第一范式,即表中的每個字段必須是不可分割的數據項(表中不能再包含表)。然而滿足第一范式的關系并不是最好的關系,仍然存在不少缺點,如數據冗余太多,有必要對其進行分解使之滿足更高的范式。將一個低級范式的關系模式通過投影運算分解為若干個高級范式的關系模式的集合,這種過程稱為規范化。

關系規范化可以避免大量的數據冗余、節省存儲空間、保持數據的一致性。但由于信息被存儲在不同的關系中,在一定程度上增加了操作的難度。

(5)關系的完整性。

為了保證數據庫中的數據與現實世界中的數據一致,需要對關系模型中的關系施加完整性約束條件,以保證數據的正確性、有效性和相容性。關系模型中有以下3類完整性約束。

① 實體完整性。

因為現實世界中的每一個實體都是可以區分的,實體完整性規則要求關系中的主鍵不能取空值或重復的值。所謂空值就是“不知道”或“無意義”的值。

例如,在“教師”表中,“教工號”為主鍵,“教工號”字段就不能取空值,也不能有重復值。在“授課”表中,“教工號”和“課程號”構成主鍵,這兩個字段都不能取空值,也不允許該表中任何兩條記錄的教工號和課程號的值完全相同。

② 參照完整性。

參照完整性規則要求“不允許參照不存在的實體”,即外鍵或者取空值,或者等于相應關系中主鍵的某個值。

例如,“授課”表中的“課程號”是“課程”表的主鍵,是“授課”表的外鍵,“授課”表中的“系號”字段只能取空值(表示教師未授某門課程),或者取“課程”表中已有的一個課程號值(表示教師已授某門課程)。

③ 用戶定義的完整性。

實體完整性和參照完整性是關系模型必須滿足的完整性約束條件,它們由系統自動支持。此外,用戶還可以根據某一個具體應用所涉及的數據必須滿足語義的要求,自定義完整性約束,這類完整性又被稱為域完整性。

例如,在“課程”表中,如果要求學分最少2分,最多5分,用戶就可以在表中定義學分字段為整數型數據,取值范圍為2分~5分。

主站蜘蛛池模板: 仁化县| 南木林县| 红原县| 平塘县| 台前县| 博客| 安仁县| 科尔| 灵璧县| 巫溪县| 龙陵县| 玛沁县| 锡林浩特市| 正安县| 乌拉特后旗| 洛宁县| 巫山县| 精河县| 垣曲县| 阿尔山市| 嵊泗县| 定陶县| 馆陶县| 新巴尔虎左旗| 宝山区| 石狮市| 高淳县| 新河县| 永平县| 鹿邑县| 曲沃县| 灯塔市| 海口市| 政和县| 美姑县| 洞头县| 延边| 多伦县| 高要市| 东辽县| 黔西县|