引言:《一步一步設計你的資料庫三》中我們討論了基底實體關聯式模式構件及其語義。這些概念非常重要,是今天這一講的基礎,在開始本文內容之前建議大家可以再回顧一下上一篇的內容。今天我們將討論進階實體關聯模型構件,與上一篇一起涵蓋了ER模型構圖的大部分內容。三元關係是今天這一講的痛點,大家可以重點關注。
泛化Generalization):超類型與子類型
原始的ER模型已經能描述基本的資料和關係,但泛化Generalization)概念的引入能方便多個概念資料模型的整合。
泛化關係是指抽取多個實體的共同屬性作為超類實體。泛化層次關係中的低層次實體——子類型,對超類實體中的屬性進行繼承與添加,子類型特殊化了超類型。
ER模型中的泛化與物件導向編程中的繼承概念相似,但其標記法構圖方式)有些差異。
表示員工與經理、工程師、技術員、秘書之間的泛化關係。Employee為超類實體,並包含共同屬性,Manager、Engineer、Technician、Secretary都是Employee的子類實體,它們能包含自身特有的屬性。
圖1 Employee與Manager、Engineer、Technician、Secretary之間的泛化關係
泛化可以表達子類型的兩種重要約束,重疊性約束disjointness)與完備性約束completeness)。
重疊性約束表示各個子類型之間是否是排他的。若為排他的則用字母“d”標識,否則用“o”標識o -> overlap)。圖1中各子類實體概念上是排他的。
對員工、客戶實體進行泛化,抽象出超類實體個人,得到如下關係圖。由於部分Employee也可能是Customer,故子類實體Employee與Customer之間概念是重疊的。
圖2 Individual與Employee、Customer之間的泛化關係
完備性約束表示所有子類型在當前系統中是否能完全覆蓋超類型。若能完全覆蓋則在超類型與圓圈之間用雙線標識可以把雙線理解為等號)。在圖2中子類實體Employee與Customer能完全覆蓋超類Individual實體。
彙總Aggregation)
彙總是與泛化抽象不同的另一種超類型與子類型間的抽象。
泛化表示“is-a”語義,彙總表示“part-of”語義。彙總中子類型與超類型間沒有繼承關係。
彙總關係的標記法是在圓圈中標識字母“A”來表示。
表示軟體產品由程式與使用者手冊組成。
圖3 Software-product與Program、User’s Guide之間的彙總關係
三元關係Ternary Relationships)
當通過二元關係無法準確描述三個實體間的聯絡時,我們需要使用三元關係。
三元關係中“連通數”的確定方法:
註:什麼時候需要使用三元關係的執行個體請參看:《一步一步設計你的資料庫三》中的“關係的度Degree of a Relationship)”小節。關係的“連通數”概念請參看:《一步一步設計你的資料庫三》的“關係的連通數Connectivity of a Relationship)”小節。
我們來看幾個三元關係的執行個體,注意各個圖中關係的度,並理解其中的語義。
圖4 技術員在項目中使用手冊的關係
圖4中蘊含的語義為:
用數學中的函數依賴表示圖4的關係:
圖5 員工被分配不同地點的項目之間的關係
圖5中蘊含的語義為:
用數學中的函數依賴表示圖5的關係:
圖6 經理管理項目與工程師的關係
圖6中蘊含的語義為:
用數學中的函數依賴表示圖6的關係:
圖7 員工在項目中使用技能的關係
圖7中蘊含的語義為:
圖7各實體之間沒有函數依賴
上述4種形式的三元關係,連通數為“一”的實體數量與該三元關係反映的函數依賴語義的數目一致。
三元關係也能有屬性。屬性值由三個實體的鍵的組合唯一確定。
n元關係General n-ary Relationships)
三元關係可以擴充到n元關係,描述n個實體之間的關係。
一般而言,n元關係中每一個連通數為“一”的實體的鍵都會出現在一個函數依賴運算式的右側。
對於n元關係,使用語言來表達其中的約束相對較為困難。建議使用數學形式即函數依賴FD)來表現。
n元關係的函數依賴條目數量與關係圖中“一”端實體的數量相同0~n條)。
n元關係的函數依賴運算式包含n個元素,n-1個元素出現在運算式左側,1個元素出現在右側。
圖8 n元關係圖例
排他性約束Exclusion Constraint)
一般預設)情況下,多種關係之間是相容的“或”關係,即允許任意或所有實體參與這些關係。
在某些情況下,多種關係之間是非相容性“或”關係,即參與關係的實體只能選擇其中一種關係,不能同時選擇多種關係。
表示的語義為:一項工作任務要麼被歸為外部項目中,要麼被歸為內部項目中,不可能同時屬於外部項目和內部項目。
圖9 排他性約束關係圖例
我們對上一篇《一步一步設計你的資料庫三》與本篇的重點內容做一個總的回顧