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

1.2 關系數據庫

關系數據庫是基于關系模型的數據庫,現實世界的實體及實體間的各種聯系均用單一的結構類型即關系來表示。

1.2.1 關系術語

1.基本的關系術語

(1)關系 一個關系就是一張二維表,每個關系有一個關系名,也稱為表名。如圖1.8所示,其中有“系部”、“學生”、“課程”和“選課”4個關系。

(2)元組 表中的一行就是一個元組,也稱為一條記錄。如圖1.8所示,“學生”關系中包含6條記錄。

(3)屬性 表中的一列就是一個屬性,也稱為一個字段。如圖1.8所示,“學生”關系中包含“學號”、“姓名”、“性別”和“系號”4個字段。

(4)域 屬性的取值范圍。例如,“性別”的域是“男”或“女”,“成績”(百分制)的域是0~100分。

(5)關系模式 對關系的描述稱為關系模式,它對應一個關系的結構。其格式為:

關系名(屬性1,屬性2,…,屬性n

例如,圖1.8所示的“學生”關系表的關系模式為:

學生(學號,姓名,性別,系號)

(6)主關鍵字 在表中能夠唯一標識一條記錄的字段或字段組合,稱為候選關鍵字。一個表中可能有多個候選關鍵字,從中選擇一個作為主關鍵字。主關鍵字也稱為主鍵。

例如,“學生”關系表中的“學號”字段在每條記錄中都是唯一的,因此學號就是主鍵。在“選課”關系表中,“學號”和“課程號”兩個字段構成一個主鍵。

(7)外部關鍵字 如果表A和表B中有公共字段,且該字段在表B中是主鍵,則該字段在表A中就稱為外部關鍵字。外部關鍵字也稱為外鍵。

例如,“學生”關系表和“系部”關系表中都有“系號”字段,且“系號”在“系部”關系表中是主鍵,則“系號”在“學生”關系表中就是外鍵。

在關系數據庫中,主鍵和外鍵表示了兩個表之間的聯系。例如,在圖1.8所示的關系模型中,“系部”關系表和“學生”關系表中的記錄可以通過公共的“系號”字段相聯系,當要查找某位學生所在系的系主任時,可以先在“學生”關系表中找出相應的系號,然后再到“系部”關系表中找出該系號所對應的系主任。

2.關系數據庫的主要特點

(1)關系中的每個屬性是不可分割的數據項,即表中不能再包含表。如果不滿足這個條件,就不能稱為關系數據庫。例如,表1.1所示的表格就不符合要求。

表1.1 不符合規范化要求的表格

(2)關系中每一列元素必須是同一類型的數據,來自同一個域。

(3)關系中不允許出現相同的字段。

(4)關系中不允許出現相同的記錄。

(5)關系中的行、列次序可以任意交換,不影響其信息內容。

1.2.2 關系的完整性

關系模型由關系數據結構、關系完整性約束和關系操作集合3部分組成。

關系模型的完整性規則是對關系的某種約束條件,以保證數據的正確性、有效性和相容性。關系模型中有3類完整性約束。

1.實體完整性

實體完整性規則要求關系中的主鍵不能取空值或重復的值。所謂空值就是“不知道”或“無意義”的值。

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

2.參照完整性

參照完整性規則定義外鍵和主鍵之間的引用規則,即外鍵或者取空值,或者等于相應關系中主鍵的某個值。

例如,“系號”在“學生”關系表中為外鍵,在“系部”關系表中為主鍵,則“學生”關系表中的“系號”只能取空值(表示學生尚未選擇某個系),或者取“系部”表中已有的一個系號值(表示學生已屬于某個系)。

實體完整性和參照完整性是關系模型必須滿足的完整性約束條件。

3.用戶定義的完整性

用戶定義的完整性是指根據某一具體應用所涉及的數據必須滿足的語義要求,自定義的完整性約束。

例如,在“選課”關系表中,如果要求成績以百分制表示,并保留一位小數,則用戶就可以在表中定義成績字段為數值型數據,小數位數為1,取值范圍為0~100。

1.2.3 關系運算

要在關系數據庫中訪問所需要的數據,就要進行關系運算。關系運算分為兩類:傳統的集合運算和專門的關系運算。關系運算的對象是一個關系,運算結果仍是一個關系。

1.傳統的集合運算

傳統的集合運算包括并(∪)、交(∩)、差(?)、廣義笛卡兒積(×)4種。圖1.9所示為關系R和關系S的4種集合運算示例(RS具有相同的結構)。

圖1.9 集合運算示例

2.專門的關系運算

專門的關系運算包括選擇、投影和連接。

(1)選擇(Selection)從一個關系中找出滿足條件的記錄的操作稱為選擇。選擇是從行的角度進行的運算,其結果是原關系的一個子集。例如,從圖1.8所示的“學生”關系表中選擇所有女生的記錄,結果如表1.2所示。

表1.2 選擇運算

(2)投影(Projection)從一個關系中選出若干字段組成新的關系稱為投影。投影是從列的角度進行的運算,相當于對關系進行垂直分解。例如,從圖1.8所示的“學生”關系表中找出所有學生的系號、姓名和性別,結果如表1.3所示。

表1.3 投影運算

(3)連接(Join)連接是指把兩個關系中的記錄按一定的條件橫向結合,生成一個新的關系。

在連接操作中,以兩個關系的字段值對應相等為條件進行的連接稱為等值連接。去掉重復字段的等值連接稱為自然連接,它利用兩個關系中的公共字段(或語義相同的字段),把字段值相等的記錄連接起來。自然連接是最常用的連接運算。例如,將圖1.8中的“系部”關系表和“學生”關系表進行自然連接,結果如表1.4所示。

表1.4 連接運算

利用關系運算或幾個基本關系運算的組合,可以實現對關系數據庫的查詢,找出用戶感興趣的數據。

1.2.4 關系規范化

所謂關系規范化,就是對數據庫中的關系模式進行分解,將不同的概念分散到不同的關系中,使得每個關系的任務單純而明確,達到概念的單一化。例如,一個關系只描述一個概念、一個實體或者實體間的一種聯系。

滿足一定條件的關系模式稱為范式(Normal Form,NF)。根據滿足規范條件的不同,分為第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、BC范式(BCNF)、第四范式(4NF)和第五范式(5NF)。常用的是前3 種范式,級別越高,滿足的要求越高,規范化程度也越高。

在關系數據庫中,任何一個關系模式都必須滿足第一范式,即表中的每個字段必須是不可分割的數據項(表中不能再包含表)。將一個低級范式的關系模式分解為多個高一級范式的關系模式的過程,稱為規范化。

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

主站蜘蛛池模板: 罗平县| 漾濞| 田阳县| 寿光市| 伊宁县| 修武县| 马公市| 开远市| 义乌市| 韩城市| 页游| 汤阴县| 夏河县| 星子县| 天门市| 松桃| 永定县| 泰安市| 鸡西市| 界首市| 宝坻区| 衡水市| 凤山市| 灵武市| 西昌市| 宁乡县| 东台市| 郁南县| 仙桃市| 隆化县| 章丘市| 马公市| 崇明县| 永胜县| 丰台区| 清徐县| 荔浦县| 蒲江县| 唐山市| 庆城县| 威远县|