書籍:《數據庫管理系統:原理與設計》
實體集:相似的實體
實體通過屬性來描述。
對於每個與實體集相關的屬性,必須確定該屬性的值域。
對於每個實體集,我們都選擇一個key,key就是一組最小的屬性集合。它們的值能唯一確定實體中的每個實體。有可能存在多個候選key,這時我們在其中指定一個作為主key。
聯系就是兩個或多個實體之間的一種關聯。
把相似的聯系放在一起,組成一個聯系集。
聯系集也可以具有描述性屬性。
!聯系必須能夠用參與它的實體唯一確定,而不必引用該聯系的描述屬性。例如,在works_in聯系集中,每個聯系都能用雇員的ssn和部門的did來唯一標識。對於一個給定的ssn和did,不可能有多余一個的相應since值(聯系中的一個屬性)
有時一個聯系可能包含兩個同一實體集中的兩個實體。如果一個實體集在一個聯系集中扮演多種角色,角色指示器與聯系集中的屬性連在一起給出了一個唯一的名字。
 
鍵約束:用箭頭表示,也就是說一個實體集最多在聯系集中出現一次。對於一個給定的實體,可以唯一確定出現在聯系集中的聯系。
 
Departments實體最多出現在一個manages聯系中。
這樣的聯系有時也稱為一對多。如果employee實體也有一個箭頭指向manager的話,那么這個聯系集就變成了一對一。
參與約束:分為部分的和完全的。如果一個聯系集中的實體集是全部參與的話,那么在兩者之間就用粗線連接。
弱實體:一個弱實體可以通過它的一些屬性與其他實體的主碼結合起來形成唯一標識,稱為識別屬主。
必須滿足下面的限制:
- 識別屬主集合弱實體集必須參與一個一對多的聯系集(一個識別屬主可以與一個或多個弱實體相關聯,但每個弱實體只有一個識別屬主),這個聯系集稱為是這個弱實體的識別聯系集。
 - 弱實體集在聯系集中必須是全部參與(粗線)的。
 
對於給定的識別屬主,一個弱實體中,用來標識該實體集的屬性集成為這個弱實體的部分鍵。用下划虛線表示。一個弱實體通過識別屬主的主鍵和自身的部分鍵來唯一標識。
!弱實體集和它對應的聯系集的方框要加粗線。
類層次:類似繼承,但是又不完全一樣。
 
這些實體集實例的查詢有一個約束條件,對所有Employees實體的查詢,必須也要考慮所有的Hourly_Emps和Contract_Emps實體。
可以從兩個方面來考慮類層次:
- 將實體集進行細化成子類。細化就是一個標識某個實體集(超類)的子集的過程。
 - 將兩個實體集(子類)進一步泛化為一個實體集(父類)
 
根據ISA的結構可以指定兩種約束,即交迭約束(overlap)和覆蓋約束(covering)。
交迭約束決定是否允許兩個子類含有相同的實體,如果沒有特別說明,則默認的規則是實體集之間不存在交迭。
覆蓋約束決定了子類中的實體是否包括超類中的所有實體。默認沒有覆蓋約束。
聚合:聚合允許一個聯系集(由一個虛線框表示)參與另一個聯系集。
如果一個聯系集中的屬性,對於某一個實體來說,這個值都是相同的,那么會導致信息冗余,比如說一個部門經理和部門形成一個聯系集,這個聯系集有一個屬性表示這個經理管理的所有部門的預算總和。這個時候可以考慮采用繼承isa的關系,將經理作為雇員的一個子類,並且將預算總和作為經理實體集的一個屬性。
我們可能將屬性與聯系相關聯,而不是與適當的實體相關聯,通常這樣的錯誤會導致數據冗余。
選用聚合還是選用一個三元聯系,主要看是否存在一個使聯系集合實體集(或另一個實體集)相關聯的聯系,也可以用要表達的完整性約束來指導選擇過程。
