- SQL Server 2016 從入門到實戰(視頻教學版)
- 孫亞男
- 6254字
- 2019-12-12 17:28:41
1.3 數據模型
數據模型(Data Model)是數據特征的抽象,是數據庫管理的教學形式框架,也是數據庫系統中用以提供信息表示和操作手段的形式架構。數據模型包括數據庫數據的結構部分、數據庫數據的操作部分和數據庫數據的約束條件。數據模型描述了在數據庫中結構化和操縱數據的方法,模型的結構部分規定了數據如何被描述。
1.3.1 數據模型的分類
1.組成部分
數據模型所描述的內容包括3部分:數據結構、數據操作和數據約束。
(1)數據結構:數據模型中的數據結構主要描述數據的類型、內容、性質以及數據間的聯系等。數據結構是數據模型的基礎,數據操作和約束都基本建立在數據結構上。
不同的數據結構具有不同的操作和約束。
(2)數據操作:數據模型中的數據操作主要描述在相應數據結構上的操作類型和操作方式。
(3)數據約束:數據模型中的數據約束主要描述數據結構內數據間的語法、詞義聯系、它們之間的制約和依存關系以及數據動態變化的規則,以保證數據的正確、有效和相容。
2.分類
數據模型的研究包括以下3方面:
(1)概念數據模型
這是面向數據庫用戶的現實世界的數據模型,主要用來描述世界的概念化結構,可以使數據庫的設計人員在設計的初始階段擺脫計算機系統及數據庫管理系統的具體技術問題,集中精力分析數據以及數據之間的聯系等。概念數據模型與具體的數據庫管理系統無關。需要注意的是,概念數據模型必須換成邏輯數據模型才能在數據庫管理系統中實現。
(2)邏輯數據模型
這是用戶在數據庫中看到的數據模型,是具體的數據庫管理系統所支持的數據模型,主要有網狀數據模型、層次數據模型和關系數據模型3種類型。此模型既要面向用戶,又要面向系統,主要用于數據庫管理系統的實現。
(3)物理數據模型
這是描述數據在存儲介質上的組織結構的數據模型,不僅與具體的數據庫管理系統有關,還與操作系統和硬件有關。每一種邏輯數據模型在實現時都有與其相對應的物理數據模型。數據庫管理系統為了保證其獨立性與可移植性,將大部分物理數據模型的實現工作交由系統自動完成,而設計者只設計索引、聚集等特殊結構。
數據庫的類型是根據數據模型來劃分的,而任何一個DBMS也是根據數據模型有針對性地設計出來的,這就意味著必須把數據庫組織成符合DBMS規定的數據模型。目前成熟地應用在數據庫系統中的數據模型有層次模型、網狀模型和關系模型。它們之間的根本區別在于數據之間聯系的表示方式不同(記錄型之間的聯系方式不同)。層次模型以“樹結構”表示數據之間的聯系。網狀模型以“圖結構”來表示數據之間的聯系。關系模型是用“二維表”(或稱為關系)來表示數據之間的聯系的。
1.3.2 E-R模型
E-R方法是“實體-聯系方法”(Entity-Relationship Approach)的簡稱,是描述現實世界概念結構模型的有效方法。E-R方法是表示概念模型的一種方式,用矩形表示實體型,在矩形框內寫明實體名;用橢圓表示實體的屬性,并用無向邊將其與相應的實體型連接起來;用菱形表示實體型之間的聯系,在菱形框內寫明聯系名,并用無向邊分別與有關實體型連接起來,同時在無向邊旁標上聯系的類型(1:1、1:n或m:n)。用E-R方法描述的數據模型即為E-R模型,也稱為E-R圖。圖1.2所示為一個簡單學生管理系統的數據庫E-R模型圖。

圖1.2 簡單學生管理系統的數據庫E-R圖
1.E-R圖成分
在E-R圖中,有如下4個成分。
● 矩形框:表示實體,在框中記入實體名。
● 菱形框:表示聯系,在框中記入聯系名。
● 橢圓形框:表示實體或聯系的屬性,將屬性名記入框中。對于主屬性名,則在其名稱下加一下劃線。
● 連線:實體與屬性之間、實體與聯系之間、聯系與屬性之間用直線相連,并在直線上標注聯系的類型。
2.構圖要素
構成E-R圖的基本要素是實體型、屬性和聯系,其表示方法如下。
(1)實體型(Entity):有相同屬性的實體具有相同的特征和性質,用實體名及其屬性名集合來抽象和刻畫同類實體,在E-R圖中用矩形表示,在矩形框內寫明實體名。例如,學生張三豐、學生李尋歡都是實體。
(2)屬性(Attribute):實體所具有的某一特性,一個實體可由若干個屬性來刻畫。屬性在E-R圖中用橢圓形表示,并用無向邊將其與相應的實體連接起來。例如,學生的姓名、學號、性別都是屬性。
如果是多值屬性,就在橢圓形外面再套實線橢圓。如果是派生屬性,就用虛線橢圓表示。
(3)聯系(Relationship):也稱關系,用于在信息世界中反映實體內部或實體之間的聯系。聯系包括實體內的聯系和實體間的聯系兩種,實體內部的聯系通常是指組成實體的各屬性之間的聯系,實體之間的聯系通常是指不同實體集之間的聯系。聯系在E-R圖中用菱形表示,在菱形框內寫明聯系名,并用無向邊分別與有關實體連接起來,同時在無向邊旁標上聯系的類型(1:1、1:n或m:n)。例如,老師給學生授課存在授課關系,學生選課存在選課關系。
需要注意的是,聯系也可能有屬性。例如,學生“學”某門課程所取得的成績,既不是學生的屬性也不是課程的屬性。由于“成績”既依賴于某名特定的學生又依賴于某門特定的課程,因此它是學生與課程之間的聯系“學”的屬性。一般來說,聯系可分為以下3種類型:
(1)一對一聯系(1:1)
例如,一個部門有一個經理,而每個經理只在一個部門任職,則部門與經理的聯系是一對一的。
(2)一對多聯系(1:n)
例如,某校教師與課程之間存在一對多的聯系“教”,即每個教師可以教多門課程,但是每門課程只能由一個教師來教。
(3)多對多聯系(m:n)
例如,圖1.2表示學生與課程間的聯系(“學”)是多對多的,即一個學生可以學多門課程,每門課程也可以有多個學生來學。
3.設計步驟
一般來說,用戶在設計數據庫之前需要先設計E-R模型,而E-R模型用E-R圖來表示,其設計分為3個步驟:調查分析、合并生成和修改重構。
(1)調查分析
在需求分析階段,通過對應用環境和要求進行詳盡的調查分析,用多層數據流圖和數據字典描述整個系統,逐一設計分E-R圖每個局部應用對應的數據流圖,同時將局部應用涉及的數據都收集在數據字典中。
(2)合并生成
由于實體之間的聯系在不同局部視圖中呈現不同的類型,因此用戶需要設計多個針對局部應用的E-R圖。合并生成步驟是將多個局部E-R圖的實體、屬性和聯系合并,從而生成整體的E-R圖。
(3)修改重構
經合并生成后的基本E-R圖可能存在冗余的數據和冗余的實體間聯系,即存在可由基本數據導出的數據和由其他聯系導出的聯系。冗余數據和冗余聯系容易破壞數據庫的完整性,給數據庫維護增加困難。
因此,得到基本E-R圖后,還應當進一步檢查E-R圖中是否存在冗余,如果存在,應設法予以消除。修改重構步驟主要采用分析方法來消除基本E-R圖中的冗余,也可以用規范化理論來消除冗余。
1.3.3 層次模型
當前數據庫領域常用的數據模型主要有3種:層次模型、網狀模型和關系模型。其中,層次模型和網狀模型統稱非關系模型,如圖1.3所示。

圖1.3 常見的3種數據模型
1.層次模型定義
現實世界中許多實體之間的聯系本來就呈現出一種很自然的層次關系,如家族關系、軍隊編制、行政機構等,這就需要用層次結構來描述。層次模型是按照層次結構的形式組織數據庫數據的數據模型,用樹形結構來表示各類實體以及實體間的聯系。層次模型是在數據結構中滿足下面兩個條件的基本層次聯系的集合:
● 有且僅有一個節點且沒有雙親節點,這個節點稱為根節點。
● 除根節點之外的其他節點有且只有一個雙親節點。
在層次模型中,使用節點表示記錄。記錄之間的聯系用節點之間的連線表示,這種聯系是父子之間的一對多的實體聯系。層次模型中的同一雙親的子女節點稱為兄弟節點,沒有子女節點的節點稱為葉節點。層次模型示例如圖1.4所示。

圖1.4 層次模型的示例
層次模型像一棵倒立的樹,只有一個根節點,有若干個葉節點,節點的雙親是唯一的。圖1.5是一個教學院系的數據結構,圖1.6是教學院系數據庫的一個實例,該層次數據結構中有4個記錄。

圖1.5 教學院系的數據模型

圖1.6 教學院系數據庫的一個實例
2.層次模型的數據操作與完整性約束
層次模型的數據操作主要有查詢、插入、刪除和更新。需要注意的是,進行插入、刪除、更新操作時要滿足層次模型的完整性約束條件。層次模型必須滿足的完整性約束條件如下:
(1)在進行插入記錄值操作時,如果沒有指明相應的雙親記錄值,就不能插入子女記錄值。
(2)進行刪除記錄操作時,如果刪除雙親記錄值,相應的子女節點值也同時被刪除。
(3)進行修改記錄操作時,應修改所有相應記錄,以保證數據的一致性。
3.層次模型的優缺點
層次模型能夠描述自然界的一些基本關系,是其他數據模型所不能代替的,其主要優點如下:
● 層次模型的數據結構比較簡單。
● 對于實體間聯系是固定的且預先定義好的應用系統,采用層次模型實現,其性能優于關系模型,不低于網狀模型。
● 層次數據模型提供了良好的完整性支持。
需要注意的是,層次模型中的任何一個給定的記錄值只有按其路徑查看時才能顯示它的全部意義,沒有一個子記錄值能夠脫離其雙親記錄值而獨立存在。因此,層次模型對具有一對多的層次關系的描述非常直觀、自然、容易理解。
同樣地,由于層次模型是較為單一的模型,因此能描述的基本關系較少。該模型存在的主要缺點如下:
(1)現實世界中很多聯系是非層次性的,如多對多聯系、一個節點具有多個雙親等。
(2)對插入和刪除操作的限制比較多。
(3)查詢子節點必須通過雙親節點。
(4)由于結構嚴密,層次命令趨于程序化。
層次模型表示這類聯系的方法很不靈活,只能通過引入冗余數據(易產生不一致性)或創建非自然的數據組織來解決。
1.3.4 網狀模型
在現實世界中,事物之間的聯系更多是非層次關系,用層次模型表示非樹形結構很不直接,而網狀模型則可以克服這一缺點。
網狀數據模型的典型代表是DBTG系統,這是20世紀70年代數據系統語言研究會(Conference On Data System Language, CODASYL)下屬的數據庫任務組(Data Base Task Group,DBTG)提出的一個系統方案。DBTG系統雖然不是實際的軟件系統,但是它提出的基本概念、方法和技術具有普遍意義,對于網狀數據庫系統的研制和發展起了重大的影響。后來許多系統都采用DBTG模型或者簡化的DBTG模型,如CuUinetSoftware公司的IDMS等。
1.網狀模型的數據結構
網狀模型是指滿足下面兩個條件的基本層次聯系的集合:
● 有一個以上的節點沒有雙親。
● 節點可以有多于一個的雙親。
如圖1.7所示,(a)、(b)和(c)圖都是網狀模型的示例。

圖1.7 網狀模型的示例
網狀模型是一種比層次模型更具普遍性的結構,去掉了層次模型的兩個限制,允許多個節點沒有雙親節點,允許節點有多個雙親節點,此外還允許兩個節點之間有多種聯系。因此,網狀模型可以更直接地去描述現實世界,而層次模型實際上是網狀模型的一個特例。
與層次模型一樣,網狀模型也使用記錄和記錄值表示實體集和實體,每個節點也表示一個記錄,每個記錄可包含若干個字段。
2.網狀模型的數據操作與完整性約束
與層次模型相似,網狀模型的數據操作主要包括查詢、插入、刪除和更新。進行插入操作時,允許插入尚未確定雙親節點值的子節點值。進行刪除操作時,只允許刪除雙親節點值。進行更新操作時,只需更新指定記錄即可。
因此,一般來說,網狀模型沒有層次模型那樣嚴格的完整性約束條件,但具體的網狀數據庫系統(如DBTG)對數據操作都加了一些限制,提供了一定的完整性約束。DBTG在模式DDL中提供了定義DBTG數據庫完整性的若干概念和語句,主要有以下幾種。
(1)支持記錄碼的概念。碼是唯一標識記錄的數據項的集合。在數據庫中不允許出現重復值。
(2)保證一個聯系中雙親記錄和子記錄之間是一對多的聯系。
(3)可以支持雙親記錄和子記錄之間的某些約束條件。例如,有些子記錄要求雙親記錄存在才能插入,雙親記錄刪除時也連同刪除。
3.網狀數據模型的優缺點
相對于層次模型,網狀數據模型所能描述的自然關系更多,主要優點如下:
● 能夠更為直接地描述現實世界。例如,一個節點可以有多個雙親,節點之間可以有多種聯系。
● 具有良好的性能,存取效率較高。
網狀數據模型也存在不少缺點,主要表現在:結構比較復雜,而且應用環境越大,數據庫的結構就變得越復雜,不利于最終用戶掌握;模型的數據定義語言(DDL)、數據操作語言(DML)復雜,用戶不容易使用。
此外,網狀模型中由于記錄之間的聯系是通過存取路徑實現的,因此應用程序在訪問數據時必須選擇適當的存取路徑。因此,用戶必須了解系統結構的細節,加重了編寫應用程序的負擔。
1.3.5 關系模型
關系模型是當前最重要的、應用最廣泛的一種數據模型。目前,主流的數據庫系統大部分都是基于關系模型的關系數據庫系統(Relational DataBase System, RDBS)的。1970年,美國IBM公司San Jose研究室的研究員E.F.Codd首次提出數據庫系統的關系模型,開創了數據庫關系方法和關系數據理論的研究,為數據庫技術的發展奠定了理論基礎。20世紀80年代以來,計算機廠商新推出的DBMS幾乎都支持關系模型,非關系模型的產品也大都添加了關系接口,數據庫領域當前的研究工作也都是以關系方法為基礎的。
1.關系模型的數據結構
關系數據模型是建立在嚴格的數學概念基礎上的。在關系模型中,數據的邏輯結構是一張二維表,由行和列組成。關系模型中的主要術語如下。
(1)關系:一個關系對應通常所說的一張二維表。
(2)元組:表中的一行稱為一個元組,許多系統中把元組稱為記錄。
(3)屬性:表中的一列稱為一個屬性。一個表中往往會有多個屬性,為了區分屬性,要給每一列起一個屬性名。
同一個表中的屬性應具有不同的屬性名。
(4)碼:表中的某個屬性或屬性組的值可以唯一地確定一個元組,且屬性組中不含多余的屬性,這樣的屬性或屬性組稱為關系的碼。
(5)域:屬性的取值范圍。例如,大學生年齡屬性的域是(18~30),性別的域是(男,女)。
(6)分量:元組中的屬性值。
(7)關系模式:關系的型稱為關系模式,是對關系的描述。關系模式的一般表示如下:
關系名(屬性1,屬性2,…,屬性n)
在關系模型中,實體集以及實體間的聯系都是用關系來表示的。關系模型要求關系必須是規范化的,即要求關系必須滿足一定的規范條件,這些規范條件中最基本的一條就是:關系的每一個分量必須是一個不可分的數據項,也就是說,不允許表中還有表。關系模型示例如圖1.8所示。

圖1.8 關系模型的示例
2.關系模型的數據操作與完整性約束
關系數據模型的操作主要包括查詢、插入、刪除和修改數據,這些操作必須滿足關系的完整性約束條件。關系模型中數據操作的特點是集合操作方式,即操作對象和操作結果都是集合,這種操作方式也稱為一次一集合的方式。相應地,非關系數據模型的操作方式是一次一記錄的方式。
關系的完整性約束條件包括三大類:實體完整性、參照完整性和用戶定義的完整性。實體完整性定義數據庫中每一個基本關系的主碼應滿足的條件,能夠保證元組的唯一性。參照完整性定義表之間的引用關系,即參照與被參照關系。用戶定義完整性是用戶針對具體的應用環境制定的數據規則,反映某一具體應用所涉及的數據必須滿足的語義要求。
3.關系模型的優缺點
關系模型是當前使用最為廣泛的一類模型,目前的主流數據庫系統如Oracle、SQL Server等都采用關系模型。關系數據模型的優點主要體現在以下幾點:
● 關系模型與非關系模型不同,它是建立在嚴格的數學理論基礎上的。
● 關系模型的概念單一,實體與實體間的聯系都用關系表示,對數據的檢索結果也是關系(即表),所以其數據結構簡單、清晰,用戶易懂易用。
● 關系模型的物理存儲和存取路徑對用戶透明,從而具有更高的數據獨立性、更好的安全保密性,簡化了程序員的數據庫開發工作。
需要注意的是,雖然關系模型是現在的主流,但該模型也存在一定的缺陷,主要表現在如下兩方面:
● 由于存取路徑對用戶透明,查詢效率往往不如非關系數據模型高,因此為了提高性能,必須對用戶的查詢請求進行優化,這就增加了開發數據庫管理系統的難度和負擔。
● 關系數據模型不能以自然的方式表示實體集間的聯系,存在語義信息不足、數據類型過少等弱點。
- PHP動態網站程序設計
- 精通Nginx(第2版)
- LabVIEW程序設計基礎與應用
- Android Jetpack開發:原理解析與應用實戰
- CentOS 7 Linux Server Cookbook(Second Edition)
- Learning Flask Framework
- WSO2 Developer’s Guide
- Cassandra Design Patterns(Second Edition)
- 名師講壇:Spring實戰開發(Redis+SpringDataJPA+SpringMVC+SpringSecurity)
- Citrix XenServer企業運維實戰
- Domain-Driven Design in PHP
- Node.js 12實戰
- 深入理解Java虛擬機:JVM高級特性與最佳實踐
- PostgreSQL 12 High Availability Cookbook
- Getting Started with Windows Server Security