經過創建實體到概念模型的映射,Entity-Relationship Model能夠表達整個數據庫的邏輯結構,不少數據庫產品都採用E-R模型來表達數據庫設計。
1、E-R模型採用了三個基本概念:實體集、關係集和屬性
a)實體集
實體Entity至關於現實中的事物或對象,好比大學中的一個person就是一個entity,實體具備一系列屬性,經過其中的某個或某幾個屬性能夠惟一地肯定這個實體,好比person_id。實體能夠是現實中具體的事物,好比person、book,也能夠是抽象的事物,好比money、course等。
實體集是一系列具備相同屬性實體的集合,好比某所大學的全部教師構成了一個稱爲instructors的實體集。
實體集能夠是相交的,假如persons實體集爲學校中的全部人,則一個person實體多是一個instructor實體或者一個student實體,或者二者都不是。
b)聯繫集
聯繫是指多個實體間的相互關聯。好比能夠定義教師A與學生B之間的聯繫advisor,這一聯繫指明A是B的導師。聯繫集是相同類型聯繫的集合,是n>=2個實體集直接的數學關係。實體集之間的關聯稱爲參與(participate),聯繫也能夠具備描述性屬性(descriptive attribute),實體集instructor和student之間的聯繫爲advisor,能夠將屬性date與該聯繫關聯起來,表示教師成爲學生導師的日期。
c)屬性
每一個屬性都有一個可取值的集合,稱爲屬性的域(domain)或者值集(value set)。Course_id的域多是特定長度的全部字符串的集合,semester的域則能夠是春夏秋冬四個季節。實體有多個屬性,每一個屬性能夠用屬性名-值的鍵值對來描述,好比instructor的一個實體能夠描述爲:{(ID,7677),(name,Crick),(dept_name, Biology)}
屬性的分類
簡單屬性與複合屬性。簡單屬性沒法再被劃分爲更小的部分,複合屬性卻能夠。好比name能夠進一步劃分爲first_name\middle_name\last_name。若是在一些場景下要使用整個屬性,在另外的場景則只須要屬性的一部分,則適合使用複合屬性。複合屬性有助於分組相關的屬性,讓建模更清晰。
單值屬性和多值屬性。
通常狀況下一個屬性只會有一個值,但有些多值的狀況,好比phone_number,一我的可能會有多個電話號碼。多值屬性用花括號區分,{phone_number},在適當的狀況下,能夠設置多值屬性的上下界,好比設定phone_number的數目爲1-2。
2、約束Constraints
a)映射基數(Mapping Cardinalities)
映射基數也稱映射比率,表示一個實體統一聯繫集能關聯的實體個數,經常使用於二元聯繫集。假設R爲實體A-B之間的聯繫集,則映射基數有以下幾種狀況:
一對一(one to one),A的實體至多與一個B實體關聯,反之亦然。
一對多(one to many),A的實體能夠與任意多個B實體關聯(>=0),B實體則只能與至多一個A實體關聯。
多對多(many to many)。A和B實體間相互關聯的數目不受限制。
b)參與約束(Participation Constraints)
若是實體集E中的每一個實體都參與到聯繫集R的至少一個聯繫中,則E在R中的參與是所有的(total),不然爲部分的(partial)。好比A-B爲一對一映射,A中的實體數多於B,則A部分參與,B所有參與。
3、E-R模型轉換爲關係模型
a)轉換具備簡單屬性的強實體集
假設E是具備簡單描述性屬性a1,a2..的強實體集,能夠轉換爲具備一樣屬性的關係模型E,它的一個元祖對應實體集中的一個實體,主鍵也是實體集E的主鍵。
b)轉換具備複雜屬性的強實體集
對於複合屬性,轉換時須要爲每一個子屬性建立單獨的屬性,好比將name拆分爲first_name, middle_name, last_name;對於多值屬性,須要使用多個元祖來表示,好比ID爲22的教師的phone_number有555-1234與444—4321,則對應兩條元祖(22, 555-1234)與(22, 444—4321),這兩個屬性共同構成了主鍵。
c)轉換聯繫集
聯繫集也轉換爲關係模型,全部參與聯繫的實體集的屬性和聯繫集的描述性屬性構成了轉換的模型的屬性。關於主鍵,對於多對多的二元聯繫,主鍵爲參與聯繫的實體集的主鍵的並集;對於一對一的聯繫,可以使用任意一方的主鍵;對於多對一的聯繫,選擇「多」端的主鍵。
學習資料:Database System Concepts, by Abraham Silberschatz, Henry F.Korth, S.Sudarshan數據庫