數據庫系統(tǒng)原理與實踐 筆記 #6
數據庫設計和E-R模型
設計過程
- 設計數據庫模式、設計訪問更新數據庫的程序、以及設計控制數據訪問的安全模式
- 設計階段:
- 概念設計階段:構建實體-聯系圖
- 邏輯設計階段:將實體-聯系圖映射到關系模式
- 物理設計模式:指明數據庫文件組織格式和索引結構
- 設計問題:冗余、不完整
實體-聯系模型
- 實體-聯系(Entity-Relationship)模型:E-R模型是一種語義模型,在將現實世界事物的含義和相互關聯映射到概念模式方面非常有用
- 采用三個基礎概念:實體集、聯系集、屬性
- 一個數據庫可以被建模為:實體的集合、實體間的聯系
實體集
- 實體是現實世界可區(qū)別于所有其他對象的一個“事物”或“對象”
- 實體集是想同類型即具有相同性質(或屬性)的一個實體集合
- 實體集的外延是指屬于實體集的實體的實際集合
- 實體有屬性,它是實體集中每個成員所擁有的描述性性質
- 每個實體的每個屬性都有一個值
聯系集
- 聯系是指多個實體間的相互關聯
- 聯系集是相同類型聯系的集合
- 聯系集也可以有屬性
聯系集中實體的角色
- 實體在聯系中扮演的功能稱為實體的角色
- 角色是隱含的,通常不指定
- 當同樣的實體集參與一個聯系集多于一次,這類聯系集稱作是遞歸聯系集
聯系集的度
- 參與聯系集的實體集的數目稱為聯系集的度
- 二元聯系集:涉及兩個實體集(度為2)、數據庫系統(tǒng)中大多數聯系集都是二元
屬性
- 實體通過一組屬性來表示,屬性是實體集中每個成員所擁有的描述性性質
- 域—每個屬性可取值的集合,也稱值域
- 屬性類型:
- 簡單和復合屬性
- 單值和多值屬性
- 派生屬性和基屬性:派生屬性可以從別的屬性派生出來、派生屬性值不存儲,而是在需要時計算出來
復合屬性
- 復合屬性可以是有層次的
約束
映射基數約束
- 映射基數,或基數比率,表示一個實體通過一個聯系集能關聯的實體的個數
- 對二元聯系集來說,映射基數必然是以下情況之一:一對一、一對多、多對一、多對多
- 二元聯系集中的一個集合的某個元素可能并不映射到另一集合的任一元素
參與約束
- 如果實體集E中的每個實體都參與到聯系集R的至少一個聯系中,實體集E在聯系集R中的參與稱為全部的
- 如果實體集E中只有部分實體參與到R的聯系中,實體集E在聯系集R中的參與稱為部分的
實體集的碼
- 一個實體集的超碼是一個或多個可以用來唯一標識實體的屬性(集)
- 一個實體集的候選碼是最小的超碼
- 主碼是被選擇用來區(qū)分實體的候選碼,主碼只有一個,但候選碼可以有多個
聯系集的碼
-
如果聯系集R沒有屬性,那么屬性集合 p r i m a r y ? k e y ( E 1 ) ∪ p r i m a r y ? k e y ( E 2 ) ∪ . . . ∪ p r i m a r y ? k e y ( E n ) primary-key(E_1)\cup primary-key(E_2)\cup ... \cup primary-key(E_n) primary?key(E1?)∪primary?key(E2?)∪...∪primary?key(En?)描述了集合R中的一個聯系
-
如果聯系集R有屬性 a 1 , a 2 , . . . , a m a_1,a_2,...,a_m a1?,a2?,...,am?,那么屬性集合 p r i m a r y ? k e y ( E 1 ) ∪ p r i m a r y ? k e y ( E 2 ) ∪ . . . ∪ p r i m a r y ? k e y ( E n ) ∪ { a 1 , a 2 , . . . , a m } primary-key(E_1)\cup primary-key(E_2)\cup ... \cup primary-key(E_n)\cup \{a_1,a_2,...,a_m\} primary?key(E1?)∪primary?key(E2?)∪...∪primary?key(En?)∪{a1?,a2?,...,am?}描述了集合R中的一個聯系
-
相關的實體集的主碼的集合形成了聯系集的超碼,在以上的兩種情況下,屬性集合 p r i m a r y ? k e y ( E 1 ) ∪ p r i m a r y ? k e y ( E 2 ) ∪ . . . ∪ p r i m a r y ? k e y ( E n ) primary-key(E_1)\cup primary-key(E_2)\cup ... \cup primary-key(E_n) primary?key(E1?)∪primary?key(E2?)∪...∪primary?key(En?)總是構成聯系集的一個超碼
冗余屬性
- 假設有實體集:
- instructor實體集有dept_name屬性
- department實體集
- 以及聯系集:
- inst_dept,聯系instructor和department
- instructor中的dept_name屬性是冗余的,因為有一個明確的關系inst_dept來聯系instructor和department:
- dept_name屬性重復了inst_dept聯系中的信息,應該從instructor中除去
實體-聯系圖
E-R圖
- 矩形代表實體集
- 屬性在實體矩陣中列出
- 構成主碼的屬性以下劃線標明
- 菱形代表聯系集
參與聯系集中的實體集
- 全部參與(用兩條線標識):實體集中的每個實體都參與到聯系集的至少一個聯系中
- 部分參與:某些實體不參與到聯系集中的任何一個聯系
基數約束
- 我們在聯系集和實體集之間畫一個箭頭(
→
\rightarrow
→) 代表“一”,或者一條線段(—) 代表“多”來表示基數約束
角色
- 一個聯系的實體集不需要唯一:一個實體集總的元素每次讀出現在關系中代表一個“角色”
- course_id和prereq_id被稱為角色
三元關系上的基數約束
- 我們只允許在一個三元(或三元以上)聯系集外有一個箭頭來表示基數約束
- 如果有多余一個的箭頭,那就會有兩種解釋:
- 例如,R是A,B和C之間的三元聯系集,并且有兩個箭頭指向B和C,這可以表示為:
- 每個在A中的實體都與來自B和C的至多一個實體相關聯
- 每個來自(A,B)的實體對都與來自C的至多一個實體相關聯,而每個來自(A,C)的實體對都與來自B的至多一個實體相關聯
- 為了避免混淆,在聯系集這外我們只允許有一個箭頭
- 例如,R是A,B和C之間的三元聯系集,并且有兩個箭頭指向B和C,這可以表示為:
弱實體集
-
一個沒有足夠的屬性形成主碼的實體集叫做弱實體集
-
弱實體集必須與標識或屬主實體集(Owner Entity Set) 關聯才有意義
-
將弱實體集與其表示實體集相連的聯系稱為標識性聯系:標識聯系集以雙邊框的菱形表示
-
弱實體集通過一個全部參與的、(多對一或一對一)的聯系集與標識實體集聯系
-
弱實體集的分辨符是使得我們區(qū)分弱實體集中實體的屬性集合,也稱為該弱實體集的部分碼
-
弱實體集的主碼由標識實體集的主碼和該弱實體集的分辨符共同組成
-
弱實體集的分辨符用虛下劃線表示
-
標識聯系集以雙邊框的菱形表示
-
強實體集的主碼并不存儲于弱實體集
-
弱實體集可以參與標識性聯系以外的任何聯系,也可能與不止一個標識實體集關聯文章來源:http://www.zghlxwxcb.cn/news/detail-724988.html
-
在某些情況下,數據庫設計者會選擇講一個弱實體集表示為屬主實體集的一個 (多值)符合屬性:文章來源地址http://www.zghlxwxcb.cn/news/detail-724988.html
- 如果弱實體集只參與標識性聯系,而且其屬性不多,建模時更適合將其作為屬性
- 反之,更適合將其表示為弱實體集
轉換為關系模式
- 一個符合E-R模式的數據庫可以表示為一些關系模式的集合:
- 實體集和聯系集都可以用表示數據庫內容的統(tǒng)一的關系模式來表示
- 每個實體集合聯系集獨有一個特有的關系模式與其對應,并分配相應的名字
- 每個關系模式都有一些列,每個列多有唯一的名字
具有簡單屬性的實體集的表示
- 從強實體集轉換而來的模式與強實體集具有相同屬性、主碼
- 從弱實體集轉換的模式包含弱實體集的屬性和表示強實體集的主碼
- 該模式的主碼由強實體集的主碼與弱實體集的分辨符組合而成
復合屬性
- 復合屬性通過為每個子屬性創(chuàng)建單獨的屬性
- 實體集instructor有復合屬性name:由first_name, middle_name和last_name構成
- 轉化成關系模式后,該實體集具有name_first_name,name_middle_name和name_last_name
多值屬性
- 實體集E的多值屬性M用一個獨立的模式EM表示
- 模式EM包含對應于的E主碼及多值屬性M的屬性
- 多值屬性的每個值映射到關系模式EM的每一個獨立元組
- 不需要建立一個對應于實體集的模式,只需創(chuàng)建一個對應于多值屬性的關系即可
聯系集的表示
- 聯系集關系模式屬性的選擇
- 聯系集主碼選擇:二元聯系集主碼選擇、多元聯系集主碼選擇
- 注意:需要為聯系集的屬性建立外碼約束
模式的冗余—合并
- 多對一和一對多的聯系集的模式,如果“多”方參與是全部的,那么可以將 “多”方實體集和聯系集的模式合并成單個包含兩個模式所有屬性并集的關系模式
- 合并后模式加入原聯系集的外碼約束
- 如果“多”方參與是部分的,也可以通過使用空值來進行模式合并。轉換為關系模式時,聯系集中 “一”方的相關屬性應注意不能設置為not null
- 在一對一聯系的情況下,聯系集的關系模式可以跟參與聯系的任何一個實體集的模式進行合并
- 一般而言,連接弱實體集與其標識強實體集之間的標識性聯系集轉換出的模式是冗余的
到了這里,關于數據庫系統(tǒng)原理與實踐 筆記 #6的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!