- 數據庫技術與應用:Access 2010
- 姜林楓 徐長滔 楊燕 曹鋒 盛欣等
- 3416字
- 2020-11-19 14:18:59
1.3 關系數據庫的數據模型
關系數據庫是以關系模型為基礎的數據庫,用關系模型來組織數據,通常涉及數據結構、數據操作和數據完整性約束這三個方面的內容。
(1)數據結構:關系數據庫用關系這一數據結構描述數據庫組成對象以及對象間的聯系,它描述了數據庫的靜態特性,是數據模型中最基本的部分。
(2)數據操作:數據操作是指對數據庫中各種數據對象允許執行的操作集合,包括操作及相應的操作規則,它描述了數據庫的動態特性,主要有檢索和更新兩大類操作。
(3)數據完整性約束:是一組完整性規則的集合。完整性規則是數據庫中的數據及其聯系所具有的制約和依存規則,用于保證數據的正確、有效、相容。
1.3.1 關系數據庫的數據結構
關系模型具有單一的數據結構,不論是實體還是實體之間的聯系都用關系表示。那么關系是什么呢?在用戶觀點下,關系就是一張二維表,它由行和列組成。請注意,并不是所有的二維表都是關系,只有滿足如下規范條件的二維表才能成為一個關系。
① 表的每行存儲了某個實體的數據。例如在表seller中,每行都包含某個銷售員的數據信息。
② 表的每列包含了用于表示實體某個屬性的數據。例如在表seller中,每列都包含了銷售員的一個屬性,如姓名、性別或地址等。
③ 表中的每個單元格都不能再分,只能存儲一個值。
④ 任意一列中所有單元格的數據類型必須一致。例如,表的第1行第4列是一個日期值,那么其他所有行中的第4列也必須是日期值。
⑤ 每列都必須有唯一的名稱,但表中列的順序任意。
⑥ 行的順序任意,但表中任意兩行不能有完全相同的數據值。
上面六條規范條件中,最基本的一條是:二維表的每一個單元格不可再分,即不允許表中還有表。表1-7就是不滿足這一基本規范的示例表,對于單元格“姓名”又分成了“姓”和“名”兩個分量;對于“出生日期”又分成了“年”“月”“日”三個分量。
表1-7 表中有表的示例

上面介紹了關系的概念,為了便于理解,下面舉例說明這個抽象的學術術語。日常生活中,大家常常需要買東西,當銷售員將商品賣給我們的時候,一張訂單就產生了。顯然,銷售員和商品是實體,訂單反映的是銷售員和商品之間的銷售關系。
表1-8描述了關系seller的數據結構,表1-9描述了關系product的數據結構,表1-10描述了關系 order 的數據結構。需要注意的是,seller 和 product 反映的是實體屬性信息,而 order反映的是實體銷售員和實體商品的銷售關系。在關系模型中,不論實體還是實體間聯系都用關系表示。
表1-8 實體seller的關系

表1-9 實體product的關系

表1-10 聯系order的關系

交待清楚關系這個概念后,我們說明一下與關系有關的幾個概念。
① 記錄。對于一個關系,通常將其中的每一行稱為一個記錄,或稱為一個元組。在表1-9旁邊,對記錄這一概念進行了標注。
② 字段。將關系中的每一列稱為一個字段,或稱為一個屬性。在表1-8和表1-9附近,對字段這一概念都進行了標注。
③ 關鍵字。在表的字段中,有一個字段或一組字段可以唯一標識一個記錄,將這個字段或字段組稱為關鍵字。可以起到這樣作用的關鍵字有兩類:候選關鍵字和主關鍵字。
? 候選關鍵字:一個關系中可以唯一標識一個記錄的一個字段或多個字段的組合。一個關系中可以有多個候選關鍵字。
? 主關鍵字:把關系中的一個候選關鍵字定義為主關鍵字。一個關系中只能有一個主關鍵字,用以唯一標識記錄,簡稱為主鍵。在表1-8、表1-9和表1-10附近,對關鍵字這一概念都進行了標注。
④ 外部鍵。如果某個關系中的一個字段或字段組合不是所在關系的主關鍵字或候選關鍵字,但卻是其他關系的主關鍵字,對這個關系而言,稱其為外部關鍵字,簡稱外鍵。在表1-10附近,對外部關鍵字這一概念進行了標注。
⑤ 域。關系中的每一字段有一個取值范圍,稱為域。域是一組具有相同數據類型的值的集合。如庫存的域是(0,999),又如性別的域為:(“男”,“女”)。
1.3.2 關系數據庫的數據操作
由于關系模型借助集合代數等來操縱數據庫中的數據,因此關系操作是集合操作,即操作的對象和結果都是集合,這種操作稱為一次一個集合的方式。
關系模型既支持并、差、交、積等傳統操作,又支持選擇、投影和連接等專門關系操作。
1.傳統的集合操作
傳統的集合運算包括并、差、交、積等傳統的集合運算。設關系R(見表1-11)和關系S(見表1-12)都具有n個屬性,且相應屬性值取自同一個值域,則可以定義并、差、交和積運算。
表1-11 關系R

表1-12 關系S

(1)并運算:兩個已知關系R和S的并記作:R∪S,將產生一個包含R、S中所有不同記錄的新關系。并運算的示例如表1-13所示。
表1-13 R∪S的操作結果

(2)差運算:兩個已知關系R和S的差,是所有屬于R但不屬于S的記錄組成的新關系。記作:R-S。差運算的示例如表1-14所示。
表1-14 R-S的操作結果

(3)交運算:兩個已知關系R和S的交,是屬于R而且也屬于S的記錄組成的新關系。記作:R∩S。交運算的示例如表1-15所示。
表1-15 R∩S操作結果

(4)積運算:兩個已知關系R和S的積,是R中每個記錄與S中每個記錄連接組成的新關系。記作:R×S。如果R有m個記錄,S有n個記錄,那么R×S中有m×n個記錄。積運算是一種特殊的連接運算,單純的積運算一般沒有實際意義,這里就不給出示例了。
2.專門的關系操作
專門的關系操作只有三種:選擇、投影和連接。選擇和投影的操作對象通常是一個表,分別對一個表中的數據進行橫向的或縱向的抽取;而連接操作則是對兩個表進行的操作。
(1)選擇
從一個關系中找出滿足給定條件的記錄的操作稱為選擇。選擇是從行的角度對關系內容進行的篩選,經過選擇操作后得到的結果可以形成新的關系,其關系模式不變,其內容是原關系的一個子集。
例如,從表1-8所示的seller表中篩選出所有的女員工,就是一種選擇操作。得到的結果將如表1-16所示。
表1-16 選擇操作舉例——篩選所有的女銷售員

(2)投影
從一個關系中找出若干個字段組成新的關系的操作稱為投影。投影是從列的角度對關系內容進行的篩選或重組,經過投影操作后得到的結果也形成新的關系。新關系的關系模式所包含的字段個數一般比原關系少,其內容是原表的一個子集。
例如,從表1-5所示的seller表中抽取“姓名”“性別”兩個字段構成一個新表的操作,就是一種投影操作。得到的結果如表1-17所示。
(3)連接
連接是將兩個關系中的記錄按一定的條件橫向組合,拼接成一個新的關系。不同關系中的公共字段或者具有相同語義的字段是實現連接操作的紐帶。
表1-17 投影操作舉例——顯示銷售員的姓名和性別

最常見的連接操作是自然連接,它是利用兩個關系中共有的一個字段,將該字段值相等的記錄內容連接起來,去掉其中的重復字段作為新關系中的一條記錄。表1-18給出了product表和order表按照商品編號進行自然連接的結果。
表1-18 連接操作舉例

連接過程是通過連接條件來控制的:首先在表1中找到第一個記錄,然后從表頭開始掃描表2,逐一查找滿足連接條件的記錄,找到后,將該記錄和表1中的第一個記錄進行拼接,形成查詢結果中的一個記錄。表2中的記錄全部查找以后,再找表1中的第2個記錄,然后再從頭開始掃描表2,逐一查找滿足連接條件的記錄,找到后,將該記錄和表1中的第2個記錄進行拼接,形成查詢結果中的又一個記錄。重復上述操作,直到表1中的記錄全部處理完畢。可見,連接查詢是相當耗費計算資源的,應該慎重選擇連接操作。
1.3.3 關系數據庫的數據約束
數據完整性是指關系模型中數據的正確性與一致性,關系模型允許定義的完整性約束有:實體完整性、域完整性和參照完整性。關系型數據庫系統提供了對實體的完整性、域完整性和參照完整性約束的自動支持,也就是在進行插入、修改或刪除操作時,數據庫系統自動保證數據的正確性和一致性。
(1)實體完整性約束。該約束保證實體是可識別的和唯一的,通過在關系中定義關鍵字來實現。在任何關系的任何一個元組中,關鍵字的值不能為空值、也不能取重復的值。例如:關系seller指定編號為主鍵;關系product指定商品編號為主鍵。
(2)域完整性約束。該約束保證實體屬性取值的正確性和有效性,通過在關系中定義屬性的數據類型、設置屬性的有效性規則等實現。域完整性約束由用戶根據實際情況設定:例如 seller表中指定sex是字符型字段,它的寬度是2,并且sex∈{男,女};又如order表中銷量整型數據,并且銷量值要大于1,同時要低于product表的庫存值。
(3)參照完整性約束。該約束定義了一個實體相對于另外一個實體應該遵循的約束規則,描述了實體之間的特定聯系,通過在關系中定義主鍵和外鍵的約束規則來實現。例如,將 seller 表的主鍵“銷售員編號”引入到order表中作為外鍵,然后定義約束規則,要求order表的“銷售員編號”必須是 seller 表中已經存在的“銷售員編號”。這一約束的語義是 order 表不能引用 seller表中不存在的實體。
- 數據分析實戰:基于EXCEL和SPSS系列工具的實踐
- 從零開始學Hadoop大數據分析(視頻教學版)
- DB29forLinux,UNIX,Windows數據庫管理認證指南
- 復雜性思考:復雜性科學和計算模型(原書第2版)
- Python金融大數據分析(第2版)
- Effective Amazon Machine Learning
- 業務數據分析:五招破解業務難題
- Oracle高性能自動化運維
- 數據革命:大數據價值實現方法、技術與案例
- Spark大數據分析實戰
- SQL優化最佳實踐:構建高效率Oracle數據庫的方法與技巧
- 數據中心數字孿生應用實踐
- 深入淺出 Hyperscan:高性能正則表達式算法原理與設計
- 金融商業算法建模:基于Python和SAS
- 圖數據實戰:用圖思維和圖技術解決復雜問題