1. ER 模型簡介 (Introduction to ER Model)
ER 模型是一種 Object-based data model(物件導向資料模型),廣泛用於概念資料庫設計階段的概念資料模型。
歷史
- Peter Chen (1976) 首次提出 ER 模型
- 原本只有三個基本概念:Entity Relationship Attributes
- 後來擴展加入更多概念:
擴展概念:Generalization Aggregation Composite Attribute Multi-valued Attribute
ER 模型是資料庫設計的「藍圖」,就像建築師畫設計圖一樣,先用 ER 圖規劃好資料結構,再轉換成實際的資料庫 schema。
Q1: ER 模型最初由誰在哪一年提出?
Peter Chen 在 1976 年首次提出 ER 模型,原始版本包含 Entity、Relationship 和 Attributes 三個基本概念。Edgar Codd 提出的是關聯式模型(1970)。
Q2: ER 模型原始版本不包含以下哪個概念?
Generalization 是後來擴展加入的概念。原始 ER 模型只有 Entity、Relationship 和 Attributes。
Q3: ER 模型屬於哪一類資料模型?
ER 模型是 Object-based data model(物件導向資料模型),用於概念層級的資料庫設計。
2. ER 圖形符號 (ER Diagram Notations)
ER 圖使用標準化的圖形符號來表示不同的概念。點擊每個符號卡片查看詳細說明。
Entity Type(實體類型)
矩形
代表一組具有相同屬性的實體集合。例如:EMPLOYEE、DEPARTMENT、PROJECT 等。矩形內寫上實體類型的名稱。
Weak Entity Type(弱實體類型)
雙線矩形
沒有自己的 key attribute,必須依賴其他 entity type(owner)來識別。例如:DEPENDENT 依賴 EMPLOYEE。
Relationship Type(關係類型)
菱形
代表兩個或多個 entity types 之間的關聯。菱形內寫上關係名稱,如 WORKS-FOR、MANAGES 等。
Identifying Relationship(識別關係)
雙線菱形
連接 weak entity type 和其 owner entity type 的特殊關係。Weak entity 透過此關係來獲得完整的識別。
Specialization / IS-A
三角形 + IS-A 標籤
E1 是 superclass,E2/E3 是 subclasses。表示「E2 IS-A E1」的繼承關係。子類繼承父類的所有屬性和關係。
Single-valued Attribute(單值屬性)
橢圓
每個 entity 對此屬性只有一個值。例如:Name、Age、Salary。
Composite Attribute(複合屬性)
橢圓連接子橢圓
可分為更小的子部分,形成階層結構。例如:Address 可分為 City、State、ZipCode。
Multi-valued Attribute(多值屬性)
雙線橢圓
每個 entity 可有多個值。例如:一個人可能有多個電話號碼。有上下界限制。
Derived Attribute(衍生屬性)
虛線橢圓
可從其他屬性推導出來的值。例如:Age 可從 BirthDate 推導;#OfEmployees 可從計算員工數得出。
Key Attribute(鍵屬性)
底線橢圓
值對每個 entity 都不同(唯一性約束)。用底線標示。例如:SSN、EmployeeID。
Partial Key(部分鍵)
虛底線橢圓
Weak entity type 的 discriminator。可唯一識別同一 owner 下的 weak entities。例如:Dependent 的 Name 在同一 Employee 下是唯一的。
Q1: Weak entity type 在 ER 圖中用什麼符號表示?
Weak entity type 用雙線矩形表示,而雙線菱形是 identifying relationship 的符號。
Q2: Derived attribute 在 ER 圖中用什麼符號表示?
Derived attribute 用虛線橢圓表示,因為它的值是「推導」出來的,不是直接儲存的。雙線橢圓是 multi-valued attribute。
Q3: 以下哪個不是 ER 圖的標準符號?
Entity type 用矩形表示,不是圓形。圓形不是 ER 圖的標準符號。
3. Entities(實體)
Entity 是存在且可區分的物件,可以是物理的或概念的。
Physical Entity(物理實體)
特定的人、員工、車、房子 — 可以實際觸摸或看到的物件
Conceptual Entity(概念實體)
公司、工作、大學課程、銀行帳戶 — 抽象的概念
Entity 的特性
- 每個 entity 有 attributes(屬性)來描述它
- 每個 entity 對每個 attribute 有一個值(value)
- Entity 是可以被唯一識別的個體
4. Entity Types(實體類型)
Entity type 是具有相同 attributes 的 entities 集合。
- 同類型的 entities 共享相同 attributes,但各自有不同的值
- 用名稱和屬性列表描述
範例
EMPLOYEE(Name, Age, Salary)
→ e1(Justin, M, 80K), e2(Judy, F, 90K)
Company(Name, Headquarters, President)
→ c1(One-to-One Marketing, Urbana, Justin)
Entity type 定義了「結構」(有哪些屬性),而 entity 是具體的「實例」(有具體的值)。就像「學生」是 entity type,「小明」是一個 entity。
Q1: 以下哪個是 Conceptual Entity?
大學課程是抽象的概念(conceptual entity),而車、員工、建築物都是可以實際看到或觸摸的物理實體(physical entity)。
Q2: Entity type 和 Entity 的關係是?
Entity type 定義結構(如 EMPLOYEE 有 Name, Age, Salary),Entity 是具體的實例(如 Justin, M, 80K)。就像「類別」和「物件」的關係。
5. Relationships and Relationship Types(關係與關係類型)
Relationship(關係)
多個 entities 之間的關聯。
John Smith works-for MIS department
Judy Brown works-on DB-design project for Accounting department
Relationship Type(關係類型)
- 同類型 relationships 的集合
- 每個 relationship instance 包含每個參與 entity type 的恰好一個 entity
6. Types of Relationship Types(關係類型的種類)
① Association Relationship(關聯關係)
關聯兩個或多個獨立的 entity types。
EMPLOYEE works-for DEPARTMENT
② Specialization / Generalization Relationship(特化/一般化關係)
- 將 entity type(superclass)特化為一組 entity types(subclasses)
- IS-A relationship
- Generalization 是 specialization 的反向
- 子類繼承父類的所有 attributes 和 relationships(inheritance)
PERSON IS-A EMPLOYEE / STUDENT(Employee 和 Student 繼承 Person 的所有屬性)
③ Aggregation Relationship(聚合關係)
- 從一組 component entity types 定義新的 aggregate entity type
- IS-PART-OF relationship
ENGINE IS-PART-OF CAR(引擎是汽車的一部分)
Q1: Specialization 和 Generalization 的關係是?
Specialization 是由上而下(superclass → subclasses),Generalization 是由下而上(subclasses → superclass),兩者互為反向。
Q2: IS-PART-OF 關係屬於哪種 relationship type?
IS-PART-OF 是 Aggregation relationship 的特徵。IS-A 是 Specialization,而 Association 是一般的關聯關係。
Q3: Subclass 會繼承 superclass 的什麼?
在 IS-A 關係中,subclass 繼承 superclass 的所有 attributes 和 relationships,這就是 inheritance(繼承)的概念。
7. Attributes(屬性)
Attributes 描述 entity 的特性。有多種分類方式:
① Simple vs Composite(簡單 vs 複合)
Simple (Atomic)
不可分割的屬性
例如:Age、Salary
Composite
可分為更小的子部分
可形成階層結構
Composite 範例:
Address → StreetAddress(Number, Street, ApartmentNumber) + City + State + ZipCode
Name → FirstName + MiddleName + LastName
② Single-valued vs Multi-valued(單值 vs 多值)
Single-valued
每個 entity 只有一個值
例如:BirthDate、SSN
Multi-valued
每個 entity 可有多個值
有上下界限制
Multi-valued 範例:一個人可能有多個電話號碼(Phone: 0912-xxx, 02-xxxx)
③ Stored vs Derived(儲存 vs 衍生)
Stored
原始儲存的值
例如:BirthDate
Derived
可從其他屬性推導
例如:Age(從 BirthDate)
Derived attribute 也可從相關 entities 推導。例如:Department 的 #OfEmployees 可從計算該部門的員工數得出。
8. Null Values(空值)
當 entity 沒有適用的值時,使用 Null。
注意:兩種 Null 的意義不同!
① Not Applicable(不適用):例如公寓號碼對獨棟房屋不適用
② Unknown(未知):例如不知道某人的電話號碼
Q1: Address 可分為 City、State、ZipCode,這種屬性稱為?
Address 可以分解為更小的子部分(City、State、ZipCode),這是 Composite attribute 的特徵。Multi-valued 是指一個屬性有多個值。
Q2: Age 從 BirthDate 計算得出,Age 屬於哪種屬性?
Age 可以從 BirthDate 推導出來,所以是 Derived attribute。BirthDate 才是 Stored attribute。
Q3: Null value 的兩種意義分別是?
Null 有兩種不同意義:Not Applicable(不適用,如公寓號碼對獨棟房屋)和 Unknown(未知,如不知道某人的電話)。
9. Key Attributes(鍵屬性)
- Key attribute = 值對每個 entity 都不同的屬性(唯一性約束)
- Candidate key:可作為 key 的屬性(可能有多個)
- Primary key:被選為主要識別方式的 candidate key
- Secondary key:其他未被選為 primary key 的 candidate keys
Employee 有兩個 candidate keys:
→ SSN(社會安全號碼)
→ EmployeeID(員工編號)
選擇 SSN 作為 primary key,則 EmployeeID 就是 secondary key。
10. Weak Entity Types(弱實體類型)
- 沒有自己的 key attribute 的 entity type
- 透過與 identifying (owner) entity type 的關係來識別
- Identifying relationship:連接 weak entity type 和 owner 的關係
- 總是有 total participation(存在依賴)
- Partial key (discriminator):可唯一識別同一 owner 下的 weak entities 的屬性集
範例:Dependent 依賴 Employee
→ 兩個不同 employee 的 dependent 可能有相同的 Name/BirthDate/Gender
→ Dependent 的 partial key 是 Name(在同一 Employee 下唯一)
→ 完整識別 = Employee.SSN + Dependent.Name
注意:不是所有 existence dependency 都是 weak entity!
例如 Driver_License 雖然依賴 Person 存在,但它有自己的 key(LicenseNumber),所以不是 weak entity。
Q1: Primary key 和 Secondary key 的關係是?
Candidate key 是所有可作為 key 的屬性。從中選一個作為 Primary key,其餘的就是 Secondary key。兩者都具有唯一性。
Q2: Weak entity type 的 partial key 的作用是?
Partial key(discriminator)只能在同一 owner 下唯一識別 weak entities。完整識別需要 owner 的 key + partial key。
Q3: Driver_License 依賴 Person 存在,但有自己的 LicenseNumber。它是 weak entity 嗎?
Weak entity 的定義是「沒有自己的 key attribute」。Driver_License 有 LicenseNumber 作為 key,所以不是 weak entity,即使它在存在上依賴 Person。
11. Degree of Relationship Type(關係的度數)
Degree 指的是參與 relationship 的 entity types 數量。
Relationship Degree 比較
Unary (Degree 1)
同一 entity type 參與多次
Binary (Degree 2)
兩個不同 entity types
Ternary (Degree 3)
三個不同 entity types
大多數現實世界的 relationship types 是 binary(度數為 2)。
12. Roles in Relationship Type(關係中的角色)
- 每個參與的 entity type 扮演特定角色(role)
- 當所有參與 entity types 不同時,角色名稱是隱含的
- 在 Unary (recursive) relationship 中,角色名稱是必要的
Unary 範例:EMPLOYEE supervises EMPLOYEE
→ 需要角色名稱:supervisor(上司)和 supervisee(下屬)
→ 因為同一個 entity type 參與了兩次,必須用角色區分
Q1: 一個 EMPLOYEE supervises 另一個 EMPLOYEE,這是什麼 degree 的 relationship?
雖然有兩個 entity 參與,但它們屬於同一個 entity type(EMPLOYEE),所以是 Unary(recursive)relationship,degree 為 1。
Q2: 什麼情況下角色名稱是必要的?
在 Unary relationship 中,同一個 entity type 參與多次,必須用角色名稱來區分不同的參與方式。其他情況下角色名稱是隱含的。
13. Cardinality Constraints(基數約束)
Binary Relationship 的基數
- Maximal cardinality:一個 entity 最多可關聯多少個另一類型的 entities
- Minimal cardinality:一個 entity 最少要關聯多少個
- 用
(min, max) 表示
互動展示:Cardinality Types
點擊不同的基數類型查看說明和圖示:
1:1 — One-to-One
一個 Employee 最多管理一個 Department,一個 Department 最多被一個 Employee 管理。
(min, max) 表示法
Employee (1,1) Works-for (0,N) Department
→ 每個 Employee 必須且只能在一個 Department 工作 (min=1, max=1)
→ 每個 Department 可以有 0 到多個 Employee (min=0, max=N)
Ternary Relationship 的基數
Student (1,1) Work-on (1,N) Advisor, Dissertation (1,1)
→ 每個 Student 恰好有一個 Advisor 和一篇 Dissertation
→ 每個 Advisor 可以指導 1 到 N 個 Student
不同圖形表示法
- 數字標記:1, N, M
- 箭頭標記:→ 表示 one,無箭頭表示 many
- 文字標記:one, many
Q1: Employee (1,1) Works-for (0,N) Department,以下哪個敘述正確?
Employee 的 (1,1) 表示 min=1, max=1,即每個員工必須且只能屬於一個部門。Department 的 (0,N) 表示部門可以有 0 到多個員工。
Q2: M:N 的 relationship 表示什麼?
M:N 表示多對多(Many-to-Many)關係。一邊的 entity 可以關聯多個另一邊的 entities,反之亦然。例如:Student M:N Course(學生可選多門課,課程可有多個學生)。
Q3: 在箭頭標記法中,→ 表示什麼?
在箭頭標記法中,箭頭(→)表示 one,無箭頭表示 many。
Participation Constraint(參與約束)
Participation constraint 決定一個 entity type 的 instance 是否必須參與某個 relationship。在 ER 圖中用連線的粗細來表示。
兩種參與類型
雙線(Double Line)= Total Participation
- 每個 entity instance 都必須參與該 relationship
- min ≥ 1
- 又稱 existence dependency
單線(Single Line)= Partial Participation
- entity instance 可以不參與該 relationship
- min = 0
- 參與是可選的
互動展示:雙線 vs 單線
點擊切換不同的範例:
Employee ═══ Works_For ─── Department
Employee 是 Total Participation(雙線):每個員工都必須屬於一個部門。
Department 是 Partial Participation(單線):可以有部門暫時沒有員工。
與 (min, max) 的對應
| ER 圖表示 |
Participation |
(min, max) 的 min |
意義 |
| 雙線 ═══ |
Total |
min ≥ 1 |
每個 instance 都必須參與 |
| 單線 ─── |
Partial |
min = 0 |
instance 可以不參與 |
常見範例整理
Employee ═══ Works_For ─── Department
每個員工必須屬於一個部門(Total),但部門可以暫時沒人(Partial)
Employee ─── Manages ─── Department
不是每個員工都管理部門(Partial),也不是每個部門都有管理者(Partial)
Employee ─── Has ═══ Dependent
不是每個員工都有眷屬(Partial),但每個眷屬必須屬於一個員工(Total)— Dependent 是 Weak Entity
Q1: ER 圖中,雙線連線代表什麼?
雙線連線表示 Total Participation,代表該 entity type 的每個 instance 都必須參與該 relationship。
Q2: Employee (0,N) Manages (1,1) Department,Employee 到 Manages 是什麼 participation?
Employee 的 min = 0,表示不是每個員工都管理部門,所以是 Partial Participation(單線)。Department 的 min = 1,表示每個部門都必須有管理者,是 Total Participation(雙線)。
Q3: Weak Entity 到 Identifying Relationship 一定是什麼 participation?
Weak Entity 的存在依賴 Owner Entity,所以它到 Identifying Relationship 一定是 Total Participation(雙線)。沒有 Owner 就不存在。
14. ER Diagram 完整範例
點擊圖中的 entity 或 relationship 查看詳細資訊。
Instructor-Course-Student ER Diagram(互動式)
Q1: 在上面的 ER 圖中,Dependent 是什麼類型的 entity?
Dependent 用雙線矩形表示,是 weak entity type。它的 Name 是 partial key(虛底線),透過 Has(identifying relationship)依賴 Instructor。
Q2: #Students 用虛線橢圓表示,這代表什麼?
#Students 是 derived attribute(衍生屬性),可以從計算選修該課程的學生數得出,不需要直接儲存。
Q3: Student 的 IS-A 標記 (D,P) 代表什麼意思?
D = Disjoint(一個 Student 最多屬於一個 subclass),P = Partial(Student 可以不屬於任何 subclass,即既不是 Undergraduate 也不是 Graduate)。
15. Specialization Constraints(特化約束)
① Disjointness Constraint(不相交約束)
Disjoint (D)
Entity 最多屬於一個 subclass
Overlapping (O)
Entity 可屬於多個 subclasses
② Completeness Constraint(完整性約束)
Total (T)
Superclass 的每個 entity 必須屬於某個 subclass
Partial (P)
Superclass 的 entity 可以不屬於任何 subclass
互動展示:Specialization Constraints
切換開關查看不同約束組合的效果:
目前:(D, P) — Disjoint, Partial
Disjoint:一個 Employee 最多是 Doctor 或 Nurse 其中之一
Partial:Employee 可以既不是 Doctor 也不是 Nurse
四種組合
(D, P) 最多一個 subclass,可以都不是
(D, T) 恰好一個 subclass
(O, P) 可多個 subclass,可以都不是
(O, T) 至少一個 subclass,可多個
範例
Hospital Employee IS-A (D) Doctor / Nurse → 不能同時是醫生和護士
Student Assistant IS-A (O) RA / TA → 可同時是 RA 和 TA
Hospital Employee IS-A (P) → 可以既不是醫生也不是護士
Student Assistant IS-A (T) → 必須是 RA 或 TA(或兩者)
Q1: 一個 Student Assistant 可以同時是 RA 和 TA,這是什麼約束?
可以同時屬於多個 subclass 就是 Overlapping (O)。Disjoint 表示最多只能屬於一個。
Q2: (D, T) 約束表示什麼?
D = Disjoint(最多一個),T = Total(至少一個)。合起來就是「恰好一個」subclass。
Q3: Hospital Employee IS-A (D) Doctor/Nurse,以下哪個情況是允許的?
Disjoint 約束表示一個 entity 最多屬於一個 subclass,所以不能同時是 Doctor 和 Nurse。只是 Doctor 是允許的。
16. Integrity Constraints(完整性約束)
ER 模型中有多種完整性約束,確保資料的正確性和一致性:
Uniqueness constraint
Key attribute 的唯一性約束 — 每個 entity 的 key 值必須不同
Existence-dependence constraint
Weak entity types 的存在依賴約束 — weak entity 必須有對應的 owner entity
Entity participation constraint
包含 cardinality、disjointness、completeness 約束
Attribute domain constraint
資料型別、可能值、值範圍的限制
Attribute value dependence constraint
屬性值之間的依賴關係
Q1: Weak entity type 的存在依賴屬於哪種 integrity constraint?
Weak entity type 必須依賴 owner entity 存在,這就是 existence-dependence constraint。
Q2: 「Salary 必須是正整數且不超過 1,000,000」屬於哪種約束?
限制屬性的資料型別和值範圍屬於 attribute domain constraint。
17. Key Attribute of Relationship Type(關係類型的鍵屬性)
Relationship type 的 key 取決於業務規則和語意。
Work-for 範例
情況 1:員工不能重複在同一部門工作
→ Key = Employee.SSN(因為一個員工只能在一個部門)
情況 2:員工可以重複在同一部門工作(保留歷史紀錄)
→ Key = Employee.SSN + Work-for.StartingDate
Take 範例
情況 1:不能重修
→ Key = Student.SSN + Course.C-No
情況 2:可以重修
→ Key = Student.SSN + Course.C-No + Take.Term
Relationship type 的 key 設計非常重要!它決定了哪些 relationship instances 是「不同的」。設計時要仔細考慮業務需求。
Q1: 如果學生可以重修課程,Take relationship 的 key 應該是?
如果可以重修,同一個學生可以在不同學期修同一門課,所以需要加上 Term 來區分不同的修課紀錄。
Q2: Relationship type 的 key 設計取決於什麼?
Relationship type 的 key 取決於業務規則(如能否重修、能否重複任職)和語意需求,不是機械式決定的。