角色(聯絡集可以定義在一個實體集上)
- 參加聯絡的實體集不必是互不相同的標記 “manager” 和 “worker” 稱為角色; 他們指明了employee 實體是如何通過 works-for 聯絡集相關的.
- 角色在 E-R 圖中通過對串連菱形與矩形的直線做標記來表示.
- 角色標記是可選的, 用於明確聯絡的語義
基數約束
在聯絡集與實體集之間用有向直線()表示“一”,無向直線(—)表示“多”.
一對一聯絡
例如:從customer到loan的一對一聯絡:
- 通過聯絡borrower 一個客戶最多隻能與一筆貸款相關聯
- 通過聯絡borrower 一筆貸款最多隻能與一個客戶相關聯
一對多聯絡(包括0)
通過從customer到loan的一對多聯絡borrower,一筆貸款最多隻能與一個客戶相關聯, 但一個客戶可與多筆(包括 0)貸款相關聯
多對多聯絡(包括0)
- 一個客戶可與多筆(包括 0)貸款相關聯
- 一筆貸款可與多個客戶(包括 0)相關聯
實體集參加聯絡集的方式
- 完全參加 (用雙線表示): 實體集中的每個實體都至少參加聯絡集中的一個聯絡
E.g. loan 參加 borrower 是完全的
通過borrower,每筆 loan 至少與一個 customer 關聯
- 部分參加: 某些實體可能未參加聯絡集中的任何聯絡
E.g. customer 參加 borrower 是部分的
基數限制標記法(基數限制也能表達參加約束)
(min,max):表示實體集A的一個實體最少min次最多max次參與到聯絡中。
Min =0 部分參與, 表示可以不參與; Min >= 1 完全參與;表示必須參與至少一次。
(customer)max = 1; (loan)max = 1 A一對一B
(customer)max = *; (loan)max = 1 A一對多B
鍵
- 實體集的超鍵是指其值能唯一確定實體的一個或多個屬性的集合.
- 實體集的候選索引鍵是指具有極小性的超鍵
- Customer-id 是 customer 的候選索引鍵
- account-number 是 account 的候選索引鍵
- 可能存在多個候選索引鍵, 選擇其中之一作為主鍵.
具有三元聯絡的E-R 圖
三元聯絡的基數約束
三元以上的聯絡最多隻允許出現一個箭頭
E.g. 從works-on 到 job 的箭頭表示每個僱員在每個分行最多隻承擔一項工作.
若有多個箭頭, 其意義有兩種定義方式
- A, B 和 C 之間的三元聯絡R 帶有指向 B 和 C 的箭頭可以意味著
- 每個A 實體與唯一的B 和 C 實體相關聯,或
- 每個實體對 (A, B) 與唯一的 C 實體相關聯, 並且每個實體對 (A,C) 與唯一的 B 實體相關聯上面這兩種定義方式在不同的系統中都被使用
- 為避免混淆我們禁止多於一個箭頭的情況
弱實體集
- 不具有主鍵的實體集稱為弱實體集.
- 弱實體集的存在依賴於它的標識實體集的存在
- 弱實體集通過一個從標識實體集到弱實體集的完全的、一對多的聯絡集來與它的標識實體集相關聯
- 標識聯絡用雙菱形表示
- 弱實體集的辨別屬性(或稱部分鍵)是指在一個弱實體集內區分所有實體的屬性集合.
- 弱實體集的主鍵由它所依賴的強實體集的主鍵加上它的辨別屬性群組成.
比如家屬實體集依賴於職員實體集存在。
- 弱實體集用雙矩形表示.
- 用下劃虛線表示弱實體集的辨別屬性.
- payment-number – payment 實體集的辨別屬性
- payment 的主鍵 – (loan-number, payment-number)
- 注意: 強實體集的主鍵並不顯式地存於弱實體集中, 而是隱含地通過標識聯絡起作用.
- 如果 loan-number 顯式存在, payment 就成了強實體, 則payment 與 loan 之間的聯絡變得冗餘。因為payment 與 loan共有的屬性loan-number 定義了一個隱含的聯絡。
特化/演繹
- 自頂向下設計過程中, 確定實體集中的一個具有特殊性質的子集.
- 這些子整合為低層實體集, 它們具有特殊的屬性或者參加特殊的聯絡.
- 用帶有ISA 標記的三角形表示 (E.g. customer “is a” person).
- 屬性繼承 – 低層實體集繼承它串連的高層實體集的所有屬性及參加的聯絡.
泛化/歸納
- 自底向上設計過程 – 將若干共用相同特性的實體集組合成一個高層實體集.
- 特化與泛化簡單互逆; 他們在 E-R 圖中以相同方式表示.
特化與泛化
一個實體集根據不同特性可以有多個特化實體集.
E.g. 除了officer vs. secretary vs. teller 之外, 還有 permanent-employee vs. temporary-employee
每個僱員是
- permanent-employee 或 temporary-employee 之一的成員
- 也是 officer, secretary 或 teller 之一的成員
ISA 聯絡也稱為超類- 子類聯絡
對特化/泛化的設計約束
關於哪些實體可以是給定低層實體集的成員的約束.
- –通過條件定義;E.g. 超過65歲的客戶是 senior-citizen 實體集的成員; senior-citizen ISA person.
- –使用者定義
關於實體在單個泛化中是否可以屬於多於一個低層實體集的約束.
- –不相交
- 一個實體只能屬於一個低層實體集
- 在 E-R 圖中ISA三角形旁邊加註disjoint
- –重疊
完備性約束 – 說明高層實體集中的實體是否必須至少屬於一個低層實體集.
構建概念性模型E_R模型:
- 標識實體;
- 標識聯絡;
- 標識實體和聯絡的有關屬性;
- 確定屬性域;
- 確定候選索引鍵和主鍵屬性;
- 特化和泛化實體;
- 刪除和關聯式模式不相容的屬性;
- 檢查模型是否支援使用者事務。
E-R 設計決策
- 用屬性還是實體集來表示對象
- 一個現實世界概念最好表示為實體集還是聯絡集
- 用三元聯絡還是一對二元聯絡
- 用強實體集還是弱實體集
- 特化/泛化的使用 – 有助於設計的模組性
- 聚集的使用 – 將聚集實體集視為單個單元, 從而不必關心其內部結構的細節
銀行資料庫樣本
- 銀行系統資料要求銀行由支行組成。每個支行在特定的城市,具有唯一的名稱。銀行可以查看支行的資產。
- 銀行客戶通過他們的編號區分,銀行儲存了每個客戶的名字、居住的城市和街道。客戶有自己的賬戶,可以貸款。一個客戶可能和特定的職員相關聯,他充當客戶的貸款員或個人銀行顧問。
- 銀行提供兩種賬戶:儲蓄賬戶和支票賬戶。賬戶可以對應多個客戶,一個客戶也可擁有多個賬戶。每個賬戶被賦予唯一的帳號。銀行儲存了每個賬戶的餘額,以及賬戶的擁有者訪問賬戶的最近日期。另外,每個儲蓄賬戶有一個利率,每個支票賬戶的透支資訊也被記錄下來。銀行為客戶提供貸款。某次貸款在特定的銀行發生,貸款可以為一個人或多個人合貸。每筆貸款由唯一的貸款號確定。每個貸款,銀行儲存了貸款數量和貸款還款的記錄。雖然貸款還款號不能唯一地確定是所有銀行貸款中的哪一筆還款,但可以確定指定的某次貸款中的還款記錄,每筆還款都有日期和金額。
- 銀行職員通過職員編號值區別。銀行管理部門儲存每位職員的名字和電話,銀行職員家屬的名字以及僱員經理的職員編號,銀行還儲存了職員的僱傭日期。
視圖綜合概念資料庫設計過程
1 設計局部E_R模式
確定局部結構範圍;
定義實體,產生局部實體;
聯絡定義,確定局部實體間的聯絡及其結構約束;
深入分析,確定子類、超類等聯絡;2 合成,設計全域E_R模式
(1)確定局部E_R模式間公用實體類型;
(2)局部E_R模式合并,合并對應部分,保留特殊部分,刪除冗餘部分:
兩兩合并;
先合并有聯絡的;
從公用實體類型出發,最後再加入獨立的局部結構;
3 消除衝突
(1)屬性衝突:類型、取值範圍、單位等的衝突;
(2)約束/結構衝突:屬性、實體抽象不同,實體鍵、聯絡關係等衝突;
(3)命名衝突:有異名同意義,同名異意等;
4 最佳化 準確、全面反映使用者功能需求; 實體類型個數儘可能少; 屬性儘可能少; 實體類型間聯絡無冗餘;
(1)實體類型合并,例如1:1聯絡的兩個實體可以考慮合并;
(2)冗餘屬性消除。綜合成全域模式後,可能產生全域範圍內的冗餘屬性,比如有些資料可以由其他資料推出;
(3)冗餘聯絡消除。