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

1.2 關系數據庫理論

關系數據庫(Relational Database,RDB)是基于關系模型的數據庫,是應用數學理論處理和組織數據的一種方法。

1.2.1 概念模型及其表示方法

概念模型是現實世界信息的抽象反映,不依賴于具體的計算機系統,是現實世界到計算機世界的一個中間層次。

1.實體的概念

(1)實體(Entity)。客觀存在并可以相互區分的事物稱為實體。從具體的人、物、事件到抽象的狀態與概念都可以用實體抽象地表示。例如,在學校里,一名學生、一名教師、一門課程等都稱為實體。

(2)屬性(Attribute)。屬性是實體所具有的某些特性,通過屬性對實體進行描述。實體是由屬性組成的。一個實體本身具有許多屬性,能夠唯一標識實體的屬性稱為該實體的主鍵。例如,學號是學生實體的主鍵,每個學生都有一個屬于自己的學號,通過學號可以唯一確定是哪一位學生,在同一個學校里不允許有兩個學生具有相同的學號。

(3)主鍵(Primary Key)。一個實體往往有多個屬性,這些屬性之間是有關系的,它們構成該實體的屬性集合。如果其中有一個屬性或者多個屬性構成的子集能夠唯一標識整個屬性集合,則稱該屬性子集為屬性集合的主鍵。

(4)實體型(Entity Type)。具有相同屬性的實體必然具有共同的特征和性質。用實體名及其屬性名集合來抽象和刻畫同類實體,稱為實體型,如學生(學號,姓名,性別,出生日期,手機號)就是一個實體型。

(5)實體集(Entity Set)。同型實體的集合稱為實體集,如全體學生就是一個實體集。

(6)聯系(Relationship)。現實世界的事物之間是有聯系的。這些聯系必然要在信息世界中加以反映,如教師實體與學生實體之間存在著教和學的聯系。

2.實體之間的聯系

實體間的聯系是錯綜復雜的,但就兩個實體型的聯系來說,如圖1-3所示,主要有以下3種類型。

(1)一對一的聯系(1∶1)。對于實體集A中的每一個實體,實體集B中至多有一個實體與之聯系,反之亦然,則稱實體集A與實體集B具有一對一聯系,記為1∶1。例如,通常一個班內都只有一個班長,班級和班長之間具有一對一聯系。

(2)一對多聯系(1∶m)。對于實體集A中的每一個實體,實體集B中有m個實體(m≥2)與之聯系;反過來,對于實體集B中的每一個實體,實體集A中至多有一個實體與之聯系,則稱實體集A與實體集B具有一對多聯系,記為1∶m。例如,一個班內有多名同學,一名同學只能屬于一個班,即班級與同學之間具有一對多聯系。

(3)多對多聯系(mn)。對于實體集A中的每一個實體,實體集B中有n個實體(n≥0)與之聯系;反過來,對于實體集B中的每一個實體,實體集A中也有m個實體(m≥0)與之聯系,則稱實體集A與實體集B具有多對多聯系,記為mn。例如,學生在選課時,一個學生可以選多門課程,一門課程也可以被多個學生選取,則學生和課程之間具有多對多聯系。

圖1-3 兩個實體集之間的聯系

3.概念模型的表示方法

概念模型的表示方法很多,其中最常用的是實體-聯系模型(Entity-Relationship Model),簡稱為E-R模型。在E-R概念模型中,信息由實體型、實體屬性和實體間的聯系3種概念單元來表示。

(1)實體型表示建立概念模型的對象,用長方框表示,在框內寫上實體名,如學生、課程等。

(2)實體屬性是實體的說明,用橢圓框表示實體的屬性,并用無向邊把實體與其屬性連接起來,如學生實體有學號、姓名、性別、年齡、手機號等屬性。

(3)實體間的聯系是兩個或兩個以上實體類型之間的有名稱的關聯。實體間的聯系用菱形框表示,菱形框內要有聯系名,并用無向邊把菱形框分別與有關實體相連接,在無向邊的旁邊標上聯系的類型。例如,可以用E-R圖來表示某學校學生選課情況的概念模型,如圖1-4所示。一個學生可以選修多門課程,一門課程也可以被多個學生選修。因此,學生和課程之間具有多對多的聯系。

圖1-4 實體、實體屬性及實體聯系模型

1.2.2 數據模型

在概念模型基礎上建立的適用于數據庫層的模型,稱為數據模型。一般而言,數據模型是一組嚴格定義的概念集合。這些概念精確地描述了系統的靜態特征、動態特征和完整性約束條件。

1.數據模型的三要素

數據模型由數據結構、數據操作和完整性約束3個要素組成。

(1)數據結構。數據結構是對象和對象間聯系的表達和實現,是所研究的對象類型的集合,用于描述數據庫系統的靜態特性。數據結構所研究的是數據本身的類型、內容和性質以及數據之間的關系,如關系模型中的主鍵、外鍵等。

(2)數據操作。數據操作用于描述數據庫系統的動態特征,是對數據庫中對象實例允許執行的操作集合,主要指檢索和更新(插入、刪除、修改)兩類操作。數據模型必須定義這些操作的確切含義、操作符號、操作規則(如優先級)以及實現操作的語言。

(3)完整性約束。數據完整性約束是一組完整性規則的集合,它規定數據庫狀態及狀態變化所應滿足的條件,以保證數據的正確性、有效性和相容性。完整性規則是給定的數據模型中數據及其聯系所具有的制約和存儲規則,用以限定符合數據模型的數據庫狀態以及狀態的變化,以保證數據的正確、有效和相容。在關系模型中,一般關系必須滿足實體完整性和參照完整性兩個條件。

2.常用數據庫模型

常用數據庫模型有下列4種。

(1)層次模型(Hierarchical Model)。層次數據庫用樹形結構表示實體之間聯系的模型叫層次模型,它的數據結構類似一棵倒置的樹,每個節點表示一個記錄類型,記錄之間的聯系是一對多的聯系,現實世界中很多事物都是按層次組織起來的。

層次模型的優點是結構清晰,表示各節點之間的聯系簡單;容易表示現實世界的層次結構的事物及其之間的聯系。缺點是不能表示兩個以上實體之間的復雜聯系和實體之間的多對多聯系;嚴格的層次順序使數據插入和刪除操作變得復雜。

(2)網狀模型(Network Model)。網狀數據庫是用來處理以記錄類型為節點的網狀數據模型的數據庫。網狀模型采用網狀結構表示實體及其之間的聯系。網狀結構的每一個節點代表一個記錄類型,記錄類型可包含若干字段,聯系用鏈接指針表示,去掉了層次模型的限制。由于網狀模型比較復雜,一般實際的網狀數據庫管理系統對網狀都有一些具體的限制。

網狀模型的優點是能夠表示實體之間的多種復雜聯系。缺點是網狀模型比較復雜,需要程序員熟悉數據庫的邏輯結構;在重新組織數據庫時容易失去數據獨立性。

(3)關系模型(Relational Model)。關系數據庫是目前流行的數據庫。它是建立在關系數據庫模型基礎上的數據庫,借助集合代數等概念和方法來處理數據庫中的數據,是用戶看到的二維表格集合形式的數據庫。關系模型是目前最重要的一種數據模型,關系數據庫系統采用關系模型作為數據的組織方式。SQL Server數據庫就是基于關系模型建立的。

(4)面向對象模型(Object Oriented Model)。面向對象模型采用面向對象的方法來設計數據庫。面向對象的數據庫存儲對象是以對象為單位,每個對象包含對象的屬性和方法,具有類和繼承等特點。Computer Associates的Jasmine就是面向對象模型的數據庫系統。

對象模型也可以用二維表來表示,稱為對象表。但對象表是用一個類(對象類型)表定義的。一個對象表用來存儲這個類的一組對象。對象表的每一行存儲該類的一個對象(對象的一個實例),對象表的列則與對象的各個屬性相對應。因此,在面向對象數據庫中,表分為關系表和對象表,雖然都是二維表的結構,但卻是基于兩種不同的數據模型。

1.2.3 關系運算

關系數據操作就是關系運算,即從一個關系中找出所需要的數據。

1.關系模型中的基本運算

在關系中訪問所需的數據時,需要對關系進行一定的關系運算。關系數據庫主要支持選擇、投影和連接關系運算,它們源于關系代數中并、交、差、選擇、投影和連接等運算。

(1)選擇。從一個表中找出滿足指定條件的記錄行形成一個新表的操作稱為選擇。選擇是從行的角度進行運算得到新的表,新表的關系模式不變,其記錄是原表的一個子集。選擇關系運算如圖1-5所示。

例如,在student關系中查詢所有sex為“女”的學生。

(2)投影。從一個表中找出若干字段形成一個新表的操作稱為投影。投影是從列的角度進行的運算,通過對表中的字段進行選擇或重組得到新的表。新表的關系模式所包含的字段個數一般比原表少,或者字段的排列順序與原表不同,其內容是原表的一個子集。投影關系運算如圖1-6所示。

例如,在student關系中查詢所有學生的studentno和birthdate。

圖1-5 選擇關系

圖1-6 投影關系

(3)連接。選擇和投影都是對單表進行的運算。在通常情況下,需要從兩個表中選擇滿足條件的記錄。連接就是這樣的運算方式,它是將兩個表中的行按一定的條件橫向結合,形成一個新的表。連接關系運算如圖1-7所示。

例如,查詢學生的sname和final,兩個數據項分別來自student關系和score關系,需要在兩個關系連接之后,再從中按照一定條件篩選出sname和final的數據。

圖1-7 連接關系

2.數據完整性

確保持久化數據檢索不出錯對于數據管理來說非常關鍵,也是數據庫面臨的最主要問題。沒有數據完整性,則不能保證查詢結果的正確性,那么可用性也就無從談起了。

(1)實體完整性。實體完整性是指關系的主關鍵字不能取“空值”。一個關系對應現實世界中的一個實體集?,F實世界中的實體是可以相互區分、相互識別的,即它們應具有某種唯一性標識。在關系模式中,以主關鍵字作為唯一性標識,而主關鍵字中的屬性(稱為主屬性)不能取空值;否則,表明關系模式中存在著不可標識的實體(因為空值是“不確定”的)。這與現實世界的實際情況相矛盾,這樣的實體就不是一個完整實體。按實體完整性規則要求,主屬性不得取空值,如果主關鍵字是多個屬性的組合,那么所有主屬性均不得取空值。

例如,表1-1中student表的studentno作為主關鍵字,該列不能有空值;否則無法對應某個具體的學生。如果存在空值,則該表不完整,對應關系不符合實體完整性規則的約束條件。在物理數據庫中,表的主鍵強制執行實體完整性。

(2)域完整性。域完整性確保屬性中只允許一個有效數據。域是屬性可能值的范圍,如整數、日期或字符。是否可以是空值也是域完整性的一部分。在物理數據庫中,可以利用表中的數據類型和行可控性強制執行域完整性。

(3)參照完整性。參照完整性是定義建立關系之間聯系的主關鍵字與外部關鍵字引用的約束條件。關系數據庫中通常包含多個存在相互聯系的關系,關系與關系之間的聯系是通過公共屬性來實現的。

例如,在teaching數據庫中,將score關系作為參照關系,將student關系作為被參照關系,以studentno作為兩個關系進行關聯的屬性,則studentno是student關系的主鍵,是score關系的外鍵。score關系通過外鍵studentno參照student關系。其中,公共屬性studentno是一個關系student(稱為被參照關系)的主鍵,同時又是score關系(稱為參照關系)的外鍵。

(4)事務完整性。事務可以確保每個邏輯單元的工作(如插入100行或更新1000行數據)作為單個事務執行。事務可通過其4個基本屬性檢測數據庫產品的質量,即原子性(全部執行或全部不執行)、一致性(數據庫必須在一致的狀態下開始及結束事務)、隔離性(一項事務不應該影響其他事務)和持久性(一旦提交,始終提交)。

(5)用戶定義完整性。對于數據完整性,除了前面4個普遍接受的定義,還添加了用戶定義數據完整性。用戶定義完整性則是根據應用環境的要求和實際需要,對某一具體應用所涉及的數據提出約束性條件。這一約束機制一般不應由應用程序提供,而應由關系模型提供定義并檢驗,用戶定義完整性主要包括字段有效性約束和記錄有效性。

主站蜘蛛池模板: 会东县| 偏关县| 洪江市| 准格尔旗| 大理市| 柳林县| 康定县| 亚东县| 刚察县| 花莲县| 吴堡县| 阳城县| 太湖县| 苏尼特右旗| 菏泽市| 东乌珠穆沁旗| 扎鲁特旗| 喀什市| 阜康市| 习水县| 长汀县| 十堰市| 汾西县| 巴南区| 钦州市| 吴桥县| 丽江市| 庆城县| 资兴市| 枣阳市| 永春县| 同仁县| 克山县| 合水县| 颍上县| 军事| 襄垣县| 长宁县| 通化市| 凌云县| 吴堡县|