數據庫系統概念讀書筆記——實體-聯系模型
前言
為了重新回顧我寫的消息系統架構,我需要重新讀一下數據庫系統概念的前三章,這裡簡單的做一個筆記,方便自己回顧
基本概念
實體-聯系(E-R)數據模型基於對現實世界的這樣一種認識:世界由一組稱為實體的基本對象及這些對象間的聯系組成。E-R數據模型所采用的三個主要概念是:實體集、聯系集和屬性
實體集
實體是現實世界中可區別於其他對象的“事件”或“物體”
實體集是具有相同類型及共享相同性質(或屬性)的實體集合
實體通過一組屬性來表示。屬性是實體集中每個成員具有的描述性質。將一個屬性賦予某實體集表明數據庫為實體集中每個實體存儲相似的信息,但每個實體在自己的每個屬性上都有各自的值。屬性類型劃分:
簡單屬性和符合屬性
單值屬性和多值屬性
派生屬性
聯系集
聯系是多個實體間的相互關聯
聯系集是同類型聯系的集合。規范的說,聯系集是n(n >= 2)個實體集上的數學關系,這些實體集不必互異。如果E1, E2, ..., En為n個實體集,那麼聯系集R是{(e1,e2,e3,..,en)|e1 (- E1, e2 (-E2, ..., en (- En}的一個子集,其中(e1, e2, e3,...,en)是一個聯系
約束
有了實體集合,有了聯系集合,自然而然的就產生出來約束,約束描述的是實體集和實體集之間的關系,而這種關系具現為一個聯系集。我們要討論的是映射基數和參與約束
映射基數
映射基數,或基數比例,指明通過一個聯系集能同時與另一個實體相聯系的實體數目
對於實體集A和B之間的二元聯系集R來說,映射基數必然是以下情況之一:
一對一
一對多
多對一
多對多
參與約束
如果實體集E中的每一個實體都參與到聯系集R的至少一個聯系中,我們稱實體集E全部參與聯系集R
如果實體集E中只有部分實體參與到聯系集R的聯系中,我們稱實體集E部分參與聯系集R
碼
我們必須有一個能區分一個實體集中的所有實體的方法。概念上來說,各個實體是互異的;但從數據庫的觀點來看,它們的區別必須用其屬性來表明
碼概念使得我們可以區別實體,碼同樣可以唯一地標識聯系,並將聯系互相區分開來
超碼:一個或多個屬性的集合,這些屬性的組合可以使我們在一個實體集中唯一地標識一個實體
候選碼:任意真子集都不能稱為超碼的超碼,也就是最小的超碼
主碼:數據庫設計者選定的候選碼
設計問題
實體集和聯系集的概念並不精確,而且定義一組實體及它們的相互聯系可以有多種不同的方式
用實體集還是屬性
書裡的電話號碼和姓名的例子很清楚,哪個為屬性哪個為實體集,注意兩點常見的錯誤:
一個常見的錯誤是用實體集的主碼作為另一個實體集的屬性,而不是用聯系
另一個常見的錯誤是將有關系的實體集的主碼屬性作為聯系集的屬性
用實體集還是聯系集
用聯系集可能產生的兩個問題:
數據多次存儲,浪費存儲空間
更新可能使數據處於不一致的狀態,即兩個聯系中應該具有相同值的屬性具有了不同的值
二元聯系集與n元聯系集
n元關系可以分解成為二元關系,但是會出現關系描述不准確的情況
實體-聯系圖
E-R圖包括如下幾個主要組件:
矩形:實體集
橢圓:屬性
菱形:聯系集
線段:將屬性連接到實體集或將實體集連接到屬性集
雙橢圓:多值屬性
虛橢圓:派生屬性
雙矩形:弱實體集
舉個書上的例子:
後記
純粹為了回顧E-R模型和E-R圖的畫法,比較水,高手可以直接跳過了!