- Visual FoxPro程序設(shè)計
- 寧愛軍 滿春雷
- 4205字
- 2019-11-06 14:33:02
1.3 數(shù)據(jù)模型與關(guān)系數(shù)據(jù)庫
數(shù)據(jù)庫中存儲和管理的數(shù)據(jù)都是來源于現(xiàn)實世界的客觀事物,計算機不能直接處理這些具體事物,為此,人們必須把具體事物轉(zhuǎn)換成計算機能處理的數(shù)據(jù)。這個轉(zhuǎn)換過程分兩步:先將現(xiàn)實世界抽象為信息世界,建立概念模型;再將信息世界轉(zhuǎn)換為計算機世界,建立數(shù)據(jù)模型。
1.3.1 概念模型
現(xiàn)實世界中的事物及聯(lián)系經(jīng)過分析、歸納、抽象,形成信息世界。在信息世界中,為直觀地反映事物及其聯(lián)系而建立起來的模型稱為概念模型。它是按用戶的觀點對信息建立的模型,不依賴于具體計算機系統(tǒng),主要用于數(shù)據(jù)庫的設(shè)計。
目前常用實體-聯(lián)系模型表示概念模型。
1.實體
客觀存在并且可以相互區(qū)別的事物稱為實體。實體可以是具體的人、事、物,如一名學(xué)生、一本書、一門課程等;也可以是事件,如學(xué)生的一次選課、一場比賽、一次借書等。
2.實體的屬性
實體所具有的某一特性稱為屬性。如學(xué)生實體有學(xué)號、姓名、性別、出生日期、專業(yè)等多個屬性。屬性包括屬性名和屬性值,如學(xué)號、姓名、性別、出生日期、專業(yè)等為屬性名,(13011103,許志華,男,06/12/1995,機械工程)為某個學(xué)生實體的屬性值。
3.實體型
用實體名及其屬性名來抽象描述同一類實體,稱為實體型。例如,學(xué)生(學(xué)號,姓名,性別,出生日期,專業(yè))就是一個實體型,它描述的是學(xué)生這一類實體。
4.實體集
同類型實體的集合稱為實體集。例如,全體學(xué)生就是一個實體集,而(13011103,許志華,男,06/12/1995,機械工程)是這個實體集中的一個實體。
實體集和實體型的區(qū)別在于:實體集是同一類實體的集合,而實體型是同一類實體的抽象描述。
5.實體間的聯(lián)系
實體間的聯(lián)系通常是指兩個實體集之間的聯(lián)系,聯(lián)系有以下3種類型:
(1)一對一聯(lián)系(1:1)
如果對于實體集A中的每一個實體,在實體集B中至多有一個實體與之聯(lián)系,反之亦然,則稱實體集A與實體集B具有一對一聯(lián)系,記為1:1。
例如:在學(xué)校,一個班級只有一個班長,而一個班長只能在一個班級任職,則班級和班長之間具有一對一的聯(lián)系。
(2)一對多聯(lián)系(1:n)
如果對于實體集A中的每一個實體,在實體集B中有n個實體(n≥0)與之聯(lián)系,反之,對于實體集B中的每一個實體,實體集A中至多只有一個實體與之聯(lián)系,則稱實體集A與實體集B有一對多聯(lián)系,記為1:n。
例如:一個班級有多個學(xué)生,而每個學(xué)生只在一個班級中學(xué)習(xí),則班級與學(xué)生之間具有一對多的聯(lián)系。
(3)多對多聯(lián)系(m:n)
如果對于實體集A中的每一個實體,在實體集B中有n個實體(n≥0)與之聯(lián)系,反之,對于實體集B中的每一個實體,在實體集A中有m個實體(m≥0)與之聯(lián)系,則稱實體集A與實體集B具有多對多聯(lián)系,記為m:n。
例如:一門課程同時有多個學(xué)生選修,而一個學(xué)生也可以同時選修多門課程,則課程與學(xué)生之間具有多對多的聯(lián)系。
在實際應(yīng)用中,通常將多對多聯(lián)系轉(zhuǎn)換為幾個一對多聯(lián)系。
除了兩個實體集之間的聯(lián)系,一個實體集內(nèi)的實體與實體之間也可以有上述3種聯(lián)系。此外,一個實體內(nèi)部也有聯(lián)系,實體內(nèi)部的聯(lián)系通常是指組成實體的各屬性之間的聯(lián)系。
6.E-R圖
概念模型的表示方法有很多,其中最常用的是實體-聯(lián)系方法,該方法用E-R(Entity-Relationship)圖來描述概念模型。E-R圖中包含實體、屬性和聯(lián)系,它們的表示方法如下:
(1)實體:用矩形框表示,框內(nèi)寫明實體名。
(2)屬性:用橢圓形框表示,框內(nèi)寫明屬性名,并用無向邊將其與對應(yīng)實體連接起來。
(3)聯(lián)系:用菱形框表示,框內(nèi)寫明聯(lián)系名,并用無向邊分別與有關(guān)實體連接起來,同時在無向邊旁標(biāo)注聯(lián)系的類型(1:1,1:n或m:n)。
學(xué)生與課程之間的聯(lián)系用E-R圖表示如圖1-5所示。圖1-5只是一個簡單的舉例,而一個實際應(yīng)用系統(tǒng)的完整E-R圖,要比圖1-5復(fù)雜得多,包括系統(tǒng)中所有的實體、實體所有的屬性和實體間所有的聯(lián)系。

圖1-5 學(xué)生與課程聯(lián)系的E-R圖
1.3.2 數(shù)據(jù)模型
現(xiàn)實世界抽象為信息世界并建立概念模型后,還需進行第二次抽象,轉(zhuǎn)換為計算機世界,并建立數(shù)據(jù)模型。
數(shù)據(jù)模型是數(shù)據(jù)庫管理系統(tǒng)用來表示實體及實體間聯(lián)系的方法。與概念模型不同,數(shù)據(jù)模型是按計算機系統(tǒng)的觀點建立的模型,主要用于數(shù)據(jù)庫的實現(xiàn)。數(shù)據(jù)模型是數(shù)據(jù)庫的框架,是數(shù)據(jù)庫的基礎(chǔ),任何一個數(shù)據(jù)庫管理系統(tǒng)都是基于某種數(shù)據(jù)模型的。
常用的數(shù)據(jù)模型有層次模型、網(wǎng)狀模型和關(guān)系模型3種,與之對應(yīng)的數(shù)據(jù)庫類型有層次數(shù)據(jù)庫、網(wǎng)狀數(shù)據(jù)庫和關(guān)系數(shù)據(jù)庫。層次模型和網(wǎng)狀模型統(tǒng)稱為非關(guān)系模型,在20世紀(jì)70至80年代初期較為流行,現(xiàn)在最常用的是關(guān)系模型。
1.層次模型
用樹形結(jié)構(gòu)表示實體及其聯(lián)系的模型稱為層次模型,如圖1-6所示,其中的實體稱為結(jié)點,實體間的聯(lián)系用結(jié)點間的連線(有向邊)表示。
層次模型是最早出現(xiàn)的數(shù)據(jù)模型,現(xiàn)實世界中許多事物之間的聯(lián)系本來就是一種層次關(guān)系,如家族關(guān)系、行政機構(gòu)等。層次模型的特點如下:
(1)每棵樹有且只有一個結(jié)點沒有雙親,該結(jié)點稱為根結(jié)點。
(2)根結(jié)點以外的其他結(jié)點有且只有一個雙親結(jié)點。
(3)只能直接處理一對多的實體聯(lián)系。
(4)任何一個結(jié)點的值,只有按其路徑查看時,才能顯示它的全部意義。
2.網(wǎng)狀模型
網(wǎng)狀模型是采用有向圖結(jié)構(gòu)表示實體及其之間聯(lián)系的數(shù)據(jù)模型,如圖1-7所示。由于現(xiàn)實世界中事物之間的聯(lián)系更多是非層次關(guān)系的,所以用網(wǎng)狀模型表示非層次關(guān)系比層次模型更加直觀。網(wǎng)狀模型的特點如下:
(1)允許一個以上的結(jié)點無雙親。
(2)一個結(jié)點可以有多于一個的雙親。
(3)兩個結(jié)點之間有多種聯(lián)系。

圖1-6 層次數(shù)據(jù)模型示例

圖1-7 網(wǎng)狀數(shù)據(jù)模型示例
3.關(guān)系模型
用二維表的形式表示實體及實體間聯(lián)系的數(shù)據(jù)模型稱為關(guān)系模型。由行列構(gòu)成的二維表,在數(shù)據(jù)庫理論中稱為關(guān)系。表1-1所示為一個關(guān)系的示例(學(xué)生表列出了某校部分學(xué)生)。
表1-1 學(xué)生表

關(guān)系數(shù)據(jù)庫系統(tǒng)采用關(guān)系模型作為數(shù)據(jù)的組織方式,實體與實體間的聯(lián)系用關(guān)系(二維表)表示。關(guān)系模型是目前最常用的數(shù)據(jù)模型,它建立在嚴(yán)格的數(shù)學(xué)概念基礎(chǔ)上,數(shù)據(jù)描述一致,模型概念單一。
1.3.3 關(guān)系數(shù)據(jù)庫
建立在關(guān)系模型基礎(chǔ)上的數(shù)據(jù)庫就是關(guān)系數(shù)據(jù)庫。20世紀(jì)80年代以來,計算機廠商推出的數(shù)據(jù)庫管理系統(tǒng)幾乎都是關(guān)系模型,即使非關(guān)系模型的數(shù)據(jù)庫系統(tǒng)也都添加了關(guān)系接口。關(guān)系數(shù)據(jù)庫已成為應(yīng)用最廣泛的數(shù)據(jù)庫系統(tǒng),Visual FoxPro就是一種關(guān)系數(shù)據(jù)庫管理系統(tǒng)。
1.關(guān)系的相關(guān)概念
(1)關(guān)系
關(guān)系是一張規(guī)范化的二維表,表名稱為關(guān)系名,表1-1所示的學(xué)生表就是一個關(guān)系。
(2)元組
表中的一行稱為關(guān)系的一個元組。元組指包含數(shù)據(jù)的行,不包括標(biāo)題行。在表1-1的關(guān)系中,一名學(xué)生的信息占一行,有多少名學(xué)生此關(guān)系就有多少個元組。
(3)屬性
表中的一列稱為關(guān)系的一個屬性,每一列的標(biāo)題稱為屬性名。表1-1所示的關(guān)系共有9列,所以此關(guān)系共有9個屬性,屬性名分別為學(xué)號、姓名、性別、出生日期、專業(yè)、生源地、民族、政治面貌、入學(xué)成績。
(4)域
屬性的取值范圍稱為域,如性別屬性的域為(男,女)。
(5)關(guān)鍵字
關(guān)系中能唯一標(biāo)識元組的一個或一組屬性稱為關(guān)鍵字。如學(xué)生表中的學(xué)號。
(6)候選關(guān)鍵字
候選關(guān)鍵字是具有關(guān)鍵字特性的一個或一組屬性的統(tǒng)稱。例如,在學(xué)生表中,學(xué)號唯一,不能有重復(fù)值,可以作為候選關(guān)鍵字。
(7)主關(guān)鍵字
主關(guān)鍵字是從多個候選關(guān)鍵字中選出的能夠唯一標(biāo)識元組的關(guān)鍵字。一個關(guān)系中只能有一個主關(guān)鍵字。如學(xué)生表中,學(xué)號是唯一的,所以學(xué)號是主關(guān)鍵字。
(8)外部關(guān)鍵字(★)
如果一個關(guān)系R中的某個屬性不是本關(guān)系的主關(guān)鍵字或候選關(guān)鍵字,而是另一個關(guān)系S的主關(guān)鍵字或候選關(guān)鍵字,則稱該屬性為本關(guān)系R的外部關(guān)鍵字,R為參照關(guān)系,S為被參照關(guān)系。
例如,表1-2的成績表中課程號是表1-3的課程表的主關(guān)鍵字,學(xué)號是表1-1學(xué)生表的主關(guān)鍵字,所以課程號和學(xué)號都是成績表的外部關(guān)鍵字,成績表為參照關(guān)系,課程表和學(xué)生表為被參照關(guān)系。
表1-2 成績表

表1-3 課程表

(9)關(guān)系模式
關(guān)系的描述稱為關(guān)系模式,一般表示為:關(guān)系名(屬性名1,屬性名2,……,屬性名n)。例如,表1-3的課程表的關(guān)系模式為:課程(課程號,課程名,課時,學(xué)分,校區(qū))。
2.關(guān)系的規(guī)范化條件
關(guān)系是一個二維表,但不是所有的二維表都可以稱為關(guān)系。關(guān)系模型要求關(guān)系必須滿足一定的規(guī)范化條件,只有滿足條件的二維表才可稱為關(guān)系。關(guān)系的規(guī)范化條件包括:
(1)關(guān)系的每一個分量必須是一個不可分的數(shù)據(jù)項,即表中不可包含表。
(2)一個關(guān)系中不能有相同的屬性名。
(3)一個關(guān)系中不能有完全相同的元組。
(4)同一屬性的所有值必須是同一數(shù)據(jù)類型且來自同一個域。
(5)一個關(guān)系中元組的次序可以任意。
(6)一個關(guān)系中屬性的次序可以任意。
3.關(guān)系完整性
關(guān)系模型的完整性規(guī)則是對關(guān)系的某種約束條件。關(guān)系模型中有3類完整性約束:實體完整性、參照完整性、用戶定義完整性。其中,實體完整性和參照完整性是關(guān)系模型必須滿足的完整性約束條件。
(1)實體完整性
實體完整性規(guī)定:關(guān)系中所有元組的主關(guān)鍵字值不能為空值。
例如,表1-1所示的學(xué)生表中的學(xué)號為主關(guān)鍵字,所有學(xué)生的學(xué)號不能為空。
空值(NULL)是指“不知道”或“不確定”的值。關(guān)系中的一個元組對應(yīng)一個實體,若某元組的主關(guān)鍵字為空值,則說明存在一個不可標(biāo)識的實體,這與實體的定義相矛盾。
(2)參照完整性
參照完整性規(guī)定:若一個關(guān)系R的外部關(guān)鍵字F是另一個關(guān)系S的主關(guān)鍵字,則R中的每一個元組在F上的值必須是S中某一元組的主關(guān)鍵字的值,或者取空值。
例如,表1-2所示的成績表中,課程號是外部關(guān)鍵字,它是表1-3所示的課程表的主關(guān)鍵字,所以成績表中的所有課程號都必須是課程信息表中的某個課程號。
參照完整性用來約束關(guān)系與關(guān)系之間的關(guān)系。在使用參照完整性規(guī)則時,有以下幾點需要注意:
①外部關(guān)鍵字和相應(yīng)的主關(guān)鍵字可以不同名,只要相對應(yīng)并定義在相同的值域即可。
②外部關(guān)鍵字的值是否可以為空值,應(yīng)視具體問題而定。
如表1-2的成績表中,每行的課程號都不能為空,若為空,則不能標(biāo)識是哪一門課的成績。
再如有以下兩個關(guān)系:

學(xué)生關(guān)系中的專業(yè)號是外部關(guān)鍵字,它是專業(yè)關(guān)系中的主關(guān)鍵字,則在學(xué)生關(guān)系中,可以有某些元組的專業(yè)號為空值,說明這些學(xué)生目前還沒有確定專業(yè)。
(3)用戶定義完整性(★)
任何關(guān)系數(shù)據(jù)庫系統(tǒng)都應(yīng)該支持實體完整性和參照完整性。除此之外,有些關(guān)系數(shù)據(jù)庫系統(tǒng)根據(jù)其應(yīng)用環(huán)境的不同,往往還需要一些特殊的約束條件。
用戶定義完整性是針對某一具體關(guān)系的約束條件,它反映某一具體應(yīng)用所涉及的數(shù)據(jù)必須滿足的語義要求。在Visual FoxPro數(shù)據(jù)庫表中是指列(字段)的數(shù)據(jù)類型、寬度、精度、取值范圍、是否允許空值(NULL)。例如,成績表中的成績應(yīng)為數(shù)值型數(shù)據(jù),取值范圍可規(guī)定在0~100之間;學(xué)生表中,性別為字符型數(shù)據(jù),取值范圍為(男,女)。
- Learning Microsoft Windows Server 2012 Dynamic Access Control
- 觸·心:DT時代的大數(shù)據(jù)精準(zhǔn)營銷
- PyTorch自動駕駛視覺感知算法實戰(zhàn)
- 秒懂設(shè)計模式
- Hands-On Full Stack Development with Go
- Keras深度學(xué)習(xí)實戰(zhàn)
- Machine Learning in Java
- INSTANT Yii 1.1 Application Development Starter
- 響應(yīng)式Web設(shè)計:HTML5和CSS3實戰(zhàn)(第2版)
- Django 3.0入門與實踐
- Python:Deeper Insights into Machine Learning
- JSP程序設(shè)計與案例實戰(zhàn)(慕課版)
- Python大規(guī)模機器學(xué)習(xí)
- PHP 8從入門到精通(視頻教學(xué)版)
- WCF全面解析