# DBMS Test 3 (3/25) <style> .markdown-body li + li { padding-top: 0 !important; } </style> --- [TOC] --- ## 8. 延伸式 E-R 模型與業務法則 :::info :::spoiler Cheatsheet 1 ![](https://i.imgur.com/hZbfQkr.png =400x) ::: :::warning :::spoiler Cheatsheet 2 全圖:https://i.imgur.com/YtULEaW.png 註:它的 Chen Notation 的關聯線有些不同 --- ![](https://i.imgur.com/0mFUQfp.png) ![](https://i.imgur.com/wAR0ugN.png) --- ![](https://i.imgur.com/5rFm6pD.png =400x) ![](https://i.imgur.com/s0IaMVX.png) ::: ### 超類型與子類型 - 子類型:在一個實體類型中,屬性與其他子群組不同的一組實體子群駔 - 超類型:與一或多個子類型有關係的一般性實體類型 - 屬性繼承: - 子類型實體繼承其超類型之所有屬性的值 - 子類型的實例也會是超類型的實例 - 關係: - 在超類型層級的關係表示所有的子類型也會參與這個關係 - 子類型的實例可能參與該子類型獨特的關係,此時,這個關係應該顯示在子類型的層級 ![](https://i.imgur.com/cmK5CoU.png =350x) - 概化(由下而上):從一組較特殊化的實體類型中定義出較一般性之實體類型的過程 - 特殊化(由上而下):為超類型定義一或多個子類型。並且形成超類型/子類型關係的過程 - 完全性限制:超類型的實例是否必須至少也是一個子類型成員 - 完全特殊化法則:是(雙線) - 部分特殊化法則:否(單線) - 分離性限制:超類型實例是否可以同時是兩個(或更多)子類型成員 - 分離性法則(***d***isjoint):超類型的實體實例只能是一個子類型的成員 - 重疊性法則(***o***verlapping):超類型的實體實例可以是一個以上的子類型成員 - 子類型鑑別子:屬於超類型的其中一個屬性,其值會決定所屬的子類型 - 分離:單一屬性,用他的值來表示可能的子類型 ![](https://i.imgur.com/prUKFAr.png =500x) - 重疊:複合屬性,他的每個成分代表不同的子類型,每個成分屬性包含一個布林值,表該實例是否屬於對應的子類型 ![](https://i.imgur.com/uhOr767.png =500x) - 實體叢集:將疑惑多個實體類型與其相關關係的集合,聚集成為單一的抽象實體類型 ![](https://i.imgur.com/HzuOfOO.png =400x) ## 9. 練習 1. 假設你想記載資料庫課程的修課學生及其各項成績。因此你有一個名為「學生」的實體型態和一個名為「計分項目」的實體型態。「學生」又可根據其參與的讀書會分成「資料庫設計讀書會員」和「資料庫系統讀書會員」(學生可以同時屬於此一或兩種會員也可以都不是),而計分項目又可細分成「作業」、「計畫」和「考試」(計分項目必須屬於上述三種其中之一,而且是只能有一種)。「學生」與「計分項目」間有一得分的關係,分數必須記載。各實體型態的屬性如下: - 學生:學號、姓名、性別和生日。 - 計分項目:項目名稱和項目種類 (值為HW、PROJ 或 EXAM) - 作業:繳交日期和總分。 - 計畫:繳交日期。 - 考試:考試日期和總分。 - 資料庫設計讀書會員:加入日期。 - 資料庫系統讀書會員:加入日期。 ![](https://i.imgur.com/hQZfnSr.png) 2. 假設你要用EERD 去描述銀行的戶頭與交易,資料需求如下: - 客戶 (Customer) 資料要記載,包括身分證字號 (id)、生日 (bDate) 和住址(address)。其中身分證字號是唯一。 - 客戶可以開數個帳戶 (Account),帳戶資料包括帳號(acctNo)、開戶日期 (date)和餘額 (balance)。此外,有三種帳戶:活存 (Saving)、支票 (Checking) 和定存 (CD),活存帳號要記載最低限額 (lowerBound),支票帳號要記載可用支票數 (freeCheck#),定存帳號要記載利率 (interest) 和期限(period)。為提高競爭力,該銀行容許一個帳戶可同時選擇性的包括這三種功能。其中帳號是唯一。 - 一個帳戶可進行多筆交易 (Transaction),交易資料包括交易號碼 (tid)、交易日期 (date) 和交易種類 (tType),其中交易可依交易種類細分為存款 (deposit)、提款 (withdraw)、和轉帳 (transfer),若為存款則需記載存款金額 (dAmount),若為提款則需記載提款金額 (wAmount) , 若為轉帳則需記載轉帳金額(tAmount)、對方銀行號碼 (bank#) 和帳號 (account)。 ![](https://i.imgur.com/hPSEBRz.png) ## 10. 將實體關聯圖轉換成關聯表綱要 ### 將強實體型態轉換成關聯表 - 建立新關聯表綱要,其名稱是實體型態名稱 - 在關聯表綱要要包含單元值屬性型態和複合屬性型態 - 關聯表綱要不包含多重值屬性型態、外來鍵、和導出屬性型態 - 將鍵屬性(Key Attribute)指定為關聯表綱要的主鍵 ![](https://i.imgur.com/b76xu4T.png =450x) ### 將關聯型態轉換成外來鍵 - 一對一關聯型態 - 在參與關聯性的關聯表綱要新增參考到另一個關聯表綱要的外來鍵 - 若關聯型態擁有單元值屬性,也一併加入新增外來鍵的關聯表綱要 ![](https://i.imgur.com/qqWI6xG.png =450x) ![](https://i.imgur.com/nyDGYEN.png =450x) - 一對多關聯型態 - 在 N 端的菇連表綱要新增參考到 1 端關聯表綱要的外來鍵 - 若關聯型態擁有單元值屬性,也一併加入新增外來鍵的關聯表綱要 ![](https://i.imgur.com/A64ftPF.png =450x) ![](https://i.imgur.com/g11jzMB.png =450x) - 多對多關聯型態 - 將關聯型態建立成新的關聯表綱要,名稱為關聯型態名稱,在新關聯表綱要擁有兩個外來鍵,分別參考關連到的實體型態 - 若關聯型態擁有單元值屬性,也一併加入新增外來鍵的關聯表綱要 - 關聯型態建立的關聯表綱要主見是兩個外來鍵的組合鍵,有時,可能需要新增幾個關聯型態的屬性作為主鍵 ![](https://i.imgur.com/neLPNfJ.png =450x) ![](https://i.imgur.com/3Ywh440.png =450x) ### 轉換多重關聯型態 - 多重關聯型態(Ternary Relationship Type) - 將關聯型態建立新的關聯表綱要,名稱是關聯型態名稱,關聯表綱要擁有多個外來鍵分別參考關連到的實體型態 - 若關聯型態擁有單元值屬性,也一併加入新增外來鍵的關聯表綱要 - 關聯型態建立的關聯表綱要主鍵通常是所有外來鍵的組合鍵,不過,可能需要新增幾個關聯型態的屬性,或部分外來鍵作為主鍵 ![](https://i.imgur.com/NW6PWHZ.png =450x) ![](https://i.imgur.com/Tc6U92v.png =350x) ### 多重值屬性轉換成關聯表 - 建立新的菇連表綱要,名稱可以是屬性名稱或實體與屬性結合的名稱 - 在新關聯表綱要新增參考到實體型態主鍵的外來鍵 - 新關聯表綱要的主鍵是外來鍵加上多重值屬性,如果多重值屬性是複合屬性,可能需要加上其中一個屬性或是全部屬性 ![](https://i.imgur.com/aWSDUuP.png =450x) ### 弱實體型態轉換成關聯表綱要 - 弱實體型態轉換成關聯表綱要,一位弱體型態一定擁有一個對應的識別實體型態(Identifying Entity Type),所以在轉換上稍有不同 - 建立新的關聯表綱要,其名稱為弱實體型態名稱 - 新關聯表綱要包含單元值屬性型態 - 在新關聯表綱要新增識別實體型態的主鍵做為參考的外來鍵 - 將弱實體型態的「部分鍵」(Partial Key)加上外來鍵指定成新關聯表綱要的主鍵 ![](https://i.imgur.com/w61oGIO.png =450x)